求单片机输出10KHZ的方波程序 请问其初值详细怎么算(T0的工作方式为1定时)

晶振频率11.0952MHZ

第1个回答  推荐于2017-08-03
思路:
机器周期 = 1 / (11095200 / 12) = 1.0815us ≈ 1us
如果 12M 晶振
机器周期 = 1 / (11095200 / 12) = 1.0000us
10KHZ = 100us
由于是方波,所以 100us / 2 = 50us (100us 内 50us H,50us L)
T0 方式1,即 16bit 定时器
T0 初值 = 65536-50 = 65486(由于每个机器周期为 1us 当累加 50 次后 T0 溢出)
即:
TH0=0xFF
TL0=0xCE
这样,每次T0中断,控制某 IO 脚反相就好了。
(以上未经实测,有错欢迎指正,大家共同学习!)追问

请问程序如何编写??

追答

// 12M 晶振; 机器周期 = 1 / (12Mhz / 12) = 1us
#include
#include
sbit fOut = P3^7;
void main()
{
TMOD = 0x01;
TH0 = 0xFF;
TL0 = 0xCE;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1);
}
void Timer0() interrupt 1
{
TH0=0xFF; //定时器赋高8初值
TL0=0xCE; //定时器赋低8初值
fOut = (!fOut);
}
// 模拟结果为约 120us 约 8.3K 有点误差
// 模拟 1k 的话,就无误差

本回答被提问者采纳