PIC16F88 nepůjde spát

B

brew

Guest
Ahoj, já jsem se snaží dát PIC16F88 spát, ale to prostě nebude spát. Já používám ccx5 kompilátor by bknd. Regulátor by měl spát, když je to externí přerušení na RB0/INT. # Define světla PORTA.0 přerušení intHandler (void) / / ISR, funkce, které zvládnout přeruší {TMR1ON = 0; INTCON = 0x00; GIE = ​​0; PEIE = 0; INT0IE = 0; TMR1IE = 0; TMR1IF = 0; TRISA = 0x11; TRISB = 0x11; PR1 = 0x00; sleep (); nop (); lehká = 0;} void main () {initPic (); / / inicializuje PIC TRISA, Porta, TRISB, PORTB, OSCCON, atd. světla = 1;} Snažil jsem se vypnout všechny možné přerušení a zrušte jejich vlajky bitů, ale můj kontrolor nechce spát? Potřebuji vaši pomoc! díky! jde, vařit.
 
Ahoj! V initPic () postupu uděláte povolení přerušení? a po světle = 1 je třeba, aby pic k provozování nekonečnou smyčku! světlo = 1; spánku (), zatímco (1) {}
 
Ahoj! V initPic () postupu uděláte povolení přerušení? a po světle = 1 je třeba, aby pic k provozování nekonečnou smyčku! light = 1; spánku (); while (1) {}
hi pmar_kpj, díky za odpověď. Udělal jsem povolit nějaký přerušení v initPic () funkce; GIE, PEIE a INT0IE. v mém funkci ISR, která je přerušení intHandler (), i vypnuté všechny přerušení Povolil jsem během initPic () funkce. Také, i vymazány všechny vlajky bity, které odpovídají přerušení Povolil jsem. světlo = 1; spánku (), zatímco (1) {} je tento kód uvnitř hlavního programu? Proč jsi dal spánku () funkce uvnitř hlavní funkce, bude to jen dát PIC na spánek, pokud hlavní program je spuštěn. co chci aby se to stalo je, by pic jít spát, když tam je přerušení. a další věc, co je while (1) kód? Díky, je mi líto, když mám spoustu otázek. prosím holé se mnou. Díky! jde, vařit
 
hi! Váš program spustí "světlo = 1," a hotovo. Nic jiného provedení! Tak jsem dal, že nekonečnou smyčku pro aplikaci musí být vždy aktivní!
 
hi! co funkci spánku uvnitř hlavního programu před nekonečné smyčce? Co to dělá? jde, vařit.
 
Pokud to pomůže tady je funkce spánku jsem použil pro 16F88: [syntax = asm] řád sleep_seconds (byte in x) je var byte local_wdtcon var byte local_option - vytvořit kopii OPTION bank_1 asm MOVF OPTION_REG, W bank_0 asm MOVWF local_option - vytvořit kopii WDTCON bank_2 asm MOVF WDTCON, W bank_0 asm MOVWF local_wdtcon - možnost nastavení dělič bank_1 asm bcf OPTION_REG, 0 asm bcf OPTION_REG, 1 asm bcf OPTION_REG, 2 asm bsf OPTION_REG, 3 - nastavení WDTCON dělič bank_2 WDTCON = 0b_0001_0100 bank_0 pro x smyčky bank_2 asm BSF WDTCON, 0 asm clrwdt asm spánek asm bcf WDTCON, 0 bank_0 end loop - Restore asm MOVF local_option, W bank_1 asm MOVWF OPTION_REG bank_0 - obnovení WDTCON asm MOVF local_wdtcon, W bank_2 asm MOVWF WDTCON bank_0 end řízení [/syntax]
 
hi! Po inicializaci je nutné zadat spánek? tak zavolej funkci spánku!
 
Ahoj! díky za odpovědi. Udělal jsem to, co jste navrhl, ale nemůžu Zdá se, že to funguje. Proto se snažím, aby se přerušení, alespoň spotřeba proudu, že to může přijít s je 900uA. datasheet spánek proud by měl být kolem 0,1 uA. Stále nejsem ztrácí hope.i "Pořád se snaží změnit některé z mých kódů. máte-li nějaké další návrhy, prosím, prosím, prosím, pošlete mi je. jde, vařit.
 
Ahoj kluci. KONEČNĚ!! Udělal jsem to! Použil jsem mikroC sestavit svůj kód a ono to funguje! i nastavit časovač do režimu spánku po 10 minutách, i když RB0 přerušení byl spuštěn, bude pic také spí. Budu psát kód v naději, že pomůže dalším pic nováčky, jako jsem já. int timercounter = 0; void přerušení (void) {if (PIR1.B0) / / TMR1 přerušení {PORTA.B0 = 0; timercounter + +; PIR1.B0 = 0;} else if (INTCON.B1) / / přerušení vlajka na RB0 {PORTA.B0 = 0; asm spánek / / INTCON.B1 = 0;}} void main () {INTCON.GIE = ​​1; / / umožňuje globální přerušit INTCON.PEIE = 1; / / umožňuje periferní přerušit INTCON.B4 = 1, / / ​​přerušení při RBO je povoleno OPTION_REG.INTEDG = 1, / / ​​přeruší na rostoucí RB0 OSCCON = 0x70; / / oscilátor = 8MHz, HS T1CON.B1 = 0; / / Timer1 zdroj hodinového signálu je FOSC / 4 T1CON.B3 = 0, / / ​​Timer1 oscilátor vypnutí pro odstranění Příkon T1CON.B4 = 1; T1CON.B5 = 1; / / prescalar hodnota = 01:08 T1CON.B0 = 1; / / umožňuje přerušení PIE1.B0 = 1; / / umožňuje TMR1 přerušení PORTA = 0x00; PORTB = 0x00; TRISB.B0 = 1; TRISA = 0xFE; while (1) {PORTA.B0 = 1; if (timercounter == 2268) / / čas jít spát = 10 minut, skutečná Načasování = 09:58 {asm spánek}}} ohledem, vařit.
 

Welcome to EDABoard.com

Sponsor

Back
Top