标题:
51单片机 定时器无法进入中断
[打印本页]
作者:
dwhdeng
时间:
2019-11-5 17:31
标题:
51单片机 定时器无法进入中断
#include<reg51.h>
#include<absacc.h>
#include<stdio.h>
unsigned char code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};
int tim=0;
int num=0;
int ge=0,shi=0,bai=0;
int count_high=0;
int count_low=0;
void shumaguan(int ge,int shi,int bai);
void read_count(void);
void delay(unsigned int x)
{
int i;
while(x--)
for(i=0;i<100;i++)
;
}
void timer1() interrupt 3
{
//1S¼Æê±
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
shumaguan(1,2,3);
tim++;
if(tim==100)
{
TR0=0;
TR1=0;
read_count();
ge=num%10;
shi=num/10%10;
bai=num/100;
shumaguan(ge,shi,bai);
}
}
void read_count(void)
{
do
{
count_high=TH0;
count_low=TL0;
}while(count_high!=TH0);
num=count_high*256+count_low;
}
void shumaguan(int ge,int shi,int bai)
{
int i=100;
while(i--)
{
P2=0xfe;
P0=seg[bai];
delay(10);
P2=0xfd;
P0=seg[shi];
delay(10);
P2=0xfb;
P0=seg[ge];
delay(10);
}
}
void main()
{
TMOD=0x15;
EA=1;
ET1=1;
TR0=0;
TR1=0;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
while(P3&0x10==0);
TR0=1;
TR1=1;
}
作者:
wulin
时间:
2019-11-5 21:11
因为你的程序main函数不完整,初始化不到1ms就运行完了。退出后再次进入main函数初始化,周而复始,永远不会有发生中断的机会。必须加while(1)约束。
作者:
xuyaqi
时间:
2019-11-5 22:01
/*TR1=0;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
while(P3&0x10==0);
TR0=1;*/
TR1=1; 按这样改一下你再试,注释掉的是多余的。
作者:
CZ1
时间:
2019-11-5 22:41
你的主函数缺少一个while循环体,因该让 他一直在循环里面运行才对,否则会一直在重新运行一遍既把所有程序重新跑一边void main() { while(){} }
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1