用单片机实现温度远程显示 第7页

用单片机实现温度远程显示 第7页

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字节

;出口:r3=2BCD码,r4=2BCD,r5=可能的最高位BCD   

bin_bcd:PUSH ACC

     PUSH PSW

     mov r3,#0 ;BCD单元清0

     mov r4,#0

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有