|
外部中斷用的用的外部0中斷,下降沿有效,脈寬是用T0計時!疑問就是如果外部中斷只下降沿有效,那我兩個下降沿測的時間應該是一個脈沖的高電平和低電平的總時,如200HZ,那測出來應該是5MS,為什么只有一半!難道IT0=1;上升沿下降沿都有效?好像沒道理!
單片機源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
data uint R[30];
uchar f;
uint s,a,c,z,b;
sbit X0 = P0^0;
sbit Y0 = P3^2;
code wang[]={0xC0,0xF9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
void INTO()
{
IT0=1; //下降沿有效
EX0=1;
PX0=1;
EA=1; //¿a×üÖD¶Ï
}
void Time0init()
{
TMOD=0x01;
// TH0=(65536-50000)/256; //500002
// TL0=(65536-50000)%256;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
ET0=1;
TR0=0;
}
void Delay20ms() //@12.000MHz
{
unsigned char i, j;
i = 15;
j = 35;
do
{
while (--j);
} while (--i);
}
main()
{
uchar qian,bai,shi,ge;
P2=0xff;
P1=0xff;
b=0;
c=0;
INTO();
Time0init();
while(1)
{
if(X0==0){ a=0; b=0;c=0; while(X0==0){};f=1; }
if(f==1 && X0==1)
{
s=s++;
if(s>=15000)
{
if(f==1 && X0==1)
{
f=0; TR0=1;s=0;
}
}
}
P1=0x01;
qian=c/1000;
P2=wang[qian];
Delay20ms();
P1=0x02;
bai= c%1000/100;
P2=wang[bai];
P2 &=0x7f;
Delay20ms();
P1=0x04;
shi=c%100/10;
P2=wang[shi];
Delay20ms();
P1=0x08;
ge=c%10;
P2=wang[ge];
Delay20ms();
P1=0x00;
}
}
void init0() interrupt 0
{
if(a<2) a=a+1;
if(a>=2) { TR0=0;c=b;}else {TR0=1;}
}
void time0() interrupt 1
{
TH0=(65536-1)/256; //TMOD=2;TH0=256-100;TL0=256-100;間題解決了
TL0=(65536-1)%256;
b=b+1;
}
|
|