標(biāo)題: 寫了個(gè)按鍵外部中斷的小程序,遇到點(diǎn)問題,各位看客進(jìn)來瞧瞧 [打印本頁]

作者: 劉武豪    時(shí)間: 2015-7-29 11:16
標(biāo)題: 寫了個(gè)按鍵外部中斷的小程序,遇到點(diǎn)問題,各位看客進(jìn)來瞧瞧
函數(shù)功能:數(shù)碼管(P2口)不斷顯示0~9,按K1(P3^2)暫停,K2(P3^3)繼續(xù)。


問題有二:
(1)第一次按K1,暫停,K2開始。之后兩個(gè)鍵均失效;
(2)按理說暫停-開始后數(shù)碼管應(yīng)該從暫停前的那個(gè)數(shù)繼續(xù)顯示,可實(shí)際上是從0重新開始計(jì)數(shù)。
請各位賜教,不勝感激。


代碼和preteus圖如下。
#include <reg52.h>
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數(shù)碼管共陽編碼
bit button=1;
bit jumpout=0;//低優(yōu)先級中斷跳出標(biāo)志,用于暫停
void delay(int time)
{
    uchar i,j;
    for(i=0;i<time;i++)
        for(j=0;j<i;j++);
}

void int1()interrupt 1
{               
    jumpout=1;//低優(yōu)先級跳出   
}
void int0()interrupt 0
{
    while(jumpout==0)//在此循環(huán)
    {
    }
    jumpout=0;//重新賦值,下次中斷依然可以暫停循環(huán)   
}
void init()
{
    EA=1;
    IT0=0;//低電平沿觸發(fā)
       EX0=1;
    PX0=0;//低優(yōu)先級
    IT1=0;
    EX1=1;   
    PX1=1;//高優(yōu)先級
}   
void main()
{
    uchar i;   
    init();
    while(1)
    {      
        //if(button==1)
        {
            for(i=0;i<10;i++)
            {
                P2=table[i];
                delay(250);
            }
        }
    }
}


作者: 劉武豪    時(shí)間: 2015-7-29 11:17
電路圖,P0的數(shù)碼管可忽略。

QQ截圖20150729111651.png (10.89 KB, 下載次數(shù): 91)

QQ截圖20150729111651.png

作者: 劉武豪    時(shí)間: 2015-7-29 12:32
解決了,自己粗心把外中斷1寫成了interrupt 1,應(yīng)該是interrupt 2
作者: 騰飛的龍    時(shí)間: 2015-7-29 12:59
劉武豪 發(fā)表于 2015-7-29 12:32
解決了,自己粗心把外中斷1寫成了interrupt 1,應(yīng)該是interrupt 2

外部中斷1的向量號錯(cuò)誤,應(yīng)該是2.




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1