第7章定时器计数器的工作原理与应用.ppt
文本预览下载声明
图7-14 由外部计数输入信号控制LED的闪烁 (3)设置IE寄存器 本例由于采用T1中断,因此需将IE寄存器的EA、ET1位置1。 (4)启动和停止定时器T1 将寄存器TCON中TR1=1,则启动T1计数;TR1=0,则停止T1计数。 参考程序如下: #include reg51.h void Delay(unsigned int i) //定义延时函数Delay( ),i是形 //式参数,不能赋初值 { unsigned int j; for(;i0;i--) //变量i由实际参数传入一个值 //因此i不能赋初值 for(j=0;j125;j++) {;} //空函数 } void main( ) //主函数 { TMOD=0x50; //设置定时器T1为方式1计数 TH1=0xff; //向TH1写入初值的高8位 TL1=0xfc; //向TL1写入初值的低8位 EA=1; //总中断允许 * * ET1=1; //定时器T1中断允许 TR1=1; //启动定时器T1 while(1) ; //无穷循环,等待计数中断 } void T1_int(void) interrupt 3 //T1中断函数 { for(;;) //无限循环 { P1=0xff; //8位LED全灭 Delay(500) ; //延时500ms P1=0; //8位LED全亮 Delay(500); //延时500ms } } * 7.4.3 控制P1.0产生周期为2ms的方波 【例7-3】假设系统时钟为12MHz,设计电路并编写程序实现从P1.0引脚上输出一个周期为2ms的方波,见图7-15。 要在P1.0上产生周期为2ms的方波,定时器应产生1ms的定时中断,定时时间到则在中断服务程序中对P1.0求反。使用定时器T0,方式1定时中断,GATE不起作用。 本例的原理电路见图7-16。其中在P1.0引脚接有虚拟示波器,用来观察产生的周期2ms的方波。 图7-15 定时器控制P1.0输出一个周期2ms方波 * 图7-16 定时器控制P1.0输出周期2ms的方波的原理电路 * 下面来计算T0初值X : 设T0的初值为X,有 (216?X )×1×10?6=1×10?3 即 65?536?X=1?000 得X=64 536,化为16进制数就是0xfc18。将高8位0xfc装入TH0,低8位0x18装入TL0。 参考程序如下: #include reg51.h //头文件reg51.h sbit P1_0=P1^0; //定义特殊功能寄存器P1的位变量P1_0 void main(void) //主程序 { TMOD=0x01; //设置T0为方式1 TR0=1; //接通T0 while(1) //无限循环 { * TH0=0xfc; //置T0高8位初值 TL0=0x18; //置T0低8位初值 do{}while(!TF0); //TF0为0原地循环,为1则T0溢出,往下执行 P1_0=!P1_0; // P1.0状态求反 TF0=0; //TF0标志清零 } } 仿真时,右键单击虚拟数字示波器,出现下拉菜单,点击“Digital oscilloscope”选项,就会在数字示波器上显示P1.0引脚输出周期为2ms方波,如图7-17所示。 * 图7-17 虚拟数字示波器显示的2ms的方波波形 7.4.4 利用T1控制发出1kHz的音频信号 【例7-4】利用T1的中断控制P1.7引脚输出频率为1kHz方波音频信号,驱动蜂鸣器发声。系统时钟为12MHz。方波音频信号周期1ms,因此T1的定时中断时间为0.5 ms,进入中断服务程序后,对P1.7求反。电路见图7-18。 先计算T1初值,系统时钟为12MHz,则机器周期为1μs。1kHz音频信号周期为1ms,要定时计数的脉冲数为a。则T1初值: TH1=(65?536??a)?/256; TL1=(65?536??a)?%256 * * 图7-18 控制蜂鸣器发出1kHz的音频信号 参考程序如下: #includereg51.h //包含头文件 sbit sound=P1^7; //将sound位定义为P1.7脚 #
显示全部