逐行解释下面的代码://实例43:用定时器T1查询方式控制单片机发出1KHz音频 #include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit sound=P3^7; //将sound位定义为P3.7引脚 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%256; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0; while(1)//无限循环等待查询 { while(TF1==0) ; TF1=0; sound=~sound; //将P3.7引脚输出电平取反 TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%256; //定时器T0的高8位赋初值 } }
时间: 2023-07-19 11:56:36 浏览: 114
这段代码使用定时器T1来控制单片机发出1KHz的音频。
- `#include<reg51.h>`:包含51单片机寄存器定义的头文件。
- `sbit sound=P3^7;`:将sound位定义为P3.7引脚,用于控制音频输出。
- `void main(void)`:主函数。
- `EA=1;`:开总中断。
- `ET0=1;`:定时器T0中断允许。
- `TMOD=0x10;`:使用定时器T1的模式1。
- `TH1=(65536-921)/256;`:定时器T1的高8位赋初值,计算公式为:2^16-1-921=64615,即0xFD47,再除以256得到0xFD,即253。
- `TL1=(65536-921)%256;`:定时器T1的低8位赋初值,计算公式为:2^16-1-921=64615,即0xFD47,再取余得到0x47,即71。
- `TR1=1;`:启动定时器T1。
- `TF1=0;`:清除定时器T1的溢出标志位。
- `while(1)`:无限循环等待查询。
- `while(TF1==0)`:等待定时器T1的溢出标志位变为1。
- `TF1=0;`:清除定时器T1的溢出标志位。
- `sound=~sound;`:将P3.7引脚输出电平取反,控制音频输出。
- `TH1=(65536-921)/256;`:重新赋初值,以控制输出频率为1KHz。
- `TL1=(65536-921)%256;`:重新赋初值,以控制输出频率为1KHz。
阅读全文