单片机定时器计数器如何使用

用方式0设计P1.0输出频率为200HZ的方波
用C语言如何写
还有就是怎么装初值,TL0 TH0

使用12MHz晶振,其机器周期为1us
欲产生5000us周期方波,只需在p1.0以2500us时间交替输出高低电平
1.T0为方式0,则M1M0=00H。使用定时功能,C/T=0,GATE=0。T1不用,其有关位设为0。因此,TMOD=00H
2.方式0为13长度计数(TL0高3位不使用),设计数初值为X,则(8192-X)*1us=2500us,得X=5692D。X=1011000111100B。因为TL0高3位不用,所以10110001-00011100B得TH0=B1H,TL0=1CH
3.由控制寄存器TCON的TR0位来控制定时的启动和停止,TR0=1启动,TR0=0停止
C语言程序如下(编译器Keil C)
#include<REG51.H>
sbit FB=p1^0;
void initial(void)
{
TMOD=0x00;
TH0=0xb1;
TL0=0x1c;
IE=0x00;
TR0=1;
}
void main(void)
{
initial();
for(;;)
{
while(!TF0);
TF0=0;
FB=!FB;
}
}
汇编程序如下
ORG 0000H
AJMP START
ORG 30H
START: MOV P1.0,#0FFH
MOV TMOD,#00H
MOV TH0,#0B1H
MOV TL0,#1CH
SETB TR0
LOOP: JBC TF0,NEXT
LJMP LOOP
NEXT: CPL P1.0
MOV TH0,#0B1H
MOV TL0,#1CH
LJMP LOOP
END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-03
初始化:
TMOD=0x0;//选择定时器T0;GATE=0;C//T=0为计时模式;M1M0=00;选择方式0
TCON=0x0;
TL0=0;
TH0=0x0E;
主函数:
TR0=1;//运行定时器0
中断函数:
P1.0=-P1.0;//P1.0取反输出
TL0=0;
TH0=0x0E;追问

晶振为12MHZ tTH0、TL0等于多少?

追答

晶振为12MHZ
TL0=0;
TH0=0x0E;
其中TH0可调,因为用单片机内部定时器定时时间准确度不高,你可用示波器接单片机输出,测量波形频率,调节定时值,使输出为200HZ

本回答被提问者采纳