Proteus学习 定时器

本文章仅仅用来学习记录,内容有待参考

学习课本《单片机原理及应用》第三版 林立 张俊亮编注

第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,为下次溢出做准备
            
        }
}

至此查询的方法就此完成,后面我会继续补充中断的方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值