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----------------
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位,r5存1位)
ascii4_bcd3:acall ascii4_bin2
     mov dpl,r1
     mov dph,r2
     acall bin_bcd
     ret
;---------------BIN_BCD转换子程序
;入口:r1=BIN低字节,r2=BIN高字节 共2字节
;出口:r3=低2位BCD码,r4=高2位BCD码,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] 下一页