大家幫忙看看下面這個代碼如果使用定時器T1的話哪里錯了,開發板沒有反應,無報錯資訊。謝謝啦。
#include<reg52.h>
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
unsigned char code LedChar[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
unsigned char LedBuff[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
unsigned int cnt=0;
unsigned long sec=999999;
unsigned char i=0;
void main()
{
ENLED=0;
ADDR3=1;
TMOD=0x10;
TH1=0xFC;
TL1=0x67;
TR1=1;
EA=1;
ET1=1;
while(1)
{
if(cnt>=1000)
{
cnt=0;
sec--;
LedBuff[0]=LedChar[sec%10];
LedBuff[1]=LedChar[sec/10%10];
LedBuff[2]=LedChar[sec/100%10];
LedBuff[3]=LedChar[sec/1000%10];
LedBuff[4]=LedChar[sec/10000%10];
LedBuff[5]=LedChar[sec/100000%10];
}
}
}
void InterruptTimer0() interrupt 1
{
TH1=0xFC;
TL1=0x67;
cnt++;
P0=0xFF;
switch(i)
{
case 0: ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0]; ENLED=0;break;
case 1: ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1]; ENLED=0;break;
case 2: ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2]; ENLED=0;break;
case 3: ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3]; ENLED=0;break;
case 4: ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4]; ENLED=0;break;
case 5: ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5]; ENLED=0;break;
default:break;
}
}
uj5u.com熱心網友回復:
求助求助求助別沉別沉別沉uj5u.com熱心網友回復:
。。。。。。。。。。。。uj5u.com熱心網友回復:
你設定數碼管顯示嗎uj5u.com熱心網友回復:
就是不顯示。。。。。。
uj5u.com熱心網友回復:
說告訴我一下你的數碼管型號嗎,幾個針腳uj5u.com熱心網友回復:
是不是你的while回圈里面沒寫顯示的代碼,里面只是資料變更的代碼,我看的是你顯示的代碼寫在中斷函式里面了。你的沒有備注不知道我分析的對不對uj5u.com熱心網友回復:
型號不清楚,針腳是6個(是引腳的話)
uj5u.com熱心網友回復:
但換成T0計時器是正常的,我懷疑是TMOD有問題。
uj5u.com熱心網友回復:
是不是你的中斷錯了,interrupt 1是T0的中斷,T1的中斷應該是interrupt 3吧
uj5u.com熱心網友回復:
interrupt 0:外部中斷0interrupt 1:定時器0中斷
interrupt 2:外部中斷1
interrupt 3:定時器1中斷
interrupt 4:串口中斷
uj5u.com熱心網友回復:
對的對的!我看了一下書再試了一下是的

,非常感謝!
uj5u.com熱心網友回復:
我也是新手,也是翻翻筆記才想明白的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/83308.html
標籤:單片機/工控
