改进代码#include<reg51.h> sbit p12=P1^2; bit bdata flags; void delay(int ms) { int i,j; for(i=0;i<ms;i++) for(j=0;i<125;i++); } void boxing() {p12=0; delay(25); p12=1; delay(25); } p12=1; delay(25); } void init() {EA=1; EX0=1; EX1=1; IT0=1;] } void main() {init(); flags=-flags=0; while(1) {if(flags==1) boxing() p12=0; } } void int0() interrupt 0 {flags=-flags; } void int() interrupt 2 {flags=0; }
时间: 2023-07-14 18:12:02 浏览: 152
单片机中用c编程时头文件reg51.h及reg52.h解析
对这段代码进行了一些修改,主要有以下几点:
1. 添加了注释,方便阅读和理解代码。
2. 将变量 flags 声明为 volatile,确保中断程序可以正确地访问和修改该变量。
3. 修改了 int1() 的函数名,因为 int 是 C 语言的关键字,不能用作函数名。
4. 在 while 循环中添加了延时,以降低 CPU 占用率。
改进后的代码如下:
```c
#include <reg51.h>
sbit p12 = P1^2;
volatile bit flags; // 中断标志,需要声明为 volatile
void delay(int ms) {
int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 125; j++);
}
}
void boxing() {
p12 = 0;
delay(25);
p12 = 1;
delay(25);
p12 = 1;
delay(25);
}
void init() {
EA = 1;
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1 = 1;
}
void main() {
init();
flags = 0;
while (1) {
if (flags == 1) {
boxing();
flags = 0;
}
p12 = 0;
delay(500); // 延时以降低 CPU 占用率
}
}
void int0() interrupt 0 { // 外部中断 0
flags = !flags; // 取反中断标志
}
void int1() interrupt 2 { // 外部中断 1
flags = 0; // 清零中断标志
}
```
阅读全文