標(biāo)題:
我的C51單片機(jī)程序無(wú)法進(jìn)入中斷?
[打印本頁(yè)]
作者:
三木木
時(shí)間:
2023-4-10 15:37
標(biāo)題:
我的C51單片機(jī)程序無(wú)法進(jìn)入中斷?
想1s采集一下adc的值,但是好像單片機(jī)程序無(wú)法進(jìn)入中斷
#include <reg51.h>
#include <ABSACC.H>
#define smg_seg P1
#define smg_com P2
#define ADC XBYTE[0xbff4]
#define uchar unsigned char
#define uint unsigned int
void SAM2();
void timer0init();uchar ADC_cvt;uchar ADC_flag=0;uchar code combit[]={0xb1,0xb2};uchar code segbit[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void main()
{
ADC=0;
timer0init();
while(1);
}
void timer0init()
{
TMOD |= 0x01;
TH0 = (65536-45872)/256;
TL0 =(65536-45872)%256;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void Timer0() interrupt 1
{
TH0 = (65536-45872)/256;
TL0 =(65536-45872)%256;
ADC_flag++;
if(ADC_flag==20)
{
ADC_flag=0;
SAM2();
}
}
void SAM2()
{
ADC_cvt=ADC;
delay(5);
seg_display(ADC_cvt);//shumaguan xianshi
delay(5);
ADC=0;
}
void seg_display(uchar temp)
{
uchar loop,dispbuf[2];
dispbuf[1]=temp%16;
dispbuf[0]=temp/16;
for(loop=0;loop<2;loop++)
{
smg_seg=segbit[dispbuf[loop]];
smg_com=combit[loop];
delay(5);
smg_com=0xf0;
}
}
作者:
coody_sz
時(shí)間:
2023-4-10 16:47
你是怎么知道單片機(jī)程序無(wú)法進(jìn)入中斷的?
你在Timer0中斷里取反一個(gè)IO,示波器看看。
作者:
xuyaqi
時(shí)間:
2023-4-10 17:01
在定時(shí)0中斷處理函數(shù)里不要delay(5);
作者:
a399288395
時(shí)間:
2023-4-10 22:35
EA TR ET 都使能了,暫時(shí)看不出來(lái)為什么不能進(jìn)中斷,唯一的問(wèn)題就是樓上說(shuō)的,中斷里不要讓他執(zhí)行過(guò)多的程序,尤其是延時(shí),ADC_flag是全局變量,那 這一段完全可以放在主程序while(1)里去處理;
if(ADC_flag>=20)
{
ADC_flag=0;
SAM2();
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1