设fosc=12MHz,编写一段程序,对定时器/计数器T0进行初始化,使之工作在方式2,产生100μs定时,控制P1.1引脚输出频率为5KHz的方波。
计算题 设fosc=12MHz,编写一段程序,对定时器/计数器T0进行初始化,使之工作在方式2,产生100μs定时,控制P1.1引脚输出频率为5KHz的方波。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢
- 计算初值
- 已知晶振频率$ f_{osc}=12MHz $,机器周期$ T = 1\mu s $。
- 对于定时器/计数器$ T0 $工作在方式$ 2 $(8位自动重装初值定时器),定时时间$ t = 100\mu s $。
- 根据定时时间公式$ t=(256 - X)\times T $($ X $为初值),可得$ 100=(256 - X)\times1 $,解得$ X = 256 - 100=156 = 9CH $。
- 要产生频率为$ 5KHz $的方波,其周期$ T_w=\frac{1}{5000}=200\mu s $,高电平和低电平各占$ 100\mu s $。
- 编写程序
- 以下是使用51单片机汇编语言编写的程序:
ORG 0000H AJMP MAIN ORG 000BH AJMP T0_ISR MAIN: MOV TMOD, #02H ;设置T0为方式2 MOV TL0, #9CH ;装入初值 MOV TH0, #9CH SETB EA ;开总中断 SETB ET0 ;开T0中断 SETB TR0 ;启动T0 SJMP $ T0_ISR: CPL P1.1 ;取反P1.1引脚电平 RETI- 以下是使用C语言编写的程序:
#include <reg51.h> sbit P1_1 = P1^1; void main() { TMOD = 0x02; //设置T0为方式2 TL0 = 0x9C; //装入初值 TH0 = 0x9C; EA = 1; //开总中断 ET0 = 1; //开T0中断 TR0 = 1; //启动T0 while (1); } void T0_ISR() interrupt 1 { P1_1 = ~P1_1; //取反P1.1引脚电平 }在上述程序中,首先对定时器$ T0 $进行初始化,设置其工作方式为方式$ 2 $,并装入初值。然后开启总中断、$ T0 $中断并启动$ T0 $。在定时器$ T0 $中断服务程序中,对$ P1.1 $引脚电平取反,从而输出频率为$ 5KHz $的方波。
解决 无用评论 打赏 举报- 计算初值