#include <reg52.h> sbit P1_0=P1^0; void main() { TMOD=0x10; TR0=1; while(1) { TH0=0xfc; TL0=0x18; do{}while(!TF0); P1_0=!P1_0; TF0=0; } }
时间: 2023-08-03 10:09:27 浏览: 108
这是一段使用51单片机的定时器0产生延时的程序。在主函数中,首先设置定时器0的工作模式为16位计数器模式(TMOD=0x10),然后启动定时器0(TR0=1)。
接着进入一个无限循环,每次循环都会设置定时器0的初值,使得定时器0在计数到65536时溢出,并且产生一次中断。在中断服务程序中,将P1.0口的状态取反,即一个周期亮一次灯。最后清除定时器0的溢出标志TF0,回到主函数继续循环等待下一次定时器中断的产生。
相关问题
写出一个跟#include <Reg52.h> sbit P1_5 = 0x95; void Time_Init() { TMOD = 0x02; TH0 = (-25); TL0 = (-25); TR0 = 1; ET0 = 1; EA = 1; } void T0_Int() interrupt 1 { static unsigned char i = 0; i++; if(i == 3) { P1_5 = !P1_5; } if(i == 10) { i = 0; P1_5 = !P1_5; } } void main() { Time_Init(); while(1); }程序功能相同的程序
这里给出一个使用STC89C52单片机的程序,功能与给定的程序相同:
```
#include <reg52.h>
sbit P1_5 = P1^5;
void Time_Init() {
TMOD = 0x02;
TH0 = (-25);
TL0 = (-25);
TR0 = 1;
ET0 = 1;
EA = 1;
}
void T0_Int() interrupt 1 {
static unsigned char i = 0;
i++;
if(i == 3) {
P1_5 = !P1_5;
}
if(i == 10) {
i = 0;
P1_5 = !P1_5;
}
}
void main() {
Time_Init();
while(1);
}
```
需要注意的是,这里使用的是STC89C52单片机,因此需要使用STC-ISP软件进行烧录。另外,sbit定义的语法略有不同,需要使用P1^5来表示P1口的第5位。
基于AT89C52写出一个跟#include <Reg52.h> sbit P1_5 = 0x95;void Time_Init() { TMOD = 0x02;TH0 = (-25);TL0 = (-25);TR0 = 1;ET0 = 1;EA = 1;} void T0_Int() interrupt 1 { static unsigned char i = 0; i++; if(i == 3) { P1_5 = !P1_5;} if(i == 10) { i = 0;P1_5 = !P1_5;} } void main() { Time_Init(); while(1); }程序功能相同的程序
基于AT89C52写出一个跟#include <Reg52.h> sbit P1_5 = P1^5; void Time_Init(void) { TMOD = 0x02; TH0 = (65536-25000)/256; TL0 = (65536-25000)%256; TR0 = 1; ET0 = 1; EA = 1; } void T0_Int(void) interrupt 1 { static unsigned char i = 0; i++; if(i == 3) { P1_5 = !P1_5; } if(i == 10) { i = 0; P1_5 = !P1_5; } } void main(void) { Time_Init(); while(1); } 程序功能相同的程序
阅读全文