
Код:
**************
static unsigned int tt;
static unsigned char al,ah;
void PORT_Init (void);
void Timer3_Init (int counts);
void Timer3_ISR (void);
void UART0_Init(void);
void Timer1_Init(void);
void ADC0_Init(void);
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
void main (void) {
// disable watchdog timer
WDTCN = 0xde;
WDTCN = 0xad;
SFRPAGE = CONFIG_PAGE; // Switch to configuration page
PORT_Init ();
SFRPAGE = TMR3_PAGE; // Switch to Timer 3 page
Timer3_Init (SYSCLK / 12 / 10); // Init Timer3 to generate interrupts
// at a 10 Hz rate.
SFRPAGE = UART0_PAGE; // страница УАРТ
UART0_Init(); // инициализация УАРТ
SFRPAGE = TIMER01_PAGE;
Timer1_Init();
SFRPAGE = ADC0_PAGE;
ADC0_Init();
EA = 1; // enable global interrupts
SFRPAGE = LEGACY_PAGE; // Page to sit in for now
while (1) { // spin forever
}
}
void ADC0_Init()
{
ADC0CN = 0x80; // разрешить АЦП0, старт по "1" в BUSY
REF0CN |= 0x01; // внутренний источник опорного напряжения
EIE2 |= 0x02; // разрешение прерываний АЦП0
EIP2 |= 0x02; // высший приоритет у прерывания по завершению преобразования
}
void Timer1_ISR (void) interrupt 3
{
TF1 = 0; tt++; // clear TF1
if (tt == 5000) AD0BUSY = 1; // запускаем преобразование
if (tt==40000) { SBUF0 = ADC0L; tt=0; }
}
void ADC0_ISR (void) interrupt 15
{
AD0INT=0;
al = ADC0L; ah = ADC0H;
}
Может, выкачивать значения АЦП нужно в другом месте,а?