懂52单片机定时器T2的进啊

来源:百度知道 编辑:UC知道 时间:2024/06/20 14:46:16
大哥大姐帮帮忙,我看书看了半天可是出不来结果啊
我想用52单片机的T2定时器来做定时,并且可以改变频率求大家解决以下两个问题:
1.用T2定时,在P20口输出1ms的矩形脉冲信号的简单程序(仅仅需要写出要设那些控制和初值),并且能通过按键改变频率(请告我设置什么地方来改)
2.请给我一个公式来计算不同频率的时候TH2和TL2应该设的初值。
求详细的解答,正确的再加30分的啊。
T2CON怎么设置啊?还有T2MOD怎么搞啊?但是好像编译的时候T2MOD说没有定义,这是怎么回事啊?

RCAP2H=0x85; //TH2初值
RCAP2L=0xee; //TL2初值
ET2=1; // 允许T2定时器中断
EA=1; // 打开总中断
TR2=1; // 启动T2定时器

/***定时器T2中断处理子程序***/
void timer2() interrupt 5
{
TF2=0; //清除T2溢出标记

产生脉冲:
中断参数设定
T2定时器我还没用过,按常用的T0和T1说吧,只需要把定时器设个模式,我一般用方式1,开启总中断,起动中断2即可。
至于通过按键改变频率,这好办
设定R3 R4为专用寄存器,R3存TH2中值,R4存TL2中值,每次中断事,TH2及TL2的值均从R3和R4中取。如果想简单调,你可以通过给R4加/减R3带进位加/减0来实现频率的增高/降低,但这样出来的频率不一定是整数,但每调一次变化很小,属于微调。如想整调,比如想从1ms直接调成2ms,那就需要做个表,提前把每个频率的TH2及TL2的初值计算好,并用DB伪指令做成数据表,然后用MOVC A, @A+DPTR查表指令来给R2 R3输入准确频率的中断初值。
频率计算:
假设频率为X,晶振为A,产生的矩形脉冲占空比为50%
那么初值Y=65535-(((1/X)*1000000)/2)/(12/A)
解释:
1. 1/X为每个周期波形周期的时间,单位为S
,再*1000000就是每个周期的微秒时间,除以2即为半个周期的时间(因为每个周期有正负两个状态组成,且占空比为50%).
2. A为晶振,所以(12/A)即为每个机器周期的时间,也就是TH2里面每减1所需的时间,单位微秒。
3. 用上面所说的两数除以,即为每完成半个周期需要的机器周期,即中断需要自动加1的数量。
4. 用最大值减去3式中结果,即为定时器的初值。