我想测量低电平的宽带,所用的思路是:低电平时,开中断器0,计时。。。高电平时,关定时器0,开定时器1,停止计时,发送数据,显示
还带循环的 我用示波器看过了,电路没问题。
大侠们帮我看看,下面的程序哪里还有问题,对了,数据是不是要转换的,要把十六进制换成十进制才能显示吗?
#include"REG_MPC89L516.H" #define uint unsigned int #define uchar unsigned char uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示0~9 sbit P3_2=P3^2; uint N;
void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); //延时 }
void display(N) { P2=0X00; while(1) { P2=0X01; P0=table1[N%10]; delay(50); P2=0X02; P0=table1[N%100/10]; delay(50); P2=0X04; P0=table1[N%1000/100]; delay(50); P2=0X08; P0=table1[N/1000]; delay(50); }
} //数码管显示
void main(void) { TMOD=0x11; // 设置定时器0和1的模式 EA=1; //开总中断 ET0=1; //开定时器0 ET1=1; //开定时器1 TH0=0; //计数器T0高8位赋初值 TL0=0; //计数器T0低8位赋初值 while(1) //无限循环,不停地将结果送N { if(P3_2==0) //INT0为低电平时,启动T0 TR0=1; if(P3_2==1) //INT0为高电平,T0关,启动T1 TR0=0; TR1=1; } }
void timer0() interrupt 1 { TH0=0; TL0=0; }
void timer1() interrupt 3 { N=TH0*256+TL0; display(N); }
|