已知单片机晶振频率为6MHz,采用查询方式编写程序,使用T0以工作方式1产生周期为35ms的等宽方波连续脉冲,并由P3.7口输出
使用T0以工作方式1产生周期为35ms的等宽方波连续脉冲,并由P3.7口输出的代码,希望对你有帮助。以下是一个可能的代码:
#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit P37 = P3^7; //定义P3.7口uchar TH0_data = 0x00; //定义定时器T0高八位初值uchar TL0_data = 0x00; //定义定时器T0低八位初值void main(){
TMOD = 0x01; //设置定时器T0工作在方式1
TH0 = TH0_data; //给定时器T0高八位赋初值
TL0 = TL0_data; //给定时器T0低八位赋初值
TR0 = 1; //启动定时器T0
while(1) //循环查询TF0标志位
{ if(TF0 == 1) //如果TF0为1,说明溢出了,即计数到达65536次
{
TF0 = 0; //清零TF0标志位
TH0 = TH0_data; //重新给定时器T0高八位赋初值
TL0 = TL0_data; //重新给定时器T低八位赋初值
P37 = ~P37; //取反P3.7口的电平,产生方波脉冲信号
}
}
}
其中,定时器T的高八位和低八位的初值需要根据晶振频率和方波周期来计算。
方法:已知单片机晶振频率为6MHz,那么机器周期为2us。方波周期为35ms,那么半个周期为17.5ms。定时器T需要计数到17.5ms/2us=875000次才能溢出。因此,65536-875000=65461=FFCDH。
结果:所以,THO_data=FFH;TLH_data=CDH。