PIC16F88 nepôjde spať

B

brew

Guest
Dobrý deň, snažím sa dať PIC16F88 spať, ale to jednoducho nebude spať. Ja používam kompilátor ccx5 bknd. Regulátor by mal spať, keď je vonkajšie prerušenie na RB0/INT. # Define svetlo PORTA.0 prerušenia intHandler (void) / / ISR, funkcia, spracovanie prerušenia {TMR1ON = 0; INTCON = 0x00; GIE = ​​0; PEIE = 0; INT0IE = 0; TMR1IE = 0; TMR1IF = 0; TRIS = 0x11, 0x11 = TRISB, PR1 = 0x00, sleep (), NOP (); ľahké = 0;} void main () {initPic () / / inicializuje PIC TRIS, PORTA, TRISB, PORTB, OSCCON atď svetla = 1;} Snažil som sa vypnúť všetky možné prerušenie a jasne pod ich vlajkou kúsky, ale môj správca nechce spať? Potrebujem vašu pomoc! Vďaka! ide, variť.
 
Dobrý deň! V initPic () postup môžete vykonať prerušenia povoliť? a potom, čo svetlo = 1 je potrebné dať PIC beží nekonečnej slučke! svetlo = 1, sleep (); while (1) {}
 
Ahoj! V initPic () postup môžete vykonať prerušenia povoliť? a potom, čo svetlo = 1 je potrebné dať PIC beží nekonečnej slučke! svetlo = 1, sleep (); while (1) {}
Ahoj pmar_kpj, vďaka za odpoveď. Ja som mohol niektorým prerušiť v initPic () funkcie, GIE, PEIE a INT0IE. v mojej funkcii ISR, ktorý je prerušenie intHandler (), som vypol všetky prerušenia Povolil som v initPic () funkcie. Tiež som vymazané všetky vlajky bity, ktoré zodpovedajú aj prerušenie povolené. svetlo = 1, sleep (); while (1) {} je tento kód v hlavnom programe? Prečo ste dal sleep () funkcie v hlavnej funkcii, bude to len dať PIC na spánok, ak je spustený hlavný program. to, čo chcem, je štát, by sa pic ísť spať, keď je prerušenie. A ešte niečo, čo je while (1) kód? Vďaka, ospravedlňujem sa, či mám veľa otázok. Prosím, holé so mnou. Vďaka! ide, variť
 
Dobrý deň! Váš program robí "light = 1," a skončil. Nič iné realizovať! Tak som si dal, že nekonečné slučky pre aplikáciu musí byť vždy aktívny!
 
Dobrý deň! Čo funkcii spánku v hlavnom programe pred nekonečnú slučku? Čo to robí? ide, variť.
 
Ak je to pomôže tu funkciu spánku som používal pre 16F88: [syntax = asm] postup sleep_seconds (byte v x) je var byte local_wdtcon var byte local_option - vytvorenie kópie možnosti bank_1 ASM MOVF OPTION_REG, W bank_0 ASM MOVWF local_option - vytvoriť kópiu WDTCON bank_2 ASM MOVF WDTCON, W bank_0 ASM MOVWF local_wdtcon - možnosť nastavenia Prescaler bank_1 asm BCF OPTION_REG, 0 BCF ASM OPTION_REG, 1 ASM BCF OPTION_REG, 2 ASM BSF OPTION_REG, 3 - nastavenie WDTCON Prescaler bank_2 WDTCON = 0b_0001_0100 bank_0 pre x slučky bank_2 asm BSF WDTCON, 0 ASM clrwdt asm spánku asm BCF WDTCON, 0 bank_0 END LOOP - Restore asm MOVF local_option, W bank_1 ASM MOVWF OPTION_REG bank_0 - Obnovenie WDTCON asm MOVF local_wdtcon, W bank_2 asm MOVWF WDTCON bank_0 konci konania [/syntax]
 
Dobrý deň! Po inicializácii je nutné zadať spať? takže volanie funkcie spánku!
 
Dobrý deň! Vďaka za odpovede. Urobil som, čo vy, ale ja navrhol, nedokážem aby to fungovalo. Preto sa snažím, aby prerušenie, aspoň spotreba prúdu, že to môže prísť, je 900uA. datasheet spánku prúdu by mala byť okolo 0,1 uA. Som stále nestráca hope.i 'l stále snaží zmeniť niektoré moje kódy. Ak máte akékoľvek ďalšie návrhy, prosím, prosím, pošlite mi ich. ide, variť.
 
Ahoj chlapci. KONEČNE! Urobil som to! Použil som MikroC pri zostavovaní svojho kódu a to funguje! som časovač na 10 minút po spánok, aj keď je RB0 prerušenie bol spustený, bude pic tiež spánok. Budem dúfať, že príspevok kód pomôcť ostatným pic začiatočníkom, ako som ja. timercounter int = 0; neplatné prerušenia (void) {if (PIR1.B0) / / TMR1 prerušiť {PORTA.B0 = 0; timercounter + +; PIR1.B0 = 0;} else if (INTCON.B1) / / prerušenie vlajka na RB0 {PORTA.B0 = 0; asm spánok / / INTCON.B1 = 0;}} void main () {INTCON.GIE = ​​1, / / ​​umožňuje globálne prerušenie INTCON.PEIE = 1, / / ​​periférne umožňuje prerušiť INTCON.B4 = 1, / / ​​prerušenie na RBO je povolené OPTION_REG.INTEDG = 1, / / ​​prerušenie na rastúce RB0 OSCCON = 0x70, / / ​​oscilátor = 8 MHz, HS T1CON.B1 = 0, / / ​​Timer1 zdroj hodín je FOSCO / 4 T1CON.B3 = 0, / / ​​Timer1 oscilátor vypnúť eliminovať spotrebu energie T1CON.B4 = 1; T1CON.B5 = 1, / / ​​hodnota = prescalar 01:08 T1CON.B0 = 1, / / ​​umožňuje prerušiť PIE1.B0 = 1, / / TMR1 umožňuje prerušiť PORTA = 0x00; PORTB = 0x00; TRISB.B0 = 1; TRIS = 0xFE, while (1) {PORTA.B0 = 1 if (timercounter == 2268) / / čas na spanie = 10 minút, aktuálne Načasovanie = 9:58 {asm spánku}}} ide, variť.
 

Welcome to EDABoard.com

Sponsor

Back
Top