定时器实验(Proteus 与Keil uVision联合仿真)

一、

(1)设置TMOD寄存器    

        T0工作在方式1,应使TMOD寄存器的M1、M0=01;应设置C/T*=0,为定时器模式;对T0的运行控制仅由TR0来控制,应使相应的GATE位为0。定时器T1不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0x01。

(2)计算定时器T0的计数初值      

        设定时时间5ms(即5 000µs),设T0计数初值为X,假设晶振的频率为11.059 2MHz,则定时时间为:定时时间=(216−X)×12/晶振频率    

则  5 000=(216 −X) ×12/11.0592,得  X = 60928,转换成十六进制:0xee00,其中0xee装入TH0,0x00装入TL0。

(3)设置IE寄存器

       本例由于采用定时器T0中断,因此需将IE寄存器中的EA、ET0位置1。

(4)启动和停止定时器T0    

将定时器控制寄存器TCON中的TR0=1,则启动定时器T0;TR0=0,则停止定时器T0定时。    

二、设计硬件电路原理图,画出实际接线图。

三、根据实验任务设计出相应的程序。

#include <reg51.h>

char i=100; // 定义一个字符型变量i并初始化为100

void main() // 主函数开始
{
    TMOD=0x01; // 设置定时器0的工作模式为模式1(16位定时器)
    TH0=0xEC; // 设置定时器0的高8位初值,用于产生大约50ms的定时
    TL0=0x78; // 设置定时器0的低8位初值,用于产生大约50ms的定时
    P1=0x00; // 初始化P1口的状态为0,即所有引脚输出低电平
    EA=1; // 打开全局中断允许位
    ET0=1; // 允许定时器0的中断
    TR0=1; // 启动定时器0
    while(1) // 进入无限循环
    {
    }
} 

void timer0() interrupt 1 // 定时器0的中断服务函数
{
    TH0=0xEC; // 重新装载定时器0的高8位初值
    TL0=0x78; // 重新装载定时器0的低8位初值
    i--; // 计数器i减1
    if(i<=0) // 如果计数器i减到0
    {
        P1=~P1; // 翻转P1口的电平状态
        i=100; // 重置计数器i为100,准备下一轮计时
    }
} 

四、实验结果

8只发光二极管每0.5s闪亮1次;

五、思考题

1、定时器和计数器的区别是什么?

答:①定时器

定时器通常是基于单片机内部的时钟信号进行计数。这些时钟信号通常来源于晶振,是非常稳定的脉冲源。当定时器计数到预设的阈值时,它会产生一个中断信号,通知单片机执行相应的中断服务程序。定时器适用于需要精确时间控制的场合,如产生精确的延时、测量时间间隔等. 

②计数器

计数器则是对来自单片机外部的脉冲信号进行计数。这些脉冲信号可以是由其他设备产生的,如传感器、开关等。计数器在每次接收到一个脉冲信号时,计数器的值就会增加。计数器适用于需要计数外部事件的场合,如计步器、转速测量等. 

2、单片机定时器/计数器T1、T0的工作方式2有什么特点?适用于哪些应用场合?

答(1)单片机定时器/计数器T1、T0的工作方式2特点:

工作方式2是8051单片机定时器/计数器的一种工作模式,它具有以下特点:

自动重装初值:在工作方式2下,定时器/计数器是一个8位的计数器,其中TL0用于计数,TH0用于备份。当TL0计数溢出时,TH0中的初值会自动加载到TL0,从而实现自动重装初值的功能. 

简化编程:由于计数器可以自动重装初值,因此可以避免在程序中重复编写重装初值的指令,简化了编程过程,提高了效率. 

提高定时精度:由于减少了因手动重装初值导致的延迟,工作方式2可以提高定时的精确度. 

(2)适用于的应用场合:

工作方式2适用于需要循环定时或循环计数的应用场景,例如:

周期性任务调度:在嵌入式系统中,经常需要周期性地执行某些任务,如传感器数据采集、显示屏刷新等,工作方式2可以方便地实现这些周期性任务的定时控制. 

事件计数:在一些需要计数外部事件的应用中,如计步器、门禁系统等,工作方式2可以用于计数外部脉冲,实现事件计数的功能. 

中断服务程序:在中断服务程序中,有时需要在处理完中断后立即返回,而不是等待下一个中断周期。工作方式2可以在中断服务程序中快速重启定时器,以便尽快响应下一个中断. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值