用定时器计数器输出2ms的方波(c语言)

包括计数初值的计算

假设你用的晶振为12M,用P1.0口输出周期为2ms的方波。使用定时器工作方式1.
至于计数初值的计算,授之以鱼不如授之以渔!
在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12/晶振频率。X为定时器初值。则 X=2^n-T/T1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8
自己算去吧!
#include <reg51.h>
void InitTimer0(void)//
{
TMOD = 0x01;
TH0 = 0x0FC; //计数器初值
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;//开启定时器T0
}

void main(void)
{
InitTimer0();
}

void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FC;//重新赋初值
TL0 = 0x18;

P1.0=~P1.0; //输出方波
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-15
void i_t0(void) interrupt 1
{
bzw=~bzw;脉冲标志位
if(bzw==0)
cp=~cp; cp是你发出的脉冲
if(bzw==1)
cp=~cp;
TH0=? ;这里是你的设定值2ms,因为不知道你的晶振是多少你就自己算哈
TL0=?;
}
定时器的控制字你就自己写写了 希望对你有用
第2个回答  2012-10-17
#include <reg51.h>

void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0FC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;
}

void main(void)
{
InitTimer0();
}

void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FC;
TL0 = 0x18;
P0=~P0;
}