avbryte basert program for pic16f877

B

bluemonday

Guest
hei ..Jeg brukte denne koden mitt program pic ..
unsigned int adc_value;

void main () (
ADCON1 = 0x80; / Konfigurer analoge innganger og Vref
Trisa = 0xFF; / PORTA er input
TRISB = 0x3F; / Pins RB7, RB6 er utganger

Usart_Init (115200);

do (
adc_value = Adc_Read (2); / / Få resultater av AD konvertering
Usart_Write (adc_value);
Delay_us (200);
) While (1);
)

jeg skrånende få en nøyaktig sampling ..kan noen hjelpe meg med dette ..jeg vil gjerne bruke en interruput basert timer på dette, men im dont vite hvor ..plz hjelpe meg ..noen som vet ..plz la meg få ur-kode ..

 
hei,

Jeg tror ur hjelp mikroc kompilatorvoid interrupt ()
(
if (PIR1.TMR1IF)
(
/ / setter ur koden her
PIR1.TMR1IF = 0; / / clear TMR1IF
)

)
void init_timer ()
(
TMR1L = 0;
TMR1H = 0;
T1CON = 0x31;
PIR1.TMR1IF = 0; / / clear TMR1IF
PIE1 = 1; / / aktiverer avbrudd
INTCON = 0xC0;
)

u kan initialisere timer ved hjelp av funksjonen init_timer ()
Når tiden overflow oppstår, funksjonen interrupt () vil automatisk kalt

 
kan du også bruke "special event" til KKP modul ...du kan lese den i databladet (sorry I don `t husker om 877 og 877A har denne modulen ...) burde du endre ccpr2 verdier for dine egne krav ...(Jeg har nettopp endret og gamle programmet for å poste her ....)( det fungerte variere bra for meg ...)

void avbrudd (void)
(
if (PIR2.CCP2IF)
(
PIR2.CCP2IF 0 =;
Usart_write (ADRESH);
)
)

void main (void)

(
Trisa = 0xEF; / / eller noe mer ...
TRISB = 0;
TRISD = 0;
PORTB = 0;
PORTD = 0;
Usart_Init (115200);
ADCON0 = 0b01000001; / ADC innstilling
ADCON1 = 0x04;
T1CON = 0; / /
CCPR2H = 0x04;
CCPR2L = 0xE2; / Fs = 800Hz = 1/1250us
TMR1H = 0; / /
TMR1L = 0; / /
CCP2CON = 0x0B;
PIR2.CCP2IF 0 =;
PIE2.CCP2IE = 1;
INTCON.PEIE = 1;
INTCON.GIE = 1;
T1CON.TMR1ON = 1;
ADCON0.GO = 1;

mens 1 ()
(
/ / legger noe mer her .....
)
)

 
i hager lese datablad og fremgangsmåte bør gjøres på en A / D-konvertering:

1.konfigurere A / D-modul:
2.konfigurere A / D avbryter:

klare ADIF bit
set aDie bit
set PEIE bit
set GIE bit
3.vente på erverv tid
4.start cpnversion

set GO / DONE bit (ADCON0)

5.vente på A / D-konvertering for å fullføre, ved enten:

polling for GO / DONE bit som skal tømmes (w / avbryter aktivert) ELLER
venter på A / D avbryte

Jeg vet hvordan de skal gjøre trinn 1 ..men im ikke sikker på hva du skal gjøre til neste trinn ..kan du vennligst forklare meg hvis du har tid ..din hjelp vil vi høyt verdsatt ..thnx alot ..Lagt etter 7 minutter:eek:g også ..jeg vil gjerne overføre ADRESL ..Hvordan vil jeg gjøre det?Lagt etter 10 minutter:eek:g også ..CCPR2h = 0x04
CCPR2L = 0xE2

kan du vennligst forklare det mer hvorfor du setter dette verdier?

 

Welcome to EDABoard.com

Sponsor

Back
Top