网上找到的资料
单片机89c51频率计c程序
// 用定时器1定时,使用方式一,晶振频率为11.0592MHZ,常数为4C00;
//用外部中断一计数,每中断一次,count加一
//使用P1口接的八个发光二极管显示
#include<reg51.h>
unsigned int t1oc=20;//5000;定时器定时次数
unsigned int count=0,precount;
void display(unsigned int dis)
{
P1=dis;//显示语句
}
void t1int() interrupt 3//定时器1溢出中断服务程序
{
TR1=0; //关定时器
t1oc--;//
TH1=0x4c;//72;//56;
TL1=0x00;//72;//56; 赋初值
if(t1oc==0)//************************每定时器溢出t1oc次,取一次count作为周期,赋给precount
{
t1oc=20;//5000;
precount=count;
count=0;
}
TR1=1;
}
void int0int() interrupt 0//外部中断服务程序
{
EX0=1;
count++;
EX0=0;
}
void main(void)
{
TMOD=0x10;//0x20;//定时器模式选择且GATE1=0
TH1=0x4c;//72;//56;
TL1=0x00;//72;//56;
EA=1;//总中断开启
EX0=1;IT0=1;//开外部中断,低电平触发
ET1=1;//开定时器中断
TR1=1;//开定时器
while(1)
{
display(precount);
}
}
疑问:
1 定时器中断与外部中断同一优先级???会不会在定时器中断执行时导致外部中断不能触发??
2 外部中断低电平触发中断,中断完成之后外部仍为低电平怎么办??或者外部中断源在中断相应之前已经变高怎么办??
请高手指点下 这个程序是否可行??? |