📄 timer_fangbo_a.asm
字号:
;//****************************************************
;//实现功能:单片机的晶振为12MHz,使用定时/计数器0编写
;// 一个产生2KHz的方波程序,并在P1.0输出
;//目标板 :至强51开发板
;//开发商 :电子开发网www.dzkf.com (专业提供开发方案,
;// 电子元器件网上订购,单片机培训服务)
;//对开发板有什么疑问,请上我们的论坛bbs.dzkf.com探讨
;//****************************************************
;//*****************宏定义*****************************
p_out equ P1.0
td_num equ 20h
org 00h
ajmp main
org 0Bh
ajmp timer0
;//*********************主函数************************
;//描 述:使用使用定时/计数器0编写一个产生2KHz的
;// 方波程序,并在P1.0输出
;//入口参数:无
;//返回参数:无
;//设 计:ycj
;//最后修改:时间(2006.5.2) 修改人(ycj)
;//****************************************************
org 30h
main:
mov sp,#50h
mov R7,#0
mov R6,#002h
call timer_init;定时器初始化
mov TL0,#06h;对定时器0赋初值
mov TH0,#06h;对定时器0赋自动重装值
setb TR0;启动T0
setb ET0;允许定时器0中断
setb EA;允许全局中断
mov td_num,#10
main_0: ajmp $;死循环等待中断
;//************************定时器初始化函数*******************
;//描 述:对定时/计数器初始化
;//入口参数:R7 定时/计数器的编号(0或者1)
;// R6 定时/计数器的状态(GATE,C/T,M1,M0对应这R6.3,R6.2,R6.1,R6.0)
;//返回参数:无
;//设 计:ycj
;//最后修改:时间(2006.5.2) 修改人(ycj)
;//****************************************************************
timer_init:
push acc
push psw
cjne R7,#0,timer1;判断是否是T0
;是T0
mov a,#0f0h;清T0的TMOD状态
anl a,TMOD;
orl a,R6;把需要设定的状态写进TMOD
mov TMOD,a
pop psw
pop acc
ret
timer1:
cjne R7,#1,timer_init_err;判断是否是T0
;是
mov a,#00fh;清T1的TMOD状态
anl a,TMOD
xch a,R6;把需要设定的状态写进TMOD
swap a
orl a,R6
mov TMOD,a
timer_init_err:
pop psw
pop acc
ret
;//************************定时器0中断处理函数*******************
;//描 述:定时器0中断处理函数,实现P1.0脚输出2KHz的方波
;//入口参数:无
;//返回参数:无
;//设 计:ycj
;//最后修改:时间(2006.5.2) 修改人(ycj)
;//*************************************************************
timer0:
push psw
djnz td_num,exit
cpl p_out
mov td_num,#10
exit:
pop psw
reti
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -