单片机实现P3.4口1ms方波和P3.5口1分钟方波输出
单片机实现P3.4口1ms方波和P3.5口1分钟方波输出
程序功能
本程序使用51单片机实现以下功能:
- 按键控制: 通过按键P1.0和P1.1分别控制P3.4和P3.5口的方波输出。* P3.4口输出1ms方波: 通过软件定时的方式,在P3.4口输出周期为1ms的方波。* P3.5口输出1分钟方波: 通过定时器T1中断,在P3.5口输出周期为1分钟的方波。
程序代码assembly ORG 0000H SJMP START ORG 001BH ;T1中断入口. SJMP T1_INT ORG 0030HSTART: MOV 50H,#60 ; 设置分钟计数器初始值为60 MOV 51H,#1 ; 设置秒计数器初始值为1 JNB P1.0,LOOP1 JNB P1.1,LOOP2 ;按键扫描 AJMP START
LOOP1: JNB P1.0,$ ;等待按键松开 MOV TMOD, #10H ;设置T1定时方式1 MOV TH1, #3CH ;送入初始值. MOV TL1, #0B0H ;定时50MS MOV IE, #10001000B ;开放总中断和T1中断. SETB TR1 ;启动T1LP: JB P1.0,LP ;等待按键再次被按下 JNB P1.0,WAIT ;按键被再次按下
WAIT: JNB P1.0,$ ;等待按键松开 CLR TR1 ;关闭定时器 JB P1.0,START ;返回主程序
T1_INT: MOV TH1, #3CH ;重新送入初始值. MOV TL1, #0B0H ;定时 DJNZ 50H, T1_INT ; 递减分钟计数器 DJNZ 51H, T1_INT ; 递减秒计数器,等待1min CPL P3.5 ;输出方波 RETI ;中断返回
LOOP2: JNB P1.1,$ ;等待按键松开LP1: ACALL DELAY_500us CPL P3.4 ;取反,生成方波 JNB P1.1,BACK ;按键再次被按下,返回主程序 JB P1.1,LP1BACK: JNB P1.1,$ JB P1.1,START
DELAY_500us: MOV R0,#249 DJNZ R0,$ RETEND
代码说明
- 晶振频率: 程序假设单片机晶振频率为12MHz。2. 定时器T1: 程序使用定时器T1的工作方式1,并设置定时时间为50ms。在中断服务程序
T1_INT中,通过计数器50H和51H实现1分钟的定时,并在每分钟结束时翻转P3.5的电平,从而产生1分钟周期的方波。3. 软件定时: P3.4口输出的1ms方波通过软件延时函数DELAY_500us实现。4. 按键控制: 按下P1.0启动P3.5口输出1分钟方波,再次按下P1.0停止输出;按下P1.1启动P3.4口输出1ms方波,再次按下P1.1停止输出。
总结
本程序简单清晰地展示了如何使用单片机实现不同频率的方波输出,并结合了定时器中断和软件定时两种方式,方便读者学习和理解。
原文地址: https://www.cveoy.top/t/topic/fyvl 著作权归作者所有。请勿转载和采集!