|
倒计时器在生活非常有用,用单片机自制,不但电路简单,而且功能可根据需要自行设计。由74系列、40系列小规模数字芯片设计的倒计时器非常多,但有显示不直观(无LED数码管);调整参数不灵活;计时精度低(采用RC振荡)等缺点。在此向大家介绍如何用89C2051单片机自制倒计时器的方法。
一、功能介绍
1. 独立的三路倒计时。均可独立设置启动、关闭。
2. 范围:0"20小时,可任意设定。关机后数据不丢失。计时精度高:0aH
DB 01111000B;f=>b
dB 11101100B;e=>C
DB 00110000B;1,=>D
;**********************************
;delay
;********************************
timer_1ms:
push b
mov r2,#01h
a_1: mov b,#020h
b_1: djnz b,b_1
djnz r2,a_1
pop b
ret
;******************
; TO-T1_INT T1定时器完成100毫秒定时(6M晶振)
;******************
T1:
setb tr0
PUSH ACC ;程序参数保护
PUSH b ;
push psw
inc time_led1
mov a,time_led1
cjne a,#5d,t1_n1;判断time_led1中是否满5?
mov time_led1,#00h
cpl timer_50ms;满50毫秒后对50毫秒标志位取反
; mov a,timers
; cjne a,#10d ,t1_n11;判断timers中是否满10?
;t1_n12:
; clr timer_1s;满1秒后对1秒标志位取反
sjmp t1_n1
;*********************************
t1_end_2: ajmp t1_end_1
;********************************
;t1_n11: jc t1_n12
; setb timer_1s
t1_n1: djnz timers ,t1_end_2
mov timers,#tis
inc time_led3
mov a,time_led3
cjne a,#03d,t1_sec
mov time_led3,#00h
cpl timer_3s
t1_sec:
inc sec
mov a,sec
cjne a,#60d ,t1_end
mov sec,#00d
jnb al1_f ,t1_al1
mov a,al1_min_t
mov b,al1_hour_t
mov c ,aal1_f
acall al_all
mov al1_min_t,a
mov al1_hour_t,b
mov aal1_f,c
t1_al1:
jnb al2_f ,t1_al2
mov a,al2_min_t
mov b,al2_hour_t
mov c ,aal2_f
acall al_all
mov al2_min_t,a
mov al2_hour_t,b
mov aal2_f,c
t1_al2:
jnb al3_f ,t1_al3
mov a,al3_min_t
mov b,al3_hour_t
mov c ,aal3_f
acall al_all
mov al3_min_t,a
mov al3_hour_t,b
mov aal3_f,c
t1_al3:
T1_END:
t1_end_1:
;************************************ sub t0 timer
clr c
clr tr0
mov b,timer_no
mov a,#til
add a,tl0
addc a,b ;*******have 5 order
mov tl1 ,a
mov a,#tih
addc a, th0
mov th1,a
mov th0,#00h
mov tl0,#00h
setb tr1
pop psw
pop b ;
pop acc ;
RETI ;
;************************************
beep:
clr ha
mov r6,#060h
bee_2: mov r4,#0ffh
bee_1:
djnz r4 ,bee_1
djnz r6,bee_2
setb ha
ret
;***************************************
stop:
mov a,#0ffh
mov p1,a
mov p3,a
mov a,pcon
orl a,#00000010b
mov pcon,a
ret
al_out_way:
jnb aal1_f ,al_out1
mov r3,#0ffh
pnp_3:
mov b,#060h
pnp_4:
push b
acall led_jmp_1;led_times
mov c,timer_50ms
mov ha ,c
pop b
djnz b ,pnp_4
djnz r3 ,pnp_3
mov c,al2_f
orl c,al3_f
jc al_out54
acall stop
al_out54:
clr aal1_f
clr al1_f
sjmp al_out4
al_out1:
jnb aal2_f ,al_out2
clr pnp1
mov r3,#0ffh
pnp_1:
mov b,#020h
pnp_2:
push b
acall led_jmp_1;led_times
pop b
djnz b ,pnp_2
djnz r3 ,pnp_1
setb pnp1
mov c,al1_f
orl c,al3_f
jc al_out64
acall stop
al_out64:
clr aal2_f
clr al2_f
sjmp al_out4
al_out2:
jnb aal3_f ,al_out3
clr pnp2
al_out3:
jnb turn_f ,al_out4
acall stop
al_out4:
ret
;*******************************************
al_all:
jc al_all_1
dec a
jnz al_all_1
mov a,b
jz al_all_3
dec b
sjmp al_all_2
al_all_3:
setb c
sjmp al_all_1
al_all_2:
mov a,#60d
al_all_1:
ret
;看懂别人写的汇编程序是很困难的事情,我希望有兴趣的网友能帮我完成这段程序的中文注释,这样可以使初学者能够更加容易学会编程.
这是上面程序汇编以后获得的编程器烧写文件:timer.hex
下载烧写文件的方法:将鼠标移到烧写文件的超级键连处,点击鼠标的右键,选择“目标另存为(A)...”保存文件类型中不要选择“文本文件”,应该选择“所有文件”,这样就能获得*.hex文件了。
[/td]
[/tr]
|
|