PIC16F88 zal niet gaan slapen

B

brew

Guest
hi, ik probeer PIC16F88 laten inslapen, maar het wil maar niet slapen. Ik gebruik een ccx5 compiler door bknd. de controller moeten slapen als er een externe interrupt op RB0/INT. # Define licht PORTA.0 interrupt intHandler (void) / / ISR, functies die handvat onderbreekt {TMR1ON = 0; INTCON = 0x00; GIE = ​​0; PEIE = 0; INT0IE = 0; TMR1IE = 0; TMR1IF = 0; TRISA = 0x11; TRISB = 0x11; PR1 = 0x00; slaap (); nop (); licht = 0;} void main () {initPic (); / / initialiseer PIC TRISA, PORTA, TRISB, PORTB, OSCCON, enz. licht = 1;} Ik heb geprobeerd uit te schakelen alle mogelijke interrupts en hun vlagbits te wissen, maar nog steeds mijn controller niet wil slapen? Ik heb uw hulp nodig! bedankt! groet, brouwsel.
 
Hi! In initPic () procedure maakt u de interrupt inschakelen? en na licht = 1 moet u de foto te maken aan het runnen van een oneindige lus! licht = 1; sleep (); while (1) {}
 
Hi! In initPic () procedure maakt u de interrupt inschakelen? en na licht = 1 moet u de foto te maken aan het runnen van een oneindige lus! licht = 1; sleep (); while (1) {}
hi pmar_kpj, bedankt voor het antwoord. ik deed in staat stellen een aantal interrupt in de initPic () functie, GIE, PEIE en INT0IE. in mijn ISR functie die interrupt intHandler (), i uitgeschakeld alle interrupts i ingeschakeld tijdens de initPic () functie. Ook i gewist alle vlagbits die overeenkomen met de interrupts i ingeschakeld. licht = 1; sleep (); while (1) {} is deze code in het hoofdprogramma? waarom heb je de sleep () functie zetten binnen de belangrijkste functie, zal dit gewoon de PIC op de slaap als hoofdprogramma wordt uitgevoerd. wat ik willen dat er gebeurt is, moet de foto gaan slapen als er een interrupt. en een ander ding, wat is de while (1) code voor? bedankt, sorry als ik veel vragen hebben. gelieve kale met mij. Bedankt! groet, brouwen
 
hi! Uw programma wordt uitgevoerd "licht = 1;" en klaar. Niets anders om uit te voeren! Dus heb ik dat oneindige lus voor de toepassing om altijd actief!
 
hi! hoe zit het met de slaap functie binnen het hoofdprogramma voor de oneindige lus? wat doet het? groet, brouwsel.
 
Als het enige hulp hier is de slaapfunctie die ik heb gebruikt voor de 16F88: [syntax = asm] procedure sleep_seconds (byte in x) is var byte local_wdtcon var byte local_option - maak een kopie van OPTION bank_1 asm MOVF OPTION_REG, W bank_0 asm MOVWF local_option - maak een kopie van WDTCON bank_2 asm MOVF WDTCON, W bank_0 asm MOVWF local_wdtcon - optie voor het instellen prescaler bank_1 asm bcf OPTION_REG, 0 asm bcf OPTION_REG, 1 asm bcf OPTION_REG, 2 asm bsf OPTION_REG, 3 - setup WDTCON prescaler bank_2 WDTCON = 0b_0001_0100 bank_0 voor x-lus bank_2 asm bsf WDTCON, 0 asm CLRWDT asm slaap asm bcf WDTCON, 0 bank_0 end loop - herstellen OPTIE asm MOVF local_option, W bank_1 asm MOVWF OPTION_REG bank_0 - restore WDTCON asm MOVF local_wdtcon, W bank_2 asm MOVWF WDTCON bank_0 einde procedure [/syntax]
 
hi! na initialisatie is nodig om slaapstand moet gaan? dus bel slaapfunctie!
 
Hi! bedankt voor de antwoorden. Ik heb gedaan wat jullie gesuggereerd, maar ik kan niet lijken te laten werken. waarom ik probeer om een ​​interrupt te maken, de minst stroomverbruik dat het kan bedenken is 900uA. de datasheet van de slaap huidige moet ongeveer 0,1 uA. Ik ben nog steeds niet te verliezen hope.i 'l nog steeds bezig om een ​​aantal van mijn codes wijzigen. als u nog meer suggesties kunt u stuur ze naar mij. groet, brouwsel.
 
Hi guys. EINDELIJK!! Ik heb het gedaan! Ik gebruikte mikroC om mijn code te compileren en het werkt! i de timer instellen om te slapen na 10 minuten, ook wanneer RB0 interrupt is geactiveerd, de foto zal ook slapen. Ik kom na de code in de hoop andere foto newbies zoals ik te helpen. int timercounter = 0; leegte interrupt (void) {if (PIR1.B0) / / TMR1 interrupt {PORTA.B0 = 0; timercounter + +; PIR1.B0 = 0;} else if (INTCON.B1) / / interrupt vlag op RB0 {PORTA.B0 = 0; asm slaap / / INTCON.B1 = 0;}} void main () {INTCON.GIE = ​​1; / / maakt global interrupt INTCON.PEIE = 1; / / maakt perifere interrupt INTCON.B4 = 1 / / interrupt op RBO is ingeschakeld OPTION_REG.INTEDG = 1; / / interrupts op de stijgende RB0 OSCCON = 0x70; / / oscillator = 8Mhz, HS T1CON.B1 = 0; / / Timer1 clock bron is FOSC / 4 T1CON.B3 = 0; / / Timer1 oscillator uitgeschakeld om stroom afvoer T1CON.B4 = 1 te elimineren; T1CON.B5 = 1; / / prescalar value = 01:08 T1CON.B0 = 1; / / maakt interrupt PIE1.B0 = 1; / / laat TMR1 interrupt PORTA = 0x00; PORTB = 0x00; TRISB.B0 = 1; TRISA = 0xFE; while (1) {PORTA.B0 = 1; if (timercounter == 2268) / / tijd om = 10 minuten, werkelijke slapen timing = 9:58 {asm slaap}}} verband brouwsel.
 

Welcome to EDABoard.com

Sponsor

Back
Top