使用STC8H1K08單片機,其ADC1(P11口)作為ADC輸入口,程序進入ADC中斷讓LED滅,但一次沒滅過,也就是沒有進入過ADC中斷的意思?請問是什么原因呢?
# include <STC8.h>
# include <intrins.h>
#include <stdio.h>
sbit LED = P3 ^ 4;
unsigned int adc1;
void Init_IO()
{
P0M1 = 0x00;
P0M0 = 0x00;
P1M1 = 0x00;
P1M0 = 0x00;
P2M1 = 0x00;
P2M0 = 0x00;
P3M1 = 0x00;
P3M0 = 0x00;
P4M1 = 0x00;
P4M0 = 0x00;
P5M1 = 0x00;
P5M0 = 0x00;
P6M1 = 0x00;
P6M0 = 0x00;
P7M1 = 0x00;
P7M0 = 0x00;
}
void adcIsr(void) interrupt 5 //ADC中斷
{
ADC_CONTR &= ~0x20; //清中斷標志
adc1=ADC_RES; //高位值
adc1+=ADC_RESL; //低位值
printf("ADC ISR value=%d",adc1); //打印輸出
ADC_RES=0;//高八位寄存器清零
ADC_RESL = 0;//低八位寄存器清零
LED=0; //判斷是否進入ADC中斷
ADC_CONTR |= 0x40; //繼續AD轉換
}
void main()
{
LED = 1;
P_SW2 |= 0x80;
Init_IO();
P1M0 = 0x00;
P1M1 = 0x02; //P11為高阻輸入模式,作為ADC輸入口
ADCTIM = 0x3f; //設置ADC內部時序
ADCCFG = 0x0f; //設置ADC時鐘為系統時鐘/2/16,左對齊
ADC_CONTR =0x81; //使能ADC模塊,使能ADC1
EADC=1; //使能ADC中斷
EA=1; //總中斷
ADC_CONTR |= 0x40; //啟動AD轉換
while (1);
}
|