单片机实现不同频率方波输出:软件定时与定时器中断应用

本文将介绍如何使用51单片机实现不同频率的方波输出。我们将分别使用软件定时和定时器中断两种方式,实现P3.4口输出1ms周期方波和P3.5口输出1分钟周期方波。

**程序代码:**assembly ORG 0000H SJMP START ORG 001BH ;T1中断入口. SJMP T1_INT ORG 0030HSTART: MOV 50H,#20 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 ;启动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 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

代码解释:

  1. 晶振频率: 程序中假设单片机晶振频率为12MHz。2. 按键控制: - 按下P1.0,执行LOOP1,输出1分钟周期的方波。 - 按下P1.1,执行LOOP2,输出1ms周期的方波。3. LOOP1 (1分钟周期方波): - 使用定时器T1中断实现。 - T1定时时间为50ms。 - 中断服务程序中使用两个计数器 (50H和51H) 实现1分钟的定时。 - 每50ms中断一次,计数器递减,当计数器减到0时,翻转P3.5的电平,实现1分钟周期的方波输出。4. LOOP2 (1ms周期方波): - 使用软件定时实现。 - 通过调用DELAY_500us子程序实现500us的延时。 - 每500us翻转一次P3.4的电平,实现1ms周期的方波输出。

修改代码实现1分钟方波输出:

可以通过修改LOOP1中50H和51H的值来改变中断循环的时间,从而改变方波的周期。如果要实现1分钟的方波输出,可以将中断循环的时间改成1分钟,只需要修改以下两行代码:assemblyMOV 50H,#60 ; 将50H的值改成60MOV 51H,#0 ; 将51H的值改成0

这样就可以实现1分钟的方波输出了。

总结:

本文介绍了如何使用51单片机实现不同频率的方波输出。分别使用了软件定时和定时器中断两种方式,并详细解释了代码的实现方法。同时,还介绍了如何修改代码以实现不同的方波周期。希望本文能够帮助读者更好地理解单片机定时器和中断的使用方法

单片机实现不同频率方波输出:软件定时与定时器中断应用

原文地址: https://www.cveoy.top/t/topic/fyvd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录