B
BlackOps
Guest
Bună ziua, prima întrebare este de unde să Proteus bibliotecă cu un model de PIC16F819 / 818?
Apoi, i-au programat meu PIC16F819 chip, şi conectat 7 segment pentru a afişa aşa:
RB1 - o
RB2 - b
RB3 - c
RB4 - d
RB5 - e
RB6 -
FRB7 - g
Vss Gnd conectat la terminalul de 7seg după cum este necesar.
toate conexiunile sunt OK, de programare a fost reuşită.
program trebuie să-mi număra de la 0 la 9, în fiecare secundă, şi va afişa în fiecare cifră 7seg pe ecran.Am făcut simulare cu aproape exact copie a acestui program, în conformitate cu PIC16F84 Proteus, şi a mers foarte bine acolo.Acum am schimbat un pic de program pentru a se potrivi cu el la mine în chip PIC16F819.digit on my 7seg display!
dar după programare, atunci când i se conectează la baterie, am doar 0
cifre pe afişaj 7seg!
în mod normal, aceasta trebuie să înceapă cu zero cifre, şi du-te în fiecare secundă, apoi din nou la zero .. si asa mai departe.dar incepe cu zero cifre .. si sta asa, du-te până doesnt.
atunci când acesta a lucrat în Proteus cu Pic16F84, i 20mhz cristal extern conectat la acesta.
aici, în circuitul real cu PIC16F819 i dont au nici un cristal conectat la el ... vere-l are, de asemenea, o Oscilator interne.
Cred ca problema mea are ceva de a face cu setări de configurare de la inceputul meu de cod sursă ....
Am dori, de asemenea, să ştii, dacă i
didnt conecta la orice cristal PIC16F819-mi ce s-ar fi implicit frecvenţa de Oscilator?
acum, uita-te la meu de cod sursă plz:
Cod:;================================================= ====
; File: RB0Int.ASM
; Data: 22 aprilie 2006
; Autor: Julio Sanchez
; Procesor: 16F84A
;================================================= ====
; Descriere:
; Programul de testare pentru a întrerupe pe portul RB0
; A pushbutton comuta este conectat la portul RB0.
; De pushbutton Comută un LED de pe port-B, linia de 7
;
;
;================================================= ====;=========================
; De instalare şi configurare
;=========================
; procesor 16f84A
# include <p16F819.inc>
__CONFIG _CP_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _CCP1_RB2 & _DEBUG_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_IO; Variabilelor aiciCBLOCK 0x20; începe de berbec în 16F84bres_hi; hi byte noastre 24bit variabilă
bres_mid; mijlocul byte
bres_lo; lo byte
(Am nevoie doar de 3 octeţi pentru acest sistem)status_temp; utilizate pentru intrerup service
w_temp; utilizate pentru intrerup service
NUM
decnumENDC;================================================= =============================
; Cod aiciorg 0x000; Configuraţi programul de memorie de bază la reiniţializaţi vector 0x000
reset
Mergi la setup; înfiinţat ints şi port chestiiorg 0x004; Interrupt vector, int manipulant codul urmează.
;================================================= =============================;************************************************* *****************************
; Interrupt handler (se execută acest cod fiecare timer0 întrerup)
;************************************************* *****************************
;
;------------------
int_handler;
;------------------;-------------------------------------------------
; Prima pastram W şi registru de staremovwf w_temp; salva off curent W registru conţinutul
movf STARE, W; muta în registrul de stare W registru
movwf status_temp; salva off conţinutul STARE registru;-------------------------------------------------
; Notă!
am ajuns aici la fiecare 256 de instalare, am
; Pot face acum noastre speciale de o secundă calendarul de sistem.; Aceasta constă în trei paşi principali;
; * Scădere de la 256 contează noastre 24bit variabilă
; * Test dacă am ajuns la setpoint
; * Dacă este cazul, se adaugă 1000000 contează 24bit variabilă şi de a genera eveniment.
;-------------------------------------------------
; * Optimizate 24 bit scădere aici
; Aceasta se face cu minim de instalare.
; Noi scădere de la 256 de 24bit variabilă
; De doar decrementing de la mijlocul octet.movf bres_mid, 1; primul test pentru mijlocul anului == 0
btfsc STARE, 2; NZ = nu underflow necesare
decf bres_hi, f; z, deci este underflow, deci dec de msbdecfsz bres_mid, f; dec de la mijlocul octet (scădere 256); Acum complet 24bit optimizat scădere, se face!
; Aceasta este de aproximativ 4 ori mai repede decât o "buna"
; 24bit scădere.Mergi la int_exit; NZ, deci cu siguranţă nu o secundă încă.
; În cele mai multe cazuri întreaga int ia
; Doar 16 de instalare.
;------------------------
; * Test dacă ne-am atins o secundă.
; Numai ajunge aici, atunci când mijlocul == 0, acesta MAI fi o secundă.
; Doar pentru a ajunge aici 1 din fiecare 256 de ori.
; (Aceasta este cea mai bună optimizat test)
; Acesta ajunge aici, atunci când bres_mid == 0.movf bres_hi, 1; test zero prea bună pentru
btfss STARE, 2; z = ambele hi şi mijlocul sunt zero, este o secundă!
Mergi la int_exit; NZ, deci nu o secundă încă.;-------------------------------------------------
Doar pentru a ajunge aici, dacă am ajuns la o secundă.; Acum putem genera o secundă cazul nostru, ca şi a adăuga
; O secundă la ceas sau orice altceva.
; (În acest exemplu vom comuta un LED); Celelalte lucru de care avem nevoie să faceţi este să adăugaţi 1000000 contează
; Pentru a ne 24bit variabilă şi începe din nou, peste tot.
;-------------------------------------------------
; Adăugaţi 1000000 conteaza primele.
; O secunda = 1000000 = 0F 42 40 (in hex); Ştim hi == 0 şi mijlocul == 0 Acest lucru face foarte rapid.
; Aceasta este o optimizate 24bit adăuga, pentru că ne putem
; Sarcină doar primele două octeţi şi numai necesitatea de a face
; Un real adăuga pe fundul octet.
Acest lucru este mult mai rapid
; Decât o "buna" 24bit adăuga.movlw 0x0F; obţine msb valoare
movwf bres_hi; sarcină în msbmovlw 0x42; obţine mijlocul valoare
movwf bres_mid; sarcină la mijlocul anuluimovlw 0x40; lsb pentru a adăuga valoare
addwf bres_lo, f; să-l adauge pe restul deja în lsb
btfss STARE, 0; NC = nu prea plin, aşa că este încă la mijlocul okincf bres_mid, f, c, astfel încât lsb overflowed, astfel inc mijlocul
; Aceasta este optimizat şi se bazează pe la mijlocul anului fiind cunoscut
, Precum şi faptul că la mijlocul anului nu va fi prea plin de la o inc.; Asta este!
Noastre optimizate 24bit adăuga se face,
; Aceasta este de aproximativ de două ori mai repede ca o "buna"
; 24bit adăuga.
;-------------------------
; Acum, noi ne vom ocupa de "eveniment" pe care o facem în fiecare o secundă.; Notă!
pentru acest exemplu vom comuta un dus, care
; Se va da un fulger, care este condus de la un al doilea
; Şi off pentru un al doilea.
; Adăugaţi-vă propriul cod aici pentru o secundă eveniment.; Notă!
Meu este condus pe porta, 3
; Dvs. poate fi condus pe un alt cod PIN.
; movlw b'00001000 "; masca pentru bit 3
; xorwf PORTB, f; comuta Porta, bit3 (comutare LED)
incf decnum, 1;-------------------------------------------------
; Nostru acum o secundă eveniment este terminat, putem ieşi din
; Intrerup handler.
;-------------------------------------------------
; În sfârşit vom restaura w şi registrele de stare.
; De asemenea, şterge TMRO int pavilion acum am terminat.
int_exit
BCF INTCON, TMR0IF; reseta tmr0 intrerup pavilionmovf status_temp, W; prelua copie a STARE registru
movwf STARE; restaura pre-ISR STARE registru conţinutul
swapf w_temp, f
swapf w_temp, W; restaura pre-ISR W registru conţinutul
retfie; reveni la intrerup
;------------------------------------------------- -----------------------------
;************************************************* *****************************
; SETUP (rulează această doar o singură dată la pornire)
;************************************************* *****************************
;
;------------------
setup; Mergi la eticheta
;------------------;-------------------------------------------------
; Notă!
16F84 versiunea.
; Notă!
aici am înfiinţat periferice şi port direcţii.
; Aceasta va trebui să fie schimbată pentru diferite Pics.
;-------------------------------------------------
; OPTION setup
movlw b'10001000 ";
; X -------; 7, 0 = permite, 1 = dezactiva, portb pullups
;-X ------; 6, 1 = /, int marginea selectaţi bit
; - X -----; 5, timer0 sursa, 0 = ceasul intern, 1 = int PIN.
; --- X ----; 4, int timer0 EDGE, 1 = \
; ---- X ---; 3, prescaler aloca, 1 = wdt, 0 = timer0
; ----- X -; 2,1,0, timer0 prescaler rata selectaţi
; ------ X-; 000 = 2, 001 = 4, 010 = 8, 011 = 16, etc
; ------- X;
; Notă!
Am stabilit de prescaler la wdt, deci timer0
; Nu are nici o prescaler si va fi prea plin la fiecare 256
; Instrucţiuni şi să o întrerup.
;
banksel OPTION_REG; merg buna reg bancar
movwf OPTION_REG; încărcare a datelor în OPTION_REG
banksel 0; reveni la normal banca 0
;-------------------------------------------------
; PORTB pins direcţie setup
; 1 = intrare, 0 = ieşire
clrf PORTB;
;
movlw b'00000000 "; toate cele 8 portb sunt rezultate
;
banksel TRISB; merg buna reg bancar
movwf TRISB; masca pentru a trimite portb
banksel 0; reveni la normal reg bancar
;-------------------------------------------------
; Porta PINS direcţie setup
; 1 = intrare, 0 = ieşire
clrf porta;
;
movlw b'00000000 "; toate cele 5 porta sunt rezultate,
; (Cu 16F84 porta-a mai redus doar 5 biţi)
;
banksel TRISB; merg buna reg bancar
movwf TRISA; trimite masca la porta
banksel 0; reveni la normal reg bancar
;-------------------------------------------------
; INTCON setup
;
; Pentru acest cod de exemplu, ne permite timer0
; Overflow întrerup.
;
; Permite întrerupe ultima
; Întrerupe setup
movlw b'10100000 "; GIE = pe TOIE = pe (timer0 overflow int)
movwf INTCON; înfiinţat.;-------------------------------------------------
; Notă!
Acum, hardware-ul este configurat avem nevoie pentru a încărca
; Prima conta pentru o secundă în nostru 24bit bres variabilă.
;-------------------------------------------------
; Notă!
Acest exemplu utilizează 4 MHz ceas, care este
; 1000000 contează pe secundă.
;
; Avem nevoie de o perioadă de 1 secundă, aşa că trebuie să încărcaţi
; 1000000 conteaza de fiecare dată.
; 1000000 = 0F 42 40 (in hex)
;
; De asemenea, necesitatea de a adăuga 256 contează pentru prima dată,
, Astfel că ne-am adăuga la 1 la mijlocul octet.
; Verificaţi mijlocul overflow, dacă este necesar.; Aici ne incarca 24bit variabilă.
movlw 0x0F; obţine msb valoare
movwf bres_hi; pune în himovlw 0x42 1; ajunge la jumătatea anului valoarea (nota am adăugat la 1 la acesta)
movwf bres_mid; pune la mijlocul anuluimovlw 0x40; obţine lsb valoare
movwf bres_lo; pune la mijlocul anului; Acum setup este complet, se poate începe executarea.
;-------------------------------------------------
Mergi principal; începe programul principal;------------------------------------------------- -----------------------------
;************************************************* *****************************
; PRINCIPALA (principale program buclă)
;************************************************* *****************************
;
;------------------
principale; Mergi la eticheta
;------------------
movlw 0
movwf decnum
;-------------------------------------------------
; Notă!
Acest exemplu utilizează timer0 overflow întrerup.
; Aceasta va întrerupe programul nostru principal fiecare 256 de instalare
; Şi nu de o secundă de timp sistem.
;-------------------------------------------------
main_loop;
; Notă!
aici aveţi un cod de program principal,
; Sau apeluri la principalele piese de program.
; De întrerupere nu toate lucrurile o secundă de timp.
; Chestii
; Chestii
; Chestii
; Chestii
movf decnum, 0Segmentul de apelmovwf NUM
rlf NUM, 0
movwf PORTB;-------------------------------------------------
Mergi la main_loop; ţine să fie difuzate de principalele cod.;------------------------------------------------- -----------------------------segment:
addwf PCL, 1; PCL este program contra clanţă
retlw 0x3f; cod 0
retlw 0x06; 1
retlw 0x5b; 2
retlw 0x4f; 3
retlw 0x66, 4
retlw 0x6d; 5
retlw 0x7d; 6
retlw 0x07, 7
retlw 0x7f; 8
retlw 0x6f; 9
; retlw 0x77; A
; retlw 0x7c; B
; retlw 0x39; C
; retlw 0x5e; D
; retlw 0x79; E
; retlw 0x71; F
; retlw 0x40; Doar în cazul în care pe toate
;================================================= =============================
end; nici un cod după acest punct.
;================================================= =============================
Apoi, i-au programat meu PIC16F819 chip, şi conectat 7 segment pentru a afişa aşa:
RB1 - o
RB2 - b
RB3 - c
RB4 - d
RB5 - e
RB6 -
FRB7 - g
Vss Gnd conectat la terminalul de 7seg după cum este necesar.
toate conexiunile sunt OK, de programare a fost reuşită.
program trebuie să-mi număra de la 0 la 9, în fiecare secundă, şi va afişa în fiecare cifră 7seg pe ecran.Am făcut simulare cu aproape exact copie a acestui program, în conformitate cu PIC16F84 Proteus, şi a mers foarte bine acolo.Acum am schimbat un pic de program pentru a se potrivi cu el la mine în chip PIC16F819.digit on my 7seg display!
dar după programare, atunci când i se conectează la baterie, am doar 0
cifre pe afişaj 7seg!
în mod normal, aceasta trebuie să înceapă cu zero cifre, şi du-te în fiecare secundă, apoi din nou la zero .. si asa mai departe.dar incepe cu zero cifre .. si sta asa, du-te până doesnt.
atunci când acesta a lucrat în Proteus cu Pic16F84, i 20mhz cristal extern conectat la acesta.
aici, în circuitul real cu PIC16F819 i dont au nici un cristal conectat la el ... vere-l are, de asemenea, o Oscilator interne.
Cred ca problema mea are ceva de a face cu setări de configurare de la inceputul meu de cod sursă ....
Am dori, de asemenea, să ştii, dacă i
didnt conecta la orice cristal PIC16F819-mi ce s-ar fi implicit frecvenţa de Oscilator?
acum, uita-te la meu de cod sursă plz:
Cod:;================================================= ====
; File: RB0Int.ASM
; Data: 22 aprilie 2006
; Autor: Julio Sanchez
; Procesor: 16F84A
;================================================= ====
; Descriere:
; Programul de testare pentru a întrerupe pe portul RB0
; A pushbutton comuta este conectat la portul RB0.
; De pushbutton Comută un LED de pe port-B, linia de 7
;
;
;================================================= ====;=========================
; De instalare şi configurare
;=========================
; procesor 16f84A
# include <p16F819.inc>
__CONFIG _CP_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _CCP1_RB2 & _DEBUG_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_IO; Variabilelor aiciCBLOCK 0x20; începe de berbec în 16F84bres_hi; hi byte noastre 24bit variabilă
bres_mid; mijlocul byte
bres_lo; lo byte
(Am nevoie doar de 3 octeţi pentru acest sistem)status_temp; utilizate pentru intrerup service
w_temp; utilizate pentru intrerup service
NUM
decnumENDC;================================================= =============================
; Cod aiciorg 0x000; Configuraţi programul de memorie de bază la reiniţializaţi vector 0x000
reset
Mergi la setup; înfiinţat ints şi port chestiiorg 0x004; Interrupt vector, int manipulant codul urmează.
;================================================= =============================;************************************************* *****************************
; Interrupt handler (se execută acest cod fiecare timer0 întrerup)
;************************************************* *****************************
;
;------------------
int_handler;
;------------------;-------------------------------------------------
; Prima pastram W şi registru de staremovwf w_temp; salva off curent W registru conţinutul
movf STARE, W; muta în registrul de stare W registru
movwf status_temp; salva off conţinutul STARE registru;-------------------------------------------------
; Notă!
am ajuns aici la fiecare 256 de instalare, am
; Pot face acum noastre speciale de o secundă calendarul de sistem.; Aceasta constă în trei paşi principali;
; * Scădere de la 256 contează noastre 24bit variabilă
; * Test dacă am ajuns la setpoint
; * Dacă este cazul, se adaugă 1000000 contează 24bit variabilă şi de a genera eveniment.
;-------------------------------------------------
; * Optimizate 24 bit scădere aici
; Aceasta se face cu minim de instalare.
; Noi scădere de la 256 de 24bit variabilă
; De doar decrementing de la mijlocul octet.movf bres_mid, 1; primul test pentru mijlocul anului == 0
btfsc STARE, 2; NZ = nu underflow necesare
decf bres_hi, f; z, deci este underflow, deci dec de msbdecfsz bres_mid, f; dec de la mijlocul octet (scădere 256); Acum complet 24bit optimizat scădere, se face!
; Aceasta este de aproximativ 4 ori mai repede decât o "buna"
; 24bit scădere.Mergi la int_exit; NZ, deci cu siguranţă nu o secundă încă.
; În cele mai multe cazuri întreaga int ia
; Doar 16 de instalare.
;------------------------
; * Test dacă ne-am atins o secundă.
; Numai ajunge aici, atunci când mijlocul == 0, acesta MAI fi o secundă.
; Doar pentru a ajunge aici 1 din fiecare 256 de ori.
; (Aceasta este cea mai bună optimizat test)
; Acesta ajunge aici, atunci când bres_mid == 0.movf bres_hi, 1; test zero prea bună pentru
btfss STARE, 2; z = ambele hi şi mijlocul sunt zero, este o secundă!
Mergi la int_exit; NZ, deci nu o secundă încă.;-------------------------------------------------
Doar pentru a ajunge aici, dacă am ajuns la o secundă.; Acum putem genera o secundă cazul nostru, ca şi a adăuga
; O secundă la ceas sau orice altceva.
; (În acest exemplu vom comuta un LED); Celelalte lucru de care avem nevoie să faceţi este să adăugaţi 1000000 contează
; Pentru a ne 24bit variabilă şi începe din nou, peste tot.
;-------------------------------------------------
; Adăugaţi 1000000 conteaza primele.
; O secunda = 1000000 = 0F 42 40 (in hex); Ştim hi == 0 şi mijlocul == 0 Acest lucru face foarte rapid.
; Aceasta este o optimizate 24bit adăuga, pentru că ne putem
; Sarcină doar primele două octeţi şi numai necesitatea de a face
; Un real adăuga pe fundul octet.
Acest lucru este mult mai rapid
; Decât o "buna" 24bit adăuga.movlw 0x0F; obţine msb valoare
movwf bres_hi; sarcină în msbmovlw 0x42; obţine mijlocul valoare
movwf bres_mid; sarcină la mijlocul anuluimovlw 0x40; lsb pentru a adăuga valoare
addwf bres_lo, f; să-l adauge pe restul deja în lsb
btfss STARE, 0; NC = nu prea plin, aşa că este încă la mijlocul okincf bres_mid, f, c, astfel încât lsb overflowed, astfel inc mijlocul
; Aceasta este optimizat şi se bazează pe la mijlocul anului fiind cunoscut
, Precum şi faptul că la mijlocul anului nu va fi prea plin de la o inc.; Asta este!
Noastre optimizate 24bit adăuga se face,
; Aceasta este de aproximativ de două ori mai repede ca o "buna"
; 24bit adăuga.
;-------------------------
; Acum, noi ne vom ocupa de "eveniment" pe care o facem în fiecare o secundă.; Notă!
pentru acest exemplu vom comuta un dus, care
; Se va da un fulger, care este condus de la un al doilea
; Şi off pentru un al doilea.
; Adăugaţi-vă propriul cod aici pentru o secundă eveniment.; Notă!
Meu este condus pe porta, 3
; Dvs. poate fi condus pe un alt cod PIN.
; movlw b'00001000 "; masca pentru bit 3
; xorwf PORTB, f; comuta Porta, bit3 (comutare LED)
incf decnum, 1;-------------------------------------------------
; Nostru acum o secundă eveniment este terminat, putem ieşi din
; Intrerup handler.
;-------------------------------------------------
; În sfârşit vom restaura w şi registrele de stare.
; De asemenea, şterge TMRO int pavilion acum am terminat.
int_exit
BCF INTCON, TMR0IF; reseta tmr0 intrerup pavilionmovf status_temp, W; prelua copie a STARE registru
movwf STARE; restaura pre-ISR STARE registru conţinutul
swapf w_temp, f
swapf w_temp, W; restaura pre-ISR W registru conţinutul
retfie; reveni la intrerup
;------------------------------------------------- -----------------------------
;************************************************* *****************************
; SETUP (rulează această doar o singură dată la pornire)
;************************************************* *****************************
;
;------------------
setup; Mergi la eticheta
;------------------;-------------------------------------------------
; Notă!
16F84 versiunea.
; Notă!
aici am înfiinţat periferice şi port direcţii.
; Aceasta va trebui să fie schimbată pentru diferite Pics.
;-------------------------------------------------
; OPTION setup
movlw b'10001000 ";
; X -------; 7, 0 = permite, 1 = dezactiva, portb pullups
;-X ------; 6, 1 = /, int marginea selectaţi bit
; - X -----; 5, timer0 sursa, 0 = ceasul intern, 1 = int PIN.
; --- X ----; 4, int timer0 EDGE, 1 = \
; ---- X ---; 3, prescaler aloca, 1 = wdt, 0 = timer0
; ----- X -; 2,1,0, timer0 prescaler rata selectaţi
; ------ X-; 000 = 2, 001 = 4, 010 = 8, 011 = 16, etc
; ------- X;
; Notă!
Am stabilit de prescaler la wdt, deci timer0
; Nu are nici o prescaler si va fi prea plin la fiecare 256
; Instrucţiuni şi să o întrerup.
;
banksel OPTION_REG; merg buna reg bancar
movwf OPTION_REG; încărcare a datelor în OPTION_REG
banksel 0; reveni la normal banca 0
;-------------------------------------------------
; PORTB pins direcţie setup
; 1 = intrare, 0 = ieşire
clrf PORTB;
;
movlw b'00000000 "; toate cele 8 portb sunt rezultate
;
banksel TRISB; merg buna reg bancar
movwf TRISB; masca pentru a trimite portb
banksel 0; reveni la normal reg bancar
;-------------------------------------------------
; Porta PINS direcţie setup
; 1 = intrare, 0 = ieşire
clrf porta;
;
movlw b'00000000 "; toate cele 5 porta sunt rezultate,
; (Cu 16F84 porta-a mai redus doar 5 biţi)
;
banksel TRISB; merg buna reg bancar
movwf TRISA; trimite masca la porta
banksel 0; reveni la normal reg bancar
;-------------------------------------------------
; INTCON setup
;
; Pentru acest cod de exemplu, ne permite timer0
; Overflow întrerup.
;
; Permite întrerupe ultima
; Întrerupe setup
movlw b'10100000 "; GIE = pe TOIE = pe (timer0 overflow int)
movwf INTCON; înfiinţat.;-------------------------------------------------
; Notă!
Acum, hardware-ul este configurat avem nevoie pentru a încărca
; Prima conta pentru o secundă în nostru 24bit bres variabilă.
;-------------------------------------------------
; Notă!
Acest exemplu utilizează 4 MHz ceas, care este
; 1000000 contează pe secundă.
;
; Avem nevoie de o perioadă de 1 secundă, aşa că trebuie să încărcaţi
; 1000000 conteaza de fiecare dată.
; 1000000 = 0F 42 40 (in hex)
;
; De asemenea, necesitatea de a adăuga 256 contează pentru prima dată,
, Astfel că ne-am adăuga la 1 la mijlocul octet.
; Verificaţi mijlocul overflow, dacă este necesar.; Aici ne incarca 24bit variabilă.
movlw 0x0F; obţine msb valoare
movwf bres_hi; pune în himovlw 0x42 1; ajunge la jumătatea anului valoarea (nota am adăugat la 1 la acesta)
movwf bres_mid; pune la mijlocul anuluimovlw 0x40; obţine lsb valoare
movwf bres_lo; pune la mijlocul anului; Acum setup este complet, se poate începe executarea.
;-------------------------------------------------
Mergi principal; începe programul principal;------------------------------------------------- -----------------------------
;************************************************* *****************************
; PRINCIPALA (principale program buclă)
;************************************************* *****************************
;
;------------------
principale; Mergi la eticheta
;------------------
movlw 0
movwf decnum
;-------------------------------------------------
; Notă!
Acest exemplu utilizează timer0 overflow întrerup.
; Aceasta va întrerupe programul nostru principal fiecare 256 de instalare
; Şi nu de o secundă de timp sistem.
;-------------------------------------------------
main_loop;
; Notă!
aici aveţi un cod de program principal,
; Sau apeluri la principalele piese de program.
; De întrerupere nu toate lucrurile o secundă de timp.
; Chestii
; Chestii
; Chestii
; Chestii
movf decnum, 0Segmentul de apelmovwf NUM
rlf NUM, 0
movwf PORTB;-------------------------------------------------
Mergi la main_loop; ţine să fie difuzate de principalele cod.;------------------------------------------------- -----------------------------segment:
addwf PCL, 1; PCL este program contra clanţă
retlw 0x3f; cod 0
retlw 0x06; 1
retlw 0x5b; 2
retlw 0x4f; 3
retlw 0x66, 4
retlw 0x6d; 5
retlw 0x7d; 6
retlw 0x07, 7
retlw 0x7f; 8
retlw 0x6f; 9
; retlw 0x77; A
; retlw 0x7c; B
; retlw 0x39; C
; retlw 0x5e; D
; retlw 0x79; E
; retlw 0x71; F
; retlw 0x40; Doar în cazul în care pe toate
;================================================= =============================
end; nici un cod după acest punct.
;================================================= =============================