单片机实现P3.4口1ms方波与P3.5口1min方波输出
单片机实现P3.4口1ms方波与P3.5口1min方波输出
本程序使用单片机实现以下功能:
- P3.4口输出周期为1ms的方波(采用软件定时)
- P3.5口输出周期为1min的方波(采用定时中断)
硬件:
- 单片机 (晶振频率12MHz)
软件:
ORG 0000H
SJMP START
ORG 001BH ;T1中断入口.
SJMP T1_INT
ORG 0030H
START:
MOV 50H,#120 ; 修改此处以实现1分钟中断
MOV 51H,#30
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 ;启动T1
LP: 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 ;等待6s
CPL P3.5 ;输出方波
RETI ;中断返回
LOOP2: JNB P1.1,$ ;等待按键松开
LP1: ACALL DELAY_500us
CPL P3.4 ;取反,生成方波
JNB P1.1,BACK ;按键再次被按下,返回主程序
JB P1.1,LP1
BACK: JNB P1.1,$
JB P1.1,START
DELAY_500us:
MOV R0,#249
DJNZ R0,$
RET
END
代码说明:
- LOOP1: 控制P3.5口输出1分钟方波。
- 使用定时器T1中断,每50ms中断一次。
- 计数器
50H和51H控制中断次数,实现1分钟的定时。 - 在中断服务程序
T1_INT中,对P3.5取反以生成方波。
- LOOP2: 控制P3.4口输出1ms方波。
- 使用软件延时
DELAY_500us实现500us的延时。 - 在循环中,对P3.4取反以生成方波。
- 使用软件延时
注意:
- 将
MOV 50H,#20和MOV 51H,#30修改为MOV 50H,#120和MOV 51H,#30即可将中断循环的周期改为1分钟。 - 可以根据需要修改延时函数
DELAY_500us中的延时值,以调整P3.4口输出方波的频率。
原文地址: https://www.cveoy.top/t/topic/fyvj 著作权归作者所有。请勿转载和采集!