大家帮我看看这个程序
*****************************************
# include <reg52.h>
# define uint unsigned int
# define uchar unsigned char
uchar bdata flag;
sbit flag1 = flag^1;
sbit flag2 = flag^2;
sbit P1_1 = P1^1;
uchar data time,dtime,btime;
uint fetch_rate(void);
main(){
char bdata jflag;
uint data state,astate,bstate,rate;
do{
P1 = 0xff;
flag = P1;
TXD = 0;
jflag = flag> > 6;
jflag =jflag&0x03;
switch (jflag){
case 0:
time =2;dtime = 20; break;
case 1:
time =4;dtime = 40; break;
case 2:
time =6;dtime = 60; break;
case 3:
time = 8; dtime = 80; break;
}
btime =dtime;
jflag = flag> > 3;jflag =jflag&0x07;
switch (jflag){
case 0:
state = 50; break;
case 1:
state =100; break;
case 2:
state = 150; break;
case 3:
state = 200; break;
case 4:
state = 250; break;
case 5:
state = 300; break;
case 6:
state = 350; break;
case 7:
state =400; break;
}
flag1 = 0;
TMOD = 0x51;
TH1 = 0;
TL0 =0;
TH0 = 0x3c;
TL0 = 0xb0;
TR0 =1;
TR1 = 1;
ET0 = 1;
EA = 1;
rate = fetch_rate();
if (!flag2){
astate = state+2*state/10;
if (rate <= state){
TXD =1;
do {
rate = fetch_rate();
} while (rate <=astate);
TXD = 0;
}
}
else{
bstate =state-2*state/10;
if (rate> =state){
TXD = 1;
do{
rate = fetch_rate();
} while (rate> =bstate);
TXD = 0;
}
}
} while (1);
}
unsigned int fetch_rate()
{
uint count;
do {} while (!flag1);
flag1 = 0;
count = TH1*256+TL1;
TH1 = 0;
TL1 = 0;
dtime = btime;
return (count/time);
}
timer0() interrupt 1 using 1
{
TH0 = 0x3c;
TL0 = 0xB0;
dtime = dtime -1;
if (dtime ==0) {flag1 =1;}
*****************************************
各位,这个程序使用P1口输入8位微动开关值,采用P3.1为高时报警。我不知道后面的中断
timer0() interrupt 1 using 1与Main()的是怎样顺序的....
发表时间:2003年8月21日20:17:36