假设系统时钟为12MHz,设计电路并编写程序实现从P1.0引脚上输出一个周期为2ms的方波。
要在P1.0上产生周期为2ms的方波,定时器应产生1ms的定时中断,定时时间到则在中断服务程序中对P1.0求反。使用定时器T0,方式1定时中断,GATE不起作用。
其中在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标志清零
- }
- }
复制代码
Keil代码与Proteus8.13仿真下载(注意只能用Proteus8.13打开):
P1.0产生周期2ms方波.zip
(49.17 KB, 下载次数: 14)
|