第1个回答 2014-06-01
#include
sbit out = P1^0;
void main()
{
TMOD = 0x01; //定时器0 16位定时器
TH0 = (65536-20000)/256;
TL0 = (65536-20000)%256; //0.02秒中断一次
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //允许计数
while(1);
}
void Time0() interrupt 1
{
static num = 0;
TH0 = (65536-20000)/256;
TL0 = (65536-20000)%256; //重新填初值 保证下次中断时间0.02s
num++;
if(num>=10) //到0.2s
{
num = 0;
out ~= out; //输出取反
}
}
对于初值的计算
用12M晶振 单片机内部12分频 也就是说计数器每增加一个数的时间为 1/(12M/12) = 1us
对于定时器来说最大定时时间为65536*1us=65.536ms <0.2s=200ms
所以程序中设置定时时间为20ms 中断10次就是0.2s 然后输出引脚输出电平取反
对于原理图 搭建一个最小系统就行
以上程序现写的 你自己测试一下 应该没什么问题