用单片机实现温度远程显示 第8页
mov r5,#0
mov r6,#16 ;设置二进制数位数
clr c
bin_0: mov a,r1
rlc a
mov r1,a
mov a,r2
rlc a
mov r2,a
mov r0,#ar3
mov r7,#3 ;设置BCD字节数
bin_1: mov a,@r0
addc a,@r0
da a
mov @r0,a
inc r0
djnz r7,bin_1
djnz r6,bin_0
POP PSW
POP ACC
ret
;---------------ASCII4_BIN2转换子程序
;入口:R0=ASCII码首地址(共四字节ASCII码)
;出口:r1=BIN码低字节,R2=BIN码高字节
ascii4_bin2:PUSH ACC
acall ascii_bin
anl a,#0fh
swap a
mov r1,a
inc r0
acall ascii_bin
anl a,#0fh
orl ar1,a
inc r0
acall ascii_bin
anl a,#0fh
swap a
mov r2,a
inc r0
acall ascii_bin
anl a,#0fh
orl ar2,a
POP ACC
ret
;---------------ASCII_BIN转换子程序
;入口:R0=ASCII地址
;出口:A=BIN码
ascii_bin:mov a,@r0
clr c
subb a,#3ah
jnc ascii_0
add a,#7
ascii_0:add a,#3
ret
end
3、显示、软件看门狗及20ms定时器子模块(rand_disp.a51)
;--------3--------rand_disp.a51-------------------------
name rand_disp
extrn number(TH0_H,TL0_L,wdt_time)
PUBLIC I_T0,disp_buf,disp_wc,time_20ms,wdt
prog SEGMENT CODE ;定义代码段
BYTE_BUFF segment data ;定义字节数据段1
byte_buffI segment idata ;定义字节数据段2
bit_buff segment data bitaddressable ;定义位数据段
RSEG BYTE_BUFF
wdt: ds 1
time_s_c: ds 1
time_20ms: ds 1
DISP_C: ds 11 ;显示位
disp_buf data disp_c+1 ;个位缓冲区,此个位并非真正的个位,指最右一位,以下类推
disp_2 data disp_c+2 ;十个位缓冲区
disp_3 data disp_c+3 ;百位缓冲区
disp_4 data disp_c+4 ;千位缓冲区
disp_5 data disp_c+5 ;通道位缓冲区
disp_6 data disp_c+6 ;地址位缓冲区
disp_7 data disp_c+7 ;无
disp_8 data disp_c+8 ;无
disp_s data disp_c+9 ;闪烁计数器
rseg bit_buff
disp_wc: ds 1
disp_c_1 bit disp_wc.0 ;个位闪烁标志位 1-闪烁
disp_c_2 bit disp_wc.1 ;十位闪烁标志位
disp_c_3 bit disp_wc.2 ;百位闪烁标志位
disp_c_4 bit disp_wc.3 ;千位闪烁标志位
disp_s_c bit disp_wc.4 ;闪烁控制位 1-闪烁
RSEG PROG
using 0
dsb equ p3.4
cr_not equ p3.5
cp equ p3.6
I_T0: push acc
push ar0
push dph
push dpl
push psw
mov th0,#th0_h
mov tl0,#tl0_l
mov dptr,#tab
;---------------------------------------------
djnz disp_s,d_20
cpl disp_s_c
;---------------------------------------------
d_20: INC DISP_C
MOV R0,DISP_C
CJNE R0,#1,DISP2 ;r0=1显示个位
mov c,disp_c_1
mov A,disp_buf
mov p1,#0FFH
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页