Trước đây em có viết một đoạn chương trình đọc adc cho pic16f887 theo tut trên diễn đàn và chạy tốt, bữa nay thi xong học kỳ nên mở ra ôn lại thì khi build nó lại báo lỗi ERROR [845] . Em đã tìm hiểu trên google nhưng không tìm ra được cách giải quyết vấn đề này. Sau đó em lấy một project đo nhiệt độ dùng LM35 trên diễn đàn của anh Dương Anh Tùng thì khi build nó vẫn báo lỗi đó, nếu chương trình đó em bỏ đoạn chương trình ngắt đi thì lại dịch được, quả thật là em không biết nó bị cái gì nữa, cho dù em đã dùng code mẫu có sẵn nó vẫn báo lỗi. đây là đoạn chương trình đọc ADC giống như trên 4rum:
PHP:
/******************************************************************************
* CONFIGUARE PIC
******************************************************************************/
#include <htc.h>
#include "lcd.h"
#include "lcd.c"
__CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT &
SWBOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. word
__CONFIG(BORV21); //2nd config. word
/******************************************************************************
* CONFIUARE ADC
******************************************************************************/
//------ Khoi tao Port --------------------------------------------------------
void port_init()
{
ANSEL |=1; // su dung RA0
ANSELH=0;
TRISA0=1; // cau hinh chan RA0 la input
TRISB=0x00;
PORTB=0;
}
//------ Khoi tao ADC ---------------------------------------------------------
void adc_init()
{
CHS3=0;
CHS2=0;
CHS1=0;
CHS0=0; // chon kenh AN0
VCFG1=0;
VCFG0=0; // chon V_ref noi
ADCS1=1;
ADCS0=0; // chon toc do chuyen doi
ADFM=1; // chon ket qua ADC 10-bit
ADON=1; // bat ADC
}
//------ Khoi tao ngat --------------------------------------------------------
void interrupt_init()
{
ADIF=0; // xoa co ngat ADC
ADIE=1; // cho phep ngat ADC
PEIE=1; // cho phep ngat ngoai vi
GIE=1; // cho phep ngat toan cuc
}
//------ Hien thi ket qua -----------------------------------------------------
void adc_export_lcd(unsigned long i)
{
char ket_qua[4];
for(char j=0;j<4;j++)
{
ket_qua[j]=(i%10)+0x30;
i /=10;
}
lcd_gotoxy(0,1);
lcd_puts("Vin= ");
lcd_putc(ket_qua[3]);
lcd_putc('.');
lcd_putc(ket_qua[2]);
lcd_putc(ket_qua[1]);
lcd_putc(ket_qua[0]);
lcd_putc('V');
}
//------ Delay ----------------------------------------------------------------
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
{
for(j=0;j<time;j++){;}
}
}
/******************************************************************************
* CHUONG TRINH CHINH
******************************************************************************/
void main()
{
port_init();
adc_init();
interrupt_init();
lcd_init();
delay(100);
lcd_puts("TEST ADC");
lcd_gotoxy(0,1);
while(1)
{
delay(500);
GODONE=1; // bat dau chuyen doi
}
}
/******************************************************************************
* CHUONG TRINH NGAT
******************************************************************************/
void interrupt isr(void)
{
unsigned long kq=0;
if(ADIF==1&&ADIE==1)
{
ADIF=0; // xoa co ngat
kq =(ADRESH<<8)|ADRESL;
kq=kq*5000/1023;
adc_export_lcd(kq);
}
}