单片机相关,高手来。想找出这个程序的问题所在:

[复制链接]
查看11 | 回复5 | 2011-1-27 08:10:25 | 显示全部楼层 |阅读模式
单片机C语言编程,想在开发板上写个16模计数器的程序,利用外部中断0,可是写完后不按按键过几分钟就会自动加一,这是哪里的毛病啊?
源程序:
其中P1^7是按键与P3^2接在一起,P2是接数码管位选,P0接数码管段选,P3^7接二极管,为了知道是否进入中断程序。只是不明白明明没有按键为何会每过几分钟便自动进入中断程序?
#include
void begin();
void display();
void yanshi();
void yanshi1();
sbit d=P1^7;
sbit d1=P3^7;
unsigned char table[]={0x28,0x7e,0x0a2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
unsigned char table2[]={0xbf,0x7f};
int wei[2];
int t=0;
int i=0;
void ISR0(void) interrupt 0
{
EA=0;
d1=0;
begin();
yanshi();
t++;
if(t>=16)
{
t=0;
}
wei[0]=t/10;
wei[1]=t%10;
EA=1;
d=1;
}
void main()
{
begin();
while(1)
{
display();
yanshi1();
}
}
void begin()
{
d=1;
IT0=1;
EX0=1;
EA=1;
}
void display()
{
P2=table2;
P0=table[wei];
if(i==1)
i=0;
else i=1;
}
void yanshi()
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<20;j++);
}
void yanshi1()
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<50;j++);
}
我用的是P3^2口的外部中断,下降沿触发方式,为什么说定时中断有问题呢?
P1^7接的是小按键,为了在操作方便,可以不用理会。。
数组table里对应的是数码管段选的0~9这十个数字
数组table2里对应的是二位数码管,一个是十位,一个个位。数码管用的是动态显示
计数的值用变量t保存,并且随时显示在数码管上
之所以定义i是为了给P0口输出值的时候同时给P2口发送对应数据
一直搞不清楚的是为什么没有给P3^2低电平,而每过几分钟就会自动进入中断的处理程序???

回复

使用道具 举报

千问 | 2011-1-27 08:10:25 | 显示全部楼层
你是想用按键P1^7来触发外部中断吧…这个没必要的,按键直接P3^2口就可以了,这是一种方法。你采用的是边沿触发方式,又加上连在P1^7口上,不能排除会发生来自单片机内部或者外部的一些干扰而触发外部中断。另一种方法就是不用外部中断,直接利用按键P1^7查询,有键按下则计数t加一。你自己按照这两个方法再调试一下。
回复

使用道具 举报

千问 | 2011-1-27 08:10:25 | 显示全部楼层
用记事本方式打开jpg文件,在文件尾写入文本信息,然后保存。这样的操作会导致原文件内的很多数据丢失,并且没有办法恢复。因为记事本是文字处理程序,只能显示可见的字符,而jpg文件是二进制文件,里面有很多数值是不可见字符。所以用记事本打开jpg文件就会造成这些不可见字符的丢失,最终导致jpg文件被损坏。可以用C程序按照二进制方式打开jpg文件,然
回复

使用道具 举报

千问 | 2011-1-27 08:10:25 | 显示全部楼层
P17为什么要跟P32接一起呢?奇怪!只用P32就可以了。有一个中断就加一即可。哈哈 还是静态显示滴、、、既然是静态显示,为啥还要延时?
回复

使用道具 举报

千问 | 2011-1-27 08:10:25 | 显示全部楼层
你定义int wei[2]做什么呢?按你下面的定义,wei[0]是十位,wei[1]是各位。但是又干嘛定义一个i,table2[wei[0]],table[wei[1]],不就得了。在字面上,也没办法都看出来,如果同意我说的,自己调试看看吧。那些中断我忘记怎么设置了,不过你用的外部中断,楼上何来的定时中断错误呢
回复

使用道具 举报

千问 | 2011-1-27 08:10:25 | 显示全部楼层
定时中断有问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行