编写代码,用T0作为外部计数器,编程实现每当计到1000个脉冲时,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环下去
时间: 2024-03-02 15:51:41 浏览: 61
以下是一个基于51单片机的实现代码,供您参考:
```c
#include <reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit T0 = P1^0;
sbit T1 = P1^1;
void timer1_delay(uint ms) {
TMOD |= 0x10; // 设置定时器1为工作方式1,16位定时器
TH1 = (65536 - 1000) / 256; // 设置初值
TL1 = (65536 - 1000) % 256;
TR1 = 1; // 启动定时器1
while (ms--) {
while (!TF1); // 等待定时器1溢出
TF1 = 0; // 清除TF1标志
TH1 = (65536 - 1000) / 256; // 重新设置初值
TL1 = (65536 - 1000) % 256;
}
TR1 = 0; // 关闭定时器1
}
void main() {
uint count = 0; // 外部计数器
while (1) {
T0 = 1; // 计数器加1
if (++count >= 1000) { // 达到1000次脉冲
T1 = 1; // 启动定时器1
timer1_delay(2); // 2ms延时
T1 = 0; // 关闭定时器1
count = 0; // 重置计数器
}
T0 = 0; // 计数器清零
}
}
```
说明:
- 本代码使用定时器1作为2ms定时器,当外部计数器计数到1000时,启动定时器1,并延时2ms,然后重置计数器;
- 由于定时器1是16位的,需要设置TH1和TL1的初值,使得定时器1在1000个脉冲后溢出;
- 在定时器1溢出时,TF1标志会被置位,需要手动清除;
- 在延时过程中,循环等待定时器1溢出即可。
注意:本代码仅供参考,具体实现还需要根据具体的开发板和芯片进行调整。
阅读全文