本文章仅仅用来学习记录,内容有待参考
学习课本《单片机原理及应用》第三版 林立 张俊亮编注
第112页【实例1】
问题简述:已知单片机型号AT80C52 内部晶振时钟12MHz 采用定时器T1使P2.0引脚输出周期在2ms的方波
例题分析
该题目主要考察对51单片机定时器系统的使用,利用该单片机内部的T1定时器,可以控制P2.0引脚按规律输出高低电平。
拓展 该题目书上给了两种办法,一种为查询方式,另一种为采用中断方式
知识点
定时器在51单片机里主要是T1 T0这两个,其中定时器的工作方式如图,对于如何调用定时器,我决得可以从下面的图示找到答案。
定时器由单片机内部的12MHz晶振产生脉冲,经历12分频,1第一个开关设置为0;2一般设置门控GATE=0,CONTROL由TR控制;3设置好调用那种定时方式(跟TH TL寄存器)有关。
综上我们可知,定时器的启用需要TMOD TCON特殊功能寄存器
1 寄存器字节地址为89H,可以按名称TMOD寻址,也可以按地址89H寻址,但不能按位寻址(结尾不是8)
2 该寄存器高4为为控制T1的,低四位是控制T0的。其中
GATE 为门控位 GATE=0->CONTROL被TR控制
GATE=1>CONTROL被外部中断与TR一起控制
C/T非 =1启动计数器
=0启动定时器
M1 M0 有00 01 10 11 四种工作方式,与加1计数器的配置有关。
TCON
该寄存器字节地址为88H,可以按位寻址,也可以按名称和按地址寻址。
TR 启停控制位,跟GATE门控位配合使用。
例题实现
我们知道,题干采用定时器T1,所以该框图为
相应的代码为
TMOD=0x01;
TR1=1;
现在定时器的配置我们已经搞好了,接下来要思考的是如何符合题干输出周期为2ms的方波
周期为2ms,即每过1ms电平翻转一次,那么就需要定时器每隔1ms重置。即需要定义加1计时器的初始值
该计算公式为 t=(65535-a)* fsc/12
带入t=1ms可知 a=0xfx18
即TH1=0xfx;
TL1=0x18;
现在所有的问题都解决了,正式进入编程阶段,
#include <REGX52.H>
void main(void)
{
TMOD=0x10;
TR1=1; //配置定时器
for(;;)
{
TH1=0xfc;
TL1=0x18; //装载初始值
while(TF==0); //等待是否溢出,是继续执行,否,进入循环
p2_0=~P2_0; //每隔1ms反转电平
TF1=0; //标志位清0,为下次溢出做准备
}
}
至此查询的方法就此完成,后面我会继续补充中断的方法。