中国IEEE
关于我们 | 会员登陆 | 收藏本站 | 留 言 薄
 

 | 网站首页 | 电子知识 | 单片机知识 | 电路设计 | 微电子技术 | SCADA系统 | 资源下载 | 给我留言 | 谷歌商城 | 视频教程 | ieee | 
热门搜索关键字: 单片机教程 | 三极管 | 二极管 |  C语言汇编语言SCADA元器件模拟电子 |
cnieee.com baidu
栏目导航  
栏目更新推荐  
·单片机实现数据远程监控
·单片机控制的模拟开关灯实验
·最常应用的流水闪烁灯实验
·第二章   Keil C软件使用…
·第一章  AT89S51单片机实验及实践…
·运算放大器的噪声分析
·RS-232C接口标准详解
·利用串口对 89S 系列单片机编程…
点击TOP(10)  
  • 此栏目下没有热点文章
  • 图片文章  

    单片机实现数据远程…

    单片机控制的模拟开…

    最常应用的流水闪烁…

    第二章   Keil C软…
     
    您现在的位置: 中国IEEE中国电气电子工程师网 >> 单片机知识 >> 行业动态 >> 正文

    单片机实现数据远程监控
    文章来源:本站整理 点击数: 更新时间:2008-5-16 【字体:
    (欢迎光临中国IEEE,希望本文能对您有所帮助http://www.cnieee.com)


    相关文章:

    用单片机实现高速数据采集

  • 上一个文章:

  • 下一个文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    关于〖单片机实现数据远程监控〗的最新评论:

    1、主模块(rand_main.a51

    ;------------1--------rand_main.a51----------------

    name rand_main

    EXTRN CODE(I_T0,send_order,rec_si,ascii_bcd,key)

    extrn data (DISP_buf,disp_wc,time_20ms,wdt)

    extrn idata (rec_buf)

    public TH0_H,TL0_L,START,ri_f,wdt_time,key_work,key_f

    prog SEGMENT CODE           ;定义代码段

    byte_buff segment data      ;定义字节数据段1

    byte_buffI segment idata    ;定义字节数据段2

    bit_buff segment data bitaddressable ;定义位数据段

    bit_flag segment bit

    stack segment idata         ;定义堆栈数据段

         rseg stack         ;为堆栈保留20个字节

         ds 20

         CSEG AT 00H        ;定义绝对代码段

         USING 0            ;选择工作寄存器组第0

         lJMP rand          ;复位时程序执行执行点

         CSEG AT 03H        ;外部中断0

         RETI

         CSEG AT 0BH        ;定时器0中断

         lJMP I_T0

         CSEG AT 13H        ;外部中断1

         ljmp key

         RETI

         CSEG AT 1BH        ;定时器1中断

         RETI

         CSEG AT 23H        ;串行中断

         ljmp rec_si

         RSEG BYTE_BUFF

         td_temp: ds 1

         TD_n: DS 1         ;通道号

         YD_n100: ds 1      ;仪表地址

    ;----------------------------------

         rseg bit_flag

         key_work:dbit 1

         ri_f: dbit 1       ;串行口正在接收标志

    ;----主程序

         RSEG prog

    ;------------------------------符号定义

         key_f equ p3.3

         key_up equ p3.4

         key_down equ p3.5

         wdt_time equ 100       ;软件看门狗定时器计数值

         scon_c equ 01010000b   ;串行口设置为10UART,允许接收

         th1_h equ 0fdh         ;晶振为11.0592M,波特率为9600时初值

         tmod_n equ 21h         ;设置定时器(T1作为波特率发生器工作在模式2T0为模式1

         ie_n equ 82h           ;设置串行,定时器0中断

         ip_n equ 12h           ;设置串行,定时器0中断为高级中断

         TH0_H EQU 0FCH

         TL0_L EQU 06BH         ;设定定时器01MS中断初值

    ;------------------初始化代码

    clear_wdt macro             ;清硬看门狗宏定义

         orl 96h,#2

         ENDM

    rand:    ORL 96H,#0E1H      ;启动硬件看门狗

         mov p0,#0ffh

         mov r0,#20h

         mov a,#0

    start_300:mov @r0,a

         inc r0

         cjne r0,#128,start_300

         setb key_work      ;置巡回/定点标志

         mov p3,#0ffh

         mov p2,#0ffh

         mov disp_wc,#0         ;初始化闪烁控制位

         mov ip,#ip_n       ;设置串行,定时器0中断为高级中断

         mov scon,#scon_c

         MOV TMOD,#tmod_n  

         MOV TH0,#TH0_H         ;设定定时器初值

         MOV TL0,#TL0_L

         mov th1,#th1_h

         mov tl1,#th1_h

         mov ie,#ie_n

         mov pcon,#0

         SETB tr1

         SETB TR0

    ;-------显示初始化提示

         acall chuhao

         CLEAR_WDT    

    start:   clr ea

         mov sp,#stack-1

         setb ea

         clr ri_f      ;清接收中标志

         clr p3.2      ;75176为接收状态

         jnb key_work,db_work

    ;-----------------------------------

         setb ex1

         mov yd_n100,#0ah

         mov td_n,#0

    s_0: anl disp_wc,#0f0h

         mov wdt,#0         ;清看门狗定时器

         clear_wdt

         mov a,yd_n100

         lcall send_order

         JNZ s_1

         mov disp_buf+5,yd_n100

         mov a,td_n

         lcall ascii_bcd

         jnz s_2

         mov disp_buf+4,td_n

         acall mov_to_disp

         mov wdt,#0

         clear_wdt

         mov a,#75

         add a,time_20ms

         cjne a,time_20ms,$

         mov wdt,#0

         clear_wdt

         mov a,#75

         add a,time_20ms

         cjne a,time_20ms,$

    s_2: inc td_n

         mov a,td_n

         cjne a,#8,s_0

         mov td_n,#0

    s_1: inc yd_n100

         MOV A,YD_N100

         cjne a,#10h,s_0

         mov yd_n100,#0ah

         ajmp s_0

    ;-----------------------------

    db_work:setb ex1

         orl disp_wc,#01h

    d_3: mov wdt,#0         ;清看门狗定时器

         clear_wdt

         jb key_up,d_4

         mov a,#2

         add a,time_20ms

         cjne a,time_20ms,$

         jb key_up,d_4

    d_5: mov wdt,#0

         clear_wdt

         jnb key_up,d_5         ;等待向上键松开

    ;------------------------------------------------

    d_53:    mov a,td_n

         cjne a,#7,d_50

         mov td_n,#0

    d_52:    inc yd_n100

         mov a,yd_n100

         cjne a,#10h,d_51

         mov yd_n100,#0ah

         ajmp d_51

    d_50:    inc td_n

    d_51:    mov a,yd_n100

         lcall send_order

         JNZ d_52

         mov disp_buf+5,yd_n100

         mov a,td_n

         lcall ascii_bcd

         jnz d_53

         mov disp_buf+4,td_n

         acall mov_to_disp

         mov a,#100         ;2秒钟定时设定

         add a,time_20ms

         ajmp d_3

    ;------------------------------------------------

    d_4: jb key_down,d_10

         mov a,#2

         add a,time_20ms

         cjne a,time_20ms,$

         jb key_down,d_3

    d_6: mov wdt,#0

         clear_wdt

         jnb key_down,d_6   ;等待向下键松开

    ;-----------------------------------------------

    d_43:    mov a,td_n

         cjne a,#0,d_40

         mov td_n,#7

    d_42:    dec yd_n100

         mov a,yd_n100

         cjne a,#9h,d_41

         mov yd_n100,#0fh

         ajmp d_41

    d_40:    dec td_n

    d_41:    mov a,yd_n100

         lcall send_order

         JNZ d_42

         mov disp_buf+5,yd_n100

         mov a,td_n

         lcall ascii_bcd

         jnz d_43

         mov disp_buf+4,td_n

         acall mov_to_disp

         mov a,#100         ;2秒钟定时设定

         add a,time_20ms

         ajmp d_3

    ;----------------------------------

    d_10:    cjne a,time_20ms,d_30

         mov a,yd_n100

         lcall send_order

         jnz d_30

         mov a,td_n

         lcall ascii_bcd

         jnz d_30

         acall mov_to_disp

    mov a,#100

         add a,time_20ms

    d_30:ajmp d_3

    ;----------------------------------

    mov_to_disp:mov disp_buf,r1

         mov disp_buf+1,r2

         mov disp_buf+2,r3

         mov disp_buf+3,r4

         ret

    chuhao:  mov r1,#1eh        ;初始化等待提示

         mov r2,#22h

         mov r3,#21h

         mov r4,#1fh

         mov disp_buf+4,#21h

         mov disp_buf+5,#20h

         acall mov_to_disp

         mov a,#75

         add a,time_20ms

         cjne a,time_20ms,$

         mov wdt,#0

         clear_wdt

         mov a,#75

         add a,time_20ms

         cjne a,time_20ms,$

         ret

        end

    2、数据转换子模块(rand_data.a51

    ;-----------2-------rand_data.a51----------------

    name  rand_data

    extrn idata (rec_buf)

    public ascii_bcd

    prog SEGMENT CODE           ;定义代码段

    byte_buff segment data      ;定义字节数据段1

    byte_buffI segment idata    ;定义字节数据段2

    bit_buff segment data bitaddressable ;定义位寻址区字节数据段

         rseg prog

         using 0

    ;-------------------------------------

    ASCII_BCD:mov b,#8     ;计算该通道数据偏移首地址

         mul ab

         add a,#5

         mov r0,#rec_buf

         add a,r0

         mov b,a

         mov r0,a

         acall ascii4_bcd3

         mov a,b            ;还原小数位数

         add a,#7

         mov r0,a

         acall ascii_bin

         mov r6,a           ;小数位数暂存在R6

         mov a,r5

         jz asc_oK

         mov a,dpl

         cpl a

         clr c

         inc a

         mov dpl,a

         mov a,dph

         cpl a

         addc a,#0

         mov dph,a

         jnz asc_b

    asc_0:   mov a,dpl

         dec a

         jnz asc_b

         mov r1,#0fh

         mov r2,#0fh

         mov r3,#0fh

         mov r4,#0fh

         mov a,#0fh

         ajmp asc_out

    asc_b:   mov r1,dpl         ;为负数处理

         mov r2,dph

         acall bin_bcd

         mov a,b            ;还原小数位数

         add a,#7

         mov r0,a

         acall ascii_bin

         mov r6,a           ;小数位数暂存r6

         acall bcd2_bcd1

         mov a,r4

         dec a

         jnz asc_100        ;数据小于-199.9时显示-199.9

         mov r4,#23h

         ajmp asc_sw

    asc_100:mov r4,#23h

         mov r3,#9

         mov r2,#19h

         mov r1,#9

         ajmp asc_sw_1

    asc_ok:  acall bcd2_bcd1        ;正常数据处理程序

    asc_sw:  mov a,r4      ;清除有效位前面的0    

         jnz asc_sw_1

         mov r4,#1ch

         mov a,r3

         jnz asc_sw_1

         mov r3,#1ch

    asc_sw_1:clr a

    asc_out:ret

    ;------------每字节两位BCD码转换为每字节一位BCD码子程序

    ;入口:r3=个位及十位BCD,r4=百位及千位BCD,r6=小数位数

    ;出口:r1=个位BCD,r2=十位BCD,r3=百位BCD,r4=千位BCD

    bcd2_bcd1:mov a,r3     ;个位及十位BCD数处理

         anl a,#0fh

         mov r1,a

         mov a,r3

         anl a,#0f0h

         swap a

         mov r2,a

         mov a,r4      ;百位及千位BCD数处理

         anl a,#0fh

         mov r3,a

         mov a,r4

         anl a,#0f0h

         swap a

         mov r4,a

         mov a,r6      ;加入小数点信息

         jz bcd2_out

         add a,#ar1

         mov r0,a

         mov a,@r0

         add a,#10h

         mov @r0,a

    bcd2_out:ret

    ;---------------ASCii4_BCD3转换子程序

    ;入口:r0=四字节ASCII码首地址

    ;出口:r5,r4,r3从高至低依次存放BCD码(r3,r4各存2位,r51位)

    ascii4_bcd3:acall ascii4_bin2

         mov dpl,r1

         mov dph,r2

         acall bin_bcd

         ret

    ;---------------BIN_BCD转换子程序

    ;入口:r1=BIN低字节,r2=BIN高字节 共2字节