8-2、(70分)已知8051单片机fosc=12MHz,利用 定时/计数器T0,在P1.7口输出100us脉宽的负脉冲, 写出定时器初值计算过程,如何确定方式寄存器各位的 值?
时间: 2024-12-13 08:18:15 浏览: 23
单片机(AT89C51)定时/计数器实验案例
5星 · 资源好评率100%
在8051单片机中,使用定时器/计数器T0生成100us周期的负脉冲通常会采用模式1(16位自动重装定时器)。以下是计算过程和设置步骤:
1. 首先,我们需要将FOSC(系统时钟频率)转换为机器周期(MC),因为T0的工作基于机器周期。由于Fosc = 12 MHz(即12,000,000 Hz),而每个机器周期大约等于晶振频率除以12(对于8051),所以 MC = Fosc / 12。
\( MC = \frac{12,000,000}{12} \approx 1,000,000 \text{机器周期} \)
2. 然后,我们需要计算出100us对应的机器周期数,因为1 us = 1,000机器周期:
\( 100us = 100 \times 10^(-3) s = 100,000 \text{us} = 100,000 machine\ cycles \)
3. T0在模式1下工作时,当溢出标志TF0置1时,计数器值会自动装载当前TH0和TL0的低字节。所以我们需要保证TH0在溢出前的值能使计数达到100,000次。
4. 计算初始计数值:\( TH0 = (100,000 - 256) / 2 \)(因为8051的计数范围是从0到65535,减去256是因为在计数器溢出前,它会从FF FF变为00 00)
\( TH0 = \left(\frac{100,000}{2} - 128\right) = 49,968 \) (取整)
5. TL0(低8位计数器)将自动填充为当前CPU状态的低8位(通常是0),所以我们不需要单独处理。
方式寄存器TMOD(特殊功能寄存器)的配置如下:
- 设置为模式1:第6位为1(M1 = 1)
- 第7位留空,一般为0
- 第4位为0,选择定时器功能而非计数器功能
- 第3位和第2位可以保持默认,因为在这种模式下它们不会影响定时
综上所述,方式寄存器TMOD应设置为:
```十六进制
TMOD = 0x01 (M1 = 1, 0 otherwise)
```
最后,要记得清除溢出标志TF0并开始定时:
```c
// 清除TF0
P1.7 = ~P1.7; // 或者 TMOD |= 0x80 (置TF0)
// 开始定时
MOV TH0, #49968 // 设置TH0
MOV TL0, #0 // 设置TL0
SETB TR0 // 启动定时器T0
```
阅读全文