第一部分 常用的几个程序模块
;
lM1MO为工作方式设置位。一般工作在方式1下,此时M1MO=01;
l在GATE=0时,需用软件使TCON中的位TRO(TR1)置1,启动定时器。C/T0=0为定时模式,C/T0=1为计数模式;
1.42定时器/计数器工作原理
定时/计数器的实质是加1计数器(16位),由高8位THO(1)和低8位TL(1)两个寄存器组成。加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值(注:16位全填满1时,数值刚好是65535。而溢出时计数器的值应该是65535+1=65536,即216)减去计数初值才是加1计数器的计数值。
从上面可以得到两个结论:
l计数位数是16位:高8位THO(1)和低8位TL(1);
l计数参数(添入TH和TL)与计数初值的关系:X=216-N;//假设定时时间是50ms,即N=50000;则计数参数=65536-50000=15536。
附:计算THO(1)和低8位TL(1)初值// 假设延时时间为50ms
TH=(65536-50000)/256//求模
TL=(65536-50000)%256//求余
定时/计数器初始化程序应完成如下工作:
l对TMOD赋值,以确定T0(1)的工作方式;
l计算初值,并将其写入TH、TL;
l中断方式时,则对IE赋值,开放中断;
l使TR0或TR1置位启动定时/计数器定时或计数。
定时程序模块:
#include
void main()
{
TMOD=0x01;//定时器T0工作方式1
//送初值,定时为50ms。
TH0=(65536-50000)/256;
TL0=65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TRO=0;//启动定时器0
}
程序模块单片 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)