定时器实验(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定时。

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

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

cs 复制代码
#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可以在中断服务程序中快速重启定时器,以便尽快响应下一个中断.

相关推荐
jmlinux24 分钟前
环形缓冲区(Ring Buffer)在STM32 HAL库中的应用:防止按键丢失
c语言·stm32·单片机·嵌入式硬件
江山如画,佳人北望1 小时前
智能平衡移动机器人-平台硬件电路
单片机·嵌入式硬件
地球空间-技术小鱼2 小时前
嵌入式系统学习
嵌入式硬件·学习
物随心转2 小时前
中断系统的原理
单片机·嵌入式硬件
FreakStudio10 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
EVERSPIN13 小时前
分享国产32位单片机的电机控制方案
单片机·嵌入式硬件
每天一杯冰美式oh13 小时前
51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】
嵌入式硬件·51单片机·proteus
芯橦16 小时前
【瑞昱RTL8763E】音频
单片机·嵌入式硬件·mcu·物联网·音视频·visual studio code·智能手表
夜间去看海20 小时前
基于单片机的智能浇花系统
单片机·嵌入式硬件·智能浇花