Prop Orologio asm

F

firesky1982

Guest
Ho bisogno di aiuto con Trisb portb.Può aiutarmi a qualsiasi problema con il codice che ho?

 
Codice:

;--------

; MclockT3.asm - modificato per 180 gradi pennello a motore

; OK per aggiungere 8a LED - chiuse nella tabella 2 e in altri luoghi

; Timer utilizzati per garantire l'avvio in tutte le powerups

"Il Propeller" meccanicamente scandita LED orologio

; Bob Blick 12 febbraio 1997

; Sotto licenza termini della GNU General Public License, www.gnu.org

; Non viene data alcuna garanzia espressa o implicita

; Bob Blick 18 febbraio 2002

;--------

p = elenco 16F84

radix hex

comprendono "p16F84.inc"

;--------

; Ricordatevi di impostare le opzioni a tempo blastica: OSC = regolare xtal, WDT = ON

; Sulla base di tutti i tempi a 4 MHz cristallo

;--------

; Sono questi, equivale già nel include file?
someday I'll look.

;--------

w equ 0

f equ 1

;--------

; Avvio di RAM disponibile.

;--------

cblock 0x0C

safe_w; non temp, utilizzato da interrompere svc

safe_s; non temp, utilizzato da interrompere svc

period_count; incrementato ogni interrompere

period_dup; period_count copia di sicurezza da interrompere

period_calc; stabile dopo periodo di isteresi calc.

bandiere; b2 = int b1 = minuti b4 = bordo

dot_index; colonna che viene visualizzato

digit_index; cifre che viene visualizzato

ora, in formato di visualizzazione, non hex (01-12)

minuti; da 00 a 59

bigtick_dbl; incrementato ogni interrompere

bigtick_hi

bigtick_lo

chiavi; valore chiave

zero; valore zero

barrare la casella; utilizzato da ritardo

endc

;--------

; Avvio di ROM

;--------

org 0x00; Avvio di codice spazio

goto Start

;--------

; INTERRUPT SERVICE ROUTINE

;--------

org 0x04; interrompere vettore

Intsvc movwf safe_w; salvare w

swapf STATUS, w; swap stato, w

movwf safe_s; salvare lo stato (morso di swap, si ricordi)

;--------

; Fatto di risparmio, ora iniziare a lavorare

; Incremento periodo contare

;--------

incf period_count, f

btfsc STATUS, Z; zero significa impostare overflow

decf period_count, f

; Chiaro timer per assicurare l'avvio

clrwdt

; 234375 interrompe ogni minuto.
Incremento della bigtick ogni volta.

incf bigtick_lo, f

btfsc STATUS, Z

incf bigtick_hi, f

btfsc STATUS, Z

incfsz bigtick_dbl, f

goto Bigtick_out

;--------

; Qui?
bigtick ha laminati a zero e un minuto è passato.

; Ricaricare bigtick e impostare una bandiera per contrastare le principali

;--------

movlw 0xFC; 234375 = 0x039387

movwf bigtick_dbl; 0 - 0x039387 = 0xFC6C79

movlw 0x6C

movwf bigtick_hi

movlw 0x79

movwf bigtick_lo

BSF bandiere, 1; notificare Keep_time

Bigtick_out

;--------

, Fatto di lavoro, avviare il ripristino

;--------

swapf safe_s, w; fetch status, reswap stuzzichini

movwf STATUS; ripristinare lo stato

swapf safe_w, f; swap stuzzichini in preparazione

swapf safe_w, w; per il restauro di swap w

bcf INTCON, 2; chiaro bandiera interrompere prima del rimpatrio

retfie; ritorno da interrompere

;--------

; CARATTERE tabella di ricerca

; Ignorare elevato bit.
impostare = LED spento, chiaro = LED, bit0 = LED inferiore, bit6 = LED superiore

;--------

Char_tbl

addwf PCL, f

dt 0xC1, 0xBE, 0xBE, 0xBE, 0xC1; "O"

dt 0xFF, 0xDE, 0x80, 0xFE, 0xFF; "1"

dt 0xDE, 0xBC, 0xBA, 0xB6, 0xCE; "2"

dt 0xBD, 0xBE, 0xAE, 0x96, 0xB9; "3"

dt 0xF3, 0xEB, 0xDB, 0x80, 0xFB; "4"

dt 0x8D, 0xAE, 0xAE, 0xAE, 0xB1; "5"

dt 0xE1, 0xD6, 0xB6, 0xB6, 0xF9; "6"

dt 0xBF, 0xB8, 0xB7, 0xAF, 0x9F; "7"

dt 0xC9, 0xB6, 0xB6, 0xB6, 0xC9; "8"

dt 0xCF, 0xB6, 0xB6, 0xB5, 0xC3, "9"

dt 0xFF, 0xC9, 0xC9, 0xFF, 0xFF; ":"

Char_tbl_end

;--------

; Subroutine PARTIRE QUI

;--------

; Chiaro importante bit di ram

;--------

Ram_init movlw 0x07

movwf chiavi

movlw 0x12; perché orologi sempre

movwf ora, alle 12.00?

clrf minuti

clrf dot_index

clrf digit_index

movlw 0xFC

movwf bigtick_dbl

retlw 0

;--------

; Pin inutilizzati Sono impostazione per essere uscite

;--------

Port_init movlw 0x00; tutto l'output, b7 = inutilizzati

BSF STATUS, RP0; selezionare memoria bank1

movwf TRISB; portB come produzione

bcf STATUS, RP0; tornare alla bank0movlw b'00010111 '; porta uno ha 5 pin.
Ho bisogno di 4 ingressi

; b0 = minuti, b1 = 10mins, b2 = ore

; b3 = inutilizzati, b4 = indice di rotazione

tris PORTA; sulla porta uno

retlw 0

;--------

; Ottenere timer in corso a base di interrupt

;--------

Timer_init bcf INTCON, 2; chiaro TMR0 int bandiera

BSF INTCON, 7; consentire mondiale interrompe

BSF INTCON, 5; consentire TMR0 int

clrf TMR0; chiaro timer

clrwdt; perché questo è necessario?
fatelo ..

movlw b'11011000 '; istituito timer.
prescaler (bit3) aggirato

opzione per inviare w opzione.
generare allarme.

clrf TMR0; inizio alla rovescia

retlw 0

;--------

; Prova per indice di rotazione e conservare nel periodo period_dup

;--------

Check_index movf PORTA, w; ottenere il porto di uno Stato

xorwf bandiere, w; confronta con stato salvato

andlw b'00010000 '; solo interessati a 4 bit

btfsc STATUS, Z; prova di bordo

retlw 0; non un vantaggio, come ultimo

xorwf bandiere, f; salvare per la prossima volta

btfsc bandiere, 4; prova di caduta bordo

retlw 0; deve essere stato un aumento del margine

movf period_count, w; fare una copia di lavoro

movwf period_dup; chiamato periodo dup

clrf period_count; un nuovo inizio per la prossima rotazione

clrf digit_index; impostato per la prima cifra

clrf dot_index; prima colonna

; Calcolare un periodo che non dither o jitter

; Periodo non verrà modificato, salvo nuovo periodo è molto diverso

movf period_calc, w

subwf period_dup, w; trovare differenza

btfss STATUS, C; portare flag non significa prendere in prestito

goto Calc_period_neg; deve essere altro modo

sublw 2; deviazione ammissibile = 3

btfss STATUS, C; prestito non skip

incf period_calc; nuovo valore molto più grande di calc

retlw 0

Calc_period_neg addlw 2; deviazione ammissibile = 3

btfss STATUS, C; portare sarà skip

decf period_calc; non si intende procedere deve essere cambiato

retlw 0

;--------

; Cambiamento del modello basato su LED di stato digit_index e dot_index

;--------

Display_now movlw 0x05

xorwf dot_index, w; di prova per la fine di cifre

movlw 0xFF; colonna modello, per il bianco

btfsc STATUS, Z

goto D_lookup_3; ha bisogno di una prova in bianco

bcf STATUS, C; portare davanti ad un chiaro ruotare

rlf digit_index, w; doppia l'indice perché ogni

addwf PCL, f; prende due istruzioni

D_10hr swapf ora, w

goto D_lookup; ciò che una grande corsa di potere

D_1hr movf ora, w; mi sento quando si modificano

goto D_lookup; il programma counter

D_colon movlw 0x0A

goto D_lookup

D_10min swapf minuti, w

goto D_lookup

D_1min movf minuti, w

goto D_lookup

D_nothing retlw 0

D_lookup andlw b'00001111 '; spogliano hi bit

movwf zero; tale da moltiplicare per 5 la ricerca

addwf zero, f; tabella posizione di base

addwf zero, f; è questa truffa?

addwf zero, f, penso di no.

addwf zero, f; penso che sia la conservazione di energia!

btfss STATUS, Z; test per zero

goto D_lookup_2, non uno zero

movf digit_index, f; questo è solo per testare / set bandiera

movlw 0xFF; questo fa un modello in bianco LED

btfsc STATUS, Z; prova se si tratta di 10 ore cifre

goto D_lookup_3; è uno zero iniziale

D_lookup_2 movf dot_index, w; ottenere colonna

addwf zero, w; aggiungere a cifre di base

chiamata Char_tbl; ottenere il punto del modello di questa colonna

D_lookup_3 movwf PORTB; inviare al LED

bcf STATUS, C; chiare prima di procedere bandiera ruotare

rrf period_calc, w; periodo / 2 utilizzati per dot clock

addlw 0xF4; sottrarre 12 per compensare generali

Ritardo di chiamata; larghezza di cifre con questo ritardo

incf dot_index, f; incremento per i prossimi colonna

movlw 0x06; 6 colonne è una cifra più spazio

xorwf dot_index, w; cifra successiva prova

btfss STATUS, Z

retlw 0; non una nuova cifra

clrf dot_index; nuove cifre tempo

incf digit_index, f

retlw 0; Display_now fatto.

;--------

; Un breve lasso di tempo di routine

;--------

Ritardo movwf barrare

Delay_loop decfsz barrare, f

goto Delay_loop; w non sia danneggiato, quindi può Ritardo

ritorno; essere ricordato senza ricarico

;--------

; Prova tasto per regolare e di guardia, se necessario,

;--------

Check_keys movf PORTA, w; ottenere porta "a"

xorwf chiavi, w; confrontare con le precedenti

andlw b'00000111 '; preoccuparsi solo pulsante pin

btfsc STATUS, Z; zero impostato = nessun pulsante

retlw 0; ritorno

xorwf chiavi, f; negozio valore chiave

movlw 0x64; abbastanza lungo ritardo

movwf zero; prevenire chiave rimbalzi

Key_delay movlw 0xFF

Scadenza bando

decfsz zero

goto Key_delay

btfss tasti, 2; prova "minuto" pulsante

goto Inc_mins

btfss tasti, 1; prova "decine" pulsante

goto Inc_tens

btfss chiavi, 0; prova "ora" pulsante

goto Inc_hours

retlw 0; deve essere un problema.
yeah, a destra!

;--------

; Incremento dieci minuti

;--------

Inc_tens movlw 0x0A

movwf zero; zero ha dieci

Inc_tens_loop chiamata Inc_mins

decfsz zero

goto Inc_tens_loop; aggiunto un altro minuto

retlw 0

;--------

; Incremento uno ora

;--------

Inc_hours movlw 0x12

xorwf ora, w

btfsc STATUS, Z

goto Inc_hours_12

movlw 0x07; questa parte diventa un po 'sciatto

addwf ora, w

movlw 0x07

btfss STATUS, DC

movlw 1

addwf ora, f

retlw 0

Inc_hours_12 movlw 0x01

movwf ore

retlw 0

;--------

; Incremento del tempo sulla base di bandiere, 1 come inviato da interrompere routine

; Inc_mins loop utilizzato anche dal tempo di fissazione di routine

;--------

Keep_time btfss bandiere, 1; la bandiera minuti

retlw 0; questa volta non

bcf bandiere, 1; chiaro il minuto di bandiera

Inc_mins movlw 0x07; inizio crescente tempo

addwf minuti, w, aggiungere 7 minuti in w

btfsc STATUS, DC; ha causare l'aggiunta di 7 cifre procedere?

goto Sixty_mins, quindi prova per un'ora cambiamento

incf minuti, altrimenti aggiungere 1 reale

retlw 0; e tornare

Sixty_mins movwf minuti; salvare il minuto

movlw 0x60; prova per 60

xorwf minuti, w, sono a 60 minuti?

btfss STATUS, Z

retlw 0; no?
torna indietro

clrf minuto, altrimenti zero minuti

goto Inc_hours; incremento e ora

;--------

; Fine della subroutine

; Program starts here

;--------

Inizio chiamata Ram_init; impostare le variabili per valori di nice

chiamata Port_init; impostare porto direzioni

chiamata Timer_init; inizio interrompere il timer in base

;--------

; Fatto l'inizializzazione, avviare il ciclo infinito.

;--------

;

Circle; iniziare il grande anello

;

;--------

; Individuare caduta sul bordo PORTA, 4 per determinare indice di rotazione

; Calcolare periodo di rotazione e conservare in period_dup

; Confronta con periodo di lavoro (period_calc) e regolare se modo diverso

;--------

chiamata Check_index

;--------

; Controllare stato di visualizzazione e modifica, se necessario,

;--------

chiamata Display_now

;--------

; Controllo della tastiera e regolare il tempo

;--------

chiamata Check_keys

;--------

; Verificare minuti bandiera incremento e un minuto di tempo, se ha superato

;--------

chiamata Keep_time

;--------

; Colleghi, questo è un orologio, tenerlo a rotazione

;--------

vai Circolo; hai sentito l'uomo, andare avanti!

fine

;--------

; La fine del file

;--------
 
firesky1982 ha scritto:Codice:

;--------

; MclockT3.asm - modificato per 180 gradi pennello a motore

; OK per aggiungere 8a LED - chiuse nella tabella 2 e in altri luoghi

; Timer utilizzati per garantire l'avvio in tutte le powerups

"Il Propeller" meccanicamente scandita LED orologio

; Bob Blick 12 febbraio 1997

; Sotto licenza termini della GNU General Public License, www.gnu.org

; Non viene data alcuna garanzia espressa o implicita

; Bob Blick 18 febbraio 2002

;--------

p = elenco 16F84

radix hex

comprendono "p16F84.inc"

;--------

; Ricordatevi di impostare le opzioni a tempo blastica: OSC = regolare xtal, WDT = ON

; Sulla base di tutti i tempi a 4 MHz cristallo

;--------

; Sono questi, equivale già nel include file?
someday I'll look.

;--------

w equ 0

f equ 1

;--------

; Avvio di RAM disponibile.

;--------

cblock 0x0C

safe_w; non temp, utilizzato da interrompere svc

safe_s; non temp, utilizzato da interrompere svc

period_count; incrementato ogni interrompere

period_dup; period_count copia di sicurezza da interrompere

period_calc; stabile dopo periodo di isteresi calc.

bandiere; b2 = int b1 = minuti b4 = bordo

dot_index; colonna che viene visualizzato

digit_index; cifre che viene visualizzato

ora, in formato di visualizzazione, non hex (01-12)

minuti; da 00 a 59

bigtick_dbl; incrementato ogni interrompere

bigtick_hi

bigtick_lo

chiavi; valore chiave

zero; valore zero

barrare la casella; utilizzato da ritardo

endc

;--------

; Avvio di ROM

;--------

org 0x00; Avvio di codice spazio

goto Start

;--------

; INTERRUPT SERVICE ROUTINE

;--------

org 0x04; interrompere vettore

Intsvc movwf safe_w; salvare w

swapf STATUS, w; swap stato, w

movwf safe_s; salvare lo stato (morso di swap, si ricordi)

;--------

; Fatto di risparmio, ora iniziare a lavorare

; Incremento periodo contare

;--------

incf period_count, f

btfsc STATUS, Z; zero significa impostare overflow

decf period_count, f

; Chiaro timer per assicurare l'avvio

clrwdt

; 234375 interrompe ogni minuto.
Incremento della bigtick ogni volta.

incf bigtick_lo, f

btfsc STATUS, Z

incf bigtick_hi, f

btfsc STATUS, Z

incfsz bigtick_dbl, f

goto Bigtick_out

;--------

; Qui?
bigtick ha laminati a zero e un minuto è passato.

; Ricaricare bigtick e impostare una bandiera per contrastare le principali

;--------

movlw 0xFC; 234375 = 0x039387

movwf bigtick_dbl; 0 - 0x039387 = 0xFC6C79

movlw 0x6C

movwf bigtick_hi

movlw 0x79

movwf bigtick_lo

BSF bandiere, 1; notificare Keep_time

Bigtick_out

;--------

, Fatto di lavoro, avviare il ripristino

;--------

swapf safe_s, w; fetch status, reswap stuzzichini

movwf STATUS; ripristinare lo stato

swapf safe_w, f; swap stuzzichini in preparazione

swapf safe_w, w; per il restauro di swap w

bcf INTCON, 2; chiaro bandiera interrompere prima del rimpatrio

retfie; ritorno da interrompere

;--------

; CARATTERE tabella di ricerca

; Ignorare elevato bit.
impostare = LED spento, chiaro = LED, bit0 = LED inferiore, bit6 = LED superiore

;--------

Char_tbl

addwf PCL, f

dt 0xC1, 0xBE, 0xBE, 0xBE, 0xC1; "O"

dt 0xFF, 0xDE, 0x80, 0xFE, 0xFF; "1"

dt 0xDE, 0xBC, 0xBA, 0xB6, 0xCE; "2"

dt 0xBD, 0xBE, 0xAE, 0x96, 0xB9; "3"

dt 0xF3, 0xEB, 0xDB, 0x80, 0xFB; "4"

dt 0x8D, 0xAE, 0xAE, 0xAE, 0xB1; "5"

dt 0xE1, 0xD6, 0xB6, 0xB6, 0xF9; "6"

dt 0xBF, 0xB8, 0xB7, 0xAF, 0x9F; "7"

dt 0xC9, 0xB6, 0xB6, 0xB6, 0xC9; "8"

dt 0xCF, 0xB6, 0xB6, 0xB5, 0xC3, "9"

dt 0xFF, 0xC9, 0xC9, 0xFF, 0xFF; ":"

Char_tbl_end

;--------

; Subroutine PARTIRE QUI

;--------

; Chiaro importante bit di ram

;--------

Ram_init movlw 0x07

movwf chiavi

movlw 0x12; perché orologi sempre

movwf ora, alle 12.00?

clrf minuti

clrf dot_index

clrf digit_index

movlw 0xFC

movwf bigtick_dbl

retlw 0

;--------

; Pin inutilizzati Sono impostazione per essere uscite

;--------

Port_init movlw 0x00; tutto l'output, b7 = inutilizzati

BSF STATUS, RP0; selezionare memoria bank1

movwf TRISB; portB come produzione

bcf STATUS, RP0; tornare alla bank0movlw b'00010111 '; porta uno ha 5 pin.
Ho bisogno di 4 ingressi

; b0 = minuti, b1 = 10mins, b2 = ore

; b3 = inutilizzati, b4 = indice di rotazione

tris PORTA; sulla porta uno

retlw 0

;--------

; Ottenere timer in corso a base di interrupt

;--------

Timer_init bcf INTCON, 2; chiaro TMR0 int bandiera

BSF INTCON, 7; consentire mondiale interrompe

BSF INTCON, 5; consentire TMR0 int

clrf TMR0; chiaro timer

clrwdt; perché questo è necessario?
fatelo ..

movlw b'11011000 '; istituito timer.
prescaler (bit3) aggirato

opzione per inviare w opzione.
generare allarme.

clrf TMR0; inizio alla rovescia

retlw 0

;--------

; Prova per indice di rotazione e conservare nel periodo period_dup

;--------

Check_index movf PORTA, w; ottenere il porto di uno Stato

xorwf bandiere, w; confronta con stato salvato

andlw b'00010000 '; solo interessati a 4 bit

btfsc STATUS, Z; prova di bordo

retlw 0; non un vantaggio, come ultimo

xorwf bandiere, f; salvare per la prossima volta

btfsc bandiere, 4; prova di caduta bordo

retlw 0; deve essere stato un aumento del margine

movf period_count, w; fare una copia di lavoro

movwf period_dup; chiamato periodo dup

clrf period_count; un nuovo inizio per la prossima rotazione

clrf digit_index; impostato per la prima cifra

clrf dot_index; prima colonna

; Calcolare un periodo che non dither o jitter

; Periodo non verrà modificato, salvo nuovo periodo è molto diverso

movf period_calc, w

subwf period_dup, w; trovare differenza

btfss STATUS, C; portare flag non significa prendere in prestito

goto Calc_period_neg; deve essere altro modo

sublw 2; deviazione ammissibile = 3

btfss STATUS, C; prestito non skip

incf period_calc; nuovo valore molto più grande di calc

retlw 0

Calc_period_neg addlw 2; deviazione ammissibile = 3

btfss STATUS, C; portare sarà skip

decf period_calc; non si intende procedere deve essere cambiato

retlw 0

;--------

; Cambiamento del modello basato su LED di stato digit_index e dot_index

;--------

Display_now movlw 0x05

xorwf dot_index, w; di prova per la fine di cifre

movlw 0xFF; colonna modello, per il bianco

btfsc STATUS, Z

goto D_lookup_3; ha bisogno di una prova in bianco

bcf STATUS, C; portare davanti ad un chiaro ruotare

rlf digit_index, w; doppia l'indice perché ogni

addwf PCL, f; prende due istruzioni

D_10hr swapf ora, w

goto D_lookup; ciò che una grande corsa di potere

D_1hr movf ora, w; mi sento quando si modificano

goto D_lookup; il programma counter

D_colon movlw 0x0A

goto D_lookup

D_10min swapf minuti, w

goto D_lookup

D_1min movf minuti, w

goto D_lookup

D_nothing retlw 0

D_lookup andlw b'00001111 '; spogliano hi bit

movwf zero; tale da moltiplicare per 5 la ricerca

addwf zero, f; tabella posizione di base

addwf zero, f; è questa truffa?

addwf zero, f, penso di no.

addwf zero, f; penso che sia la conservazione di energia!

btfss STATUS, Z; test per zero

goto D_lookup_2, non uno zero

movf digit_index, f; questo è solo per testare / set bandiera

movlw 0xFF; questo fa un modello in bianco LED

btfsc STATUS, Z; prova se si tratta di 10 ore cifre

goto D_lookup_3; è uno zero iniziale

D_lookup_2 movf dot_index, w; ottenere colonna

addwf zero, w; aggiungere a cifre di base

chiamata Char_tbl; ottenere il punto del modello di questa colonna

D_lookup_3 movwf PORTB; inviare al LED

bcf STATUS, C; chiare prima di procedere bandiera ruotare

rrf period_calc, w; periodo / 2 utilizzati per dot clock

addlw 0xF4; sottrarre 12 per compensare generali

Ritardo di chiamata; larghezza di cifre con questo ritardo

incf dot_index, f; incremento per i prossimi colonna

movlw 0x06; 6 colonne è una cifra più spazio

xorwf dot_index, w; cifra successiva prova

btfss STATUS, Z

retlw 0; non una nuova cifra

clrf dot_index; nuove cifre tempo

incf digit_index, f

retlw 0; Display_now fatto.

;--------

; Un breve lasso di tempo di routine

;--------

Ritardo movwf barrare

Delay_loop decfsz barrare, f

goto Delay_loop; w non sia danneggiato, quindi può Ritardo

ritorno; essere ricordato senza ricarico

;--------

; Prova tasto per regolare e di guardia, se necessario,

;--------

Check_keys movf PORTA, w; ottenere porta "a"

xorwf chiavi, w; confrontare con le precedenti

andlw b'00000111 '; preoccuparsi solo pulsante pin

btfsc STATUS, Z; zero impostato = nessun pulsante

retlw 0; ritorno

xorwf chiavi, f; negozio valore chiave

movlw 0x64; abbastanza lungo ritardo

movwf zero; prevenire chiave rimbalzi

Key_delay movlw 0xFF

Scadenza bando

decfsz zero

goto Key_delay

btfss tasti, 2; prova "minuto" pulsante

goto Inc_mins

btfss tasti, 1; prova "decine" pulsante

goto Inc_tens

btfss chiavi, 0; prova "ora" pulsante

goto Inc_hours

retlw 0; deve essere un problema.
yeah, a destra!

;--------

; Incremento dieci minuti

;--------

Inc_tens movlw 0x0A

movwf zero; zero ha dieci

Inc_tens_loop chiamata Inc_mins

decfsz zero

goto Inc_tens_loop; aggiunto un altro minuto

retlw 0

;--------

; Incremento uno ora

;--------

Inc_hours movlw 0x12

xorwf ora, w

btfsc STATUS, Z

goto Inc_hours_12

movlw 0x07; questa parte diventa un po 'sciatto

addwf ora, w

movlw 0x07

btfss STATUS, DC

movlw 1

addwf ora, f

retlw 0

Inc_hours_12 movlw 0x01

movwf ore

retlw 0

;--------

; Incremento del tempo sulla base di bandiere, 1 come inviato da interrompere routine

; Inc_mins loop utilizzato anche dal tempo di fissazione di routine

;--------

Keep_time btfss bandiere, 1; la bandiera minuti

retlw 0; questa volta non

bcf bandiere, 1; chiaro il minuto di bandiera

Inc_mins movlw 0x07; inizio crescente tempo

addwf minuti, w, aggiungere 7 minuti in w

btfsc STATUS, DC; ha causare l'aggiunta di 7 cifre procedere?

goto Sixty_mins, quindi prova per un'ora cambiamento

incf minuti, altrimenti aggiungere 1 reale

retlw 0; e tornare

Sixty_mins movwf minuti; salvare il minuto

movlw 0x60; prova per 60

xorwf minuti, w, sono a 60 minuti?

btfss STATUS, Z

retlw 0; no?
torna indietro

clrf minuto, altrimenti zero minuti

goto Inc_hours; incremento e ora

;--------

; Fine della subroutine

; Program starts here

;--------

Inizio chiamata Ram_init; impostare le variabili per valori di nice

chiamata Port_init; impostare porto direzioni

chiamata Timer_init; inizio interrompere il timer in base

;--------

; Fatto l'inizializzazione, avviare il ciclo infinito.

;--------

;

Circle; iniziare il grande anello

;

;--------

; Individuare caduta sul bordo PORTA, 4 per determinare indice di rotazione

; Calcolare periodo di rotazione e conservare in period_dup

; Confronta con periodo di lavoro (period_calc) e regolare se modo diverso

;--------

chiamata Check_index

;--------

; Controllare stato di visualizzazione e modifica, se necessario,

;--------

chiamata Display_now

;--------

; Controllo della tastiera e regolare il tempo

;--------

chiamata Check_keys

;--------

; Verificare minuti bandiera incremento e un minuto di tempo, se ha superato

;--------

chiamata Keep_time

;--------

; Colleghi, questo è un orologio, tenerlo a rotazione

;--------

vai Circolo; hai sentito l'uomo, andare avanti!

fine

;--------

; La fine del file

;--------
 

Welcome to EDABoard.com

Sponsor

Back
Top