View Single Post
Old 01-06-2012, 09:22 AM   #9
ltluc253
Nhập môn đệ tử
 
Tham gia ngày: Aug 2011
Bài gửi: 6
:
hix, mình cũng đang gặp phải vấn đề thay đổi biến toàn cục trong ngắt mà không biết xử lý code thế nào.Đoạn code sau mình viết để test trên protues. nhưng biến ADCvalues của mình vẫn không thay đổi sau khi có ngắt ADC xảy ra.

#include <p33FJ16MC304.h>


_FOSCSEL(FNOSC_PRIPLL&IESO_OFF); //dung dao dong ngoai co bo PLL
_FOSC(FCKSM_CSDCMD&OSCIOFNC_OFF&POSCMD_XT); //chon che do XT
_FWDT(FWDTEN_OFF); //tat watchdog
_FGS( GSS_HIGH & GCP_ON ); //code protection


volatile int ADCvalues=0xFF00;

void Init_osc(void)
{
PLLFBD = 78; // M = 78
CLKDIV = CLKDIV&0xFF00; //PLLPOST=0 & PLLPRE = 0 , N1=2, N2=2
while (_COSC !=0b011); //dung bo PLL tao Fosc=40MHz, cho cho dao dong on dinh
while (_LOCK !=1); //cho PLL bat dau khoa pha
}

void Init_ADC(void)
{
AD1PCFGL = 0xFFFE; //chon AN0 lam ngo vao analog
_SSRC = 7; //ADC cham dut lay mau va kich hoat chuyen doi
AD1CON2 = 0;
AD1CHS0 = 0;
AD1CSSL = 0; //ko quet ngo vao
AD1CON3 = 0x1F01; //dung 31TAD cho lay mau
//dung TAD=2Tcy
_AD1IF = 0;
_AD1IE = 1;
_ASAM = 1; //tu dong lay mau.
}

void __attribute__((__interrupt__,auto_psv))_ADC1Interr upt(void)
{
ADCvalues = ADCBUF0;
PORTC = ADCvalues;
}

int main()
{
TRISB = 0x0000;
TRISC = 0x0000;
Init_osc();
Init_ADC();
_ADON = 1;
while(1)
{
PORTB = ADCvalues;
}

}


Mong mọi người giúp đỡ với, thanks.
ltluc253 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn