定时器实验(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可以在中断服务程序中快速重启定时器,以便尽快响应下一个中断.

相关推荐
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
zy张起灵2 小时前
48v72v-100v转12v 10A大功率转换电源方案CSM3100SK
经验分享·嵌入式硬件·硬件工程
lantiandianzi9 小时前
基于单片机的多功能跑步机控制系统
单片机·嵌入式硬件
哔哥哔特商务网10 小时前
高集成的MCU方案已成电机应用趋势?
单片机·嵌入式硬件
跟着杰哥学嵌入式10 小时前
单片机进阶硬件部分_day2_项目实践
单片机·嵌入式硬件
电子科技圈10 小时前
IAR与鸿轩科技共同推进汽车未来
科技·嵌入式硬件·mcu·汽车
东芝、铠侠总代1361006839311 小时前
浅谈TLP184小型平面光耦
单片机·嵌入式硬件·物联网·平面
lantiandianzi11 小时前
基于单片机中医药柜管理系统的设计
单片机·嵌入式硬件
嵌入式知识大讲堂11 小时前
HDMI数据传输三种使用场景
单片机
黑客呀12 小时前
[系统安全]Rootkit基础
stm32·单片机·系统安全