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. 将计数器初值设为 0。 2. 设置定时器的时钟源和计数频率。 3. 启动定时器,并设置定时器断。 4. 在定时器断服务程序,每次定时器计数到指定值时,将计数器加 1,并清除定时器计数器。 5. 在需要显示秒表时间的时候,读取计数器的值并转换成秒表格式。 下面是一个简单的示例代码: ```c #include <reg52.h> #define COUNT_PER_SECOND 100 // 定时器每秒计数次数 #define TIMER_TH0_INIT_VALUE (65536 - COUNT_PER_SECOND) unsigned char count = 0; // 计数器 void timer0_isr() interrupt 1 { TH0 = TIMER_TH0_INIT_VALUE / 256; TL0 = TIMER_TH0_INIT_VALUE % 256; count++; // 计数器加 1 } void main() { TMOD = 0x01; // 定时器 0 工作在模式 1 TH0 = TIMER_TH0_INIT_VALUE / 256; TL0 = TIMER_TH0_INIT_VALUE % 256; ET0 = 1; // 允许定时器 0 断 EA = 1; // 允许断 TR0 = 1; // 启动定时器 0 while (1) { // 在需要显示秒表时间的时候,读取计数器的值并转换成秒表格式 // 省略转换代码 } } ``` 在 Proteus 仿真时,需要添加一个 8051 微控制器和定时器模块,并将二者连接起来。具体步骤如下: 1. 打开 Proteus,选择“New design”。 2. 在左侧的元件库选择“Microcontroller”并拖动到画布上。 3. 双击微控制器,弹出“Edit Component”对话框,选择“AT89C52”型号并确定。 4. 在左侧元件库选择“Timer”并拖动到画布上。 5. 双击定时器模块,弹出“Edit Component”对话框,选择“NE555”型号并确定。 6. 将微控制器的 P3.4 引脚与定时器的 GATE 引脚连接。 7. 将微控制器的 P3.5 引脚与定时器的 OUT 引脚连接。 8. 完成连接后,保存并运行仿真。 完成上述步骤后,就可以通过仿真来测试板子的秒表功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值