单片机实现P3.4/P3.5口输出方波程序 - 软件定时与定时中断
单片机实现P3.4/P3.5口输出方波程序 - 软件定时与定时中断
本文提供基于51单片机的P3.4和P3.5口输出方波程序,分别使用软件定时和定时中断实现1ms和1min的周期。
程序功能
- 通过按键控制P3.4口输出周期为1ms的方波(采用软件定时)- 通过按键控制P3.5口输出周期为1min的方波(采用定时中断)
硬件环境
- 单片机型号:STC89C51或兼容型号- 晶振频率:12MHz
软件代码assembly ORG 0000H SJMP START ORG 001BH ;T1中断入口. SJMP T1_INT ORG 0030HSTART: MOV 50H,#20 MOV 51H,#30 MOV 52H,#60 ; 添加变量,用于1分钟计时 MOV 53H,#0 ; 添加变量,用于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 ;等待30s DJNZ 52H, T1_INT ; 等待1分钟 DJNZ 53H, T1_INT ; 等待1分钟 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
代码解释
LOOP1: 控制P3.4口输出1ms方波,使用软件定时,通过循环和延时实现。-LOOP2: 控制P3.5口输出1min方波,使用定时中断,每隔1分钟触发一次中断,翻转P3.5电平。-T1_INT: 定时器1中断服务程序,每隔一段时间累减计数器,当计数器减到0时,翻转P3.5电平。-DELAY_500us: 软件延时子程序,延时约500us。
SEO优化建议
- 标题和描述中包含关键词“单片机”、“方波输出”、“软件定时”、“定时中断”等。- 内容结构清晰,使用标题、段落和代码块,方便搜索引擎理解。- 代码注释清晰,方便用户理解代码逻辑。
总结
本文提供了一种基于51单片机实现P3.4和P3.5口输出方波的方法,并提供了详细的代码和解释。希望对您有所帮助。
原文地址: https://www.cveoy.top/t/topic/fyvh 著作权归作者所有。请勿转载和采集!