设MCS51单片机的晶振fosc=12MHz,请计算采用定时方式2时的最大定时时间。
时间: 2024-05-22 15:16:54 浏览: 189
MCS51单片机的定时方式2是通过16位计数器实现的,计数器的最大值为65535。定时时间的计算公式为:
t = 65536 - (65536 - T) * fosc / 12MHz
其中,T为计数器初值,fosc为晶振频率,12MHz为晶振频率。
将T设为0,则最大定时时间t为:
t = 65536 * 1 / (12MHz / 2) ≈ 5.46ms
因此,采用定时方式2时的最大定时时间为5.46ms。
相关问题
设MCS51单片机的晶振fosc=6MHz,要求T0定时150微秒,请计算定时方式2时的定时初值。
定时方式2的计算公式为:TH0 = 256 - (T0计数器初值)
由于定时器0的时钟源为晶振,晶振频率为6MHz,所以每个机器周期为1/6MHz=0.1667微秒。
要求定时150微秒,即需要计数150/0.1667≈900个机器周期。
根据计算公式,可得TH0 = 256 - 900 ≈ -644。
但是,TH0是一个8位寄存器,不能存储负数,因此需要进行补码转换。将-644的绝对值转换为二进制数为01000011,再取反加一得到补码为10111101,即BDH。
因此,定时方式2的定时初值为BDH。
设MCS51单片机的晶振fosc=6MHz,试对定时器T1初始化,使之工作在模式2,产生200微秒的定时,并用查询T1溢出标志位的方法,控制P1.0输出周期为2ms的方波。 (1)初值计算
定时器T1工作在模式2下,计算计数器的初值需要使用以下公式:
初值 = 65536 - (定时时间 / Tclk)
其中,定时时间为所需的定时时间(单位为秒),Tclk为定时器T1的时钟周期,等于晶振频率fosc除以12。
将200微秒转化为秒,得到定时时间为0.0002秒。将fosc除以12得到Tclk为500kHz。
代入公式得到初值:
初值 = 65536 - (0.0002 / 0.0000020833) = 54560
因为初值需要用两个8位寄存器TH1和TL1组成,所以需要将54560转化为16进制,得到D550H。
(2)控制P1.0输出周期为2ms的方波
通过查询T1溢出标志位,可以判断定时器T1是否达到设定的定时时间。当T1溢出时,TH1和TL1会自动重装初值,计数器重新开始计数。
根据题目要求,控制P1.0输出周期为2ms的方波,即需要每隔2ms将P1.0的输出状态取反一次。因此,可以在T1溢出时,在中断服务程序中将P1.0状态取反。
具体实现代码如下:
#include <reg51.h>
#define FOSC 6000000L // 晶振频率
#define T1MS (65536-FOSC/12/1000) // 1ms定时器初值
#define T200US (65536-FOSC/12/5000) // 200us定时器初值
sbit LED = P1^0; // 定义LED控制引脚
void T1_Init(void)
{
TMOD |= 0x10; // 设置T1为模式2
TH1 = T200US / 256; // 设置T1初值
TL1 = T200US % 256;
ET1 = 1; // 允许T1中断
TR1 = 1; // 启动T1
}
void T1_ISR(void) interrupt 3
{
TH1 = T200US / 256; // 重新设置T1初值
TL1 = T200US % 256;
LED = ~LED; // 取反LED状态
}
void main()
{
T1_Init(); // 初始化定时器T1
EA = 1; // 开启总中断
while(1); // 程序循环
}
阅读全文