Epävakaat timer1/interrupt ..

Z

zanor

Guest
Hei!

Olen käynnissä tehdä oman rullata johti sign.Almoast kaikki toimii sakkoa nyt.Olen perustanut timer1 (btw, pic16f648a) ja 1:8 prescale, ja keskeyttää on ylivuoto.Tämä toimii hyvin, mutta joskus se vaan toteaa, että se ei keskeytä mitään lisää.

Merkki rullaa, mutta sitten yhtäkkiä se pysähtyy (satunnaisesti asema merkkijono) ja pysyy siellä.Tiedän muun PIC-ohjelma jatkaa toimintaansa, koska voin käyttää 5 riviä ja vain 1 on pala kerrallaan.

Minulla on myös joitakin taulukoita minun koodi, että minun täytyy muuttaa PCLATCH ennen kuin hypätä, se voisi olla jotain mieltä?

Please help me!

Olen Jätä koko koodi, Se on vähän sekainen

<img src="http://www.edaboard.com/images/smiles/icon_razz.gif" alt="Razz" border="0" />Olen yrittänyt toisen sirun niin thats not foult ...

Koodi:__config 0x3F50

LIST P = PIC16F648A

ovat <P16F648A.INC>; Muuttujat ja vakiot

cblock 0x20; alusta yleiskäyttöön tarkoitettujen rekisterien

määrä, joita käytetään välittömästi rutiini

count1, joita käytetään välittömästi rutiini

LASKE.A, joita käytetään välittömästi rutiini

countb, joita käytetään välittömästi rutiini

SENDME

CR; riville

LOOPC; Loop counter

LOOPD; Loop tiedot

STRING_I; String hakemisto

CHAR_I; Char hakemisto

C_FONT Current font

O_FONT; Offset

P_FONT Page

Temp

temp2

tmp_status; Käytetään tallentaa info aikana keskeyttää

tmp_w; Käytetään tallentaa info aikana keskeyttää

endcSCK EQU 0x06; HC595 Serial Clock

SI EQU 0x05; HC595 Serial Data

RCK EQU 0x07; HC595 Output kellon, Nieriä ja string osoite

Merkkijonotaulukkoon EQU 0x500

FontTable EQU 0xA00ORG 000h, palauttaa ohjaa ohjelman tähän kohtaanGOTO PRG_STARTORG 004H, keskeyttää ohjaa ohjelman täältä

Movwf tmp_w

MOVFW TILA

Movwf tmp_statusBiologinen kertymistekijä BCF PIR1, TMR1IFINCF CHAR_IMOVFW CHAR_I

SUBLW 0x06

BTFSS STATUS, Z

GOTO DoneMOVLW 0x01

Movwf CHAR_I

INCF STRING_Itehty

MOVFW tmp_status

Movwf STATUS

MOVFW tmp_w

RETFIE
PRG_START

; Alusta sataman

BSF STATUS, RP0; Bank1

MOVLW 0x02; Set RX (RB1) syöttää

Movwf TRISB

MOVLW 0x00

Movwf Trisa, Aseta nopeus 4MHz

MOVLW 0x08

Movwf PCON; USART alustaa

MOVLW 0x24; lähetin: RS232

Movwf TXSTA;

Biologinen kertymistekijä BCF STATUS, RP0; Bank 0

MOVLW 0x90; Receiver: RS232

Movwf RCSTA;; USART Siirtonopeus säätää

BSF STATUS, RP0; Bank1

MOVLW 0x19; Aseta Siirtonopeus 9,6000 @ 4 MHz

Movwf SPBRG

Biologinen kertymistekijä BCF STATUS, RP0; Bank 0; Näet Timer1

MOVLW 0x31;

Movwf T1CON; Salli keskeytykset

BSF INTCON, GIE, maailmanlaajuinen keskeyttää, jotta

BSF INTCON, PEIE, jotta reuna interrrupt

BSF STATUS, RP0; Bank1

BSF PIE1, TMR1IE, jotta timer1 keskeyttää

Biologinen kertymistekijä BCF STATUS, RP0; Bank0
MOVLW 0x05; alkaa klo alariville

Movwf CR, työ-ja ylöspäin.MOVLW 0x01, 1 - 5, 1 = Space

Movwf CHAR_I

MOVLW 0x00

Movwf STRING_ITÄRKEIMMISTÄ

MOVLW 0x08; Loop trough 8 bittiä

Movwf LOOPCBSF PORTB, SCK; Lähetä alku

Biologinen kertymistekijä BCF PORTB, SCK; kellon pulssiaCLRF LOOPD; aloittaa alustaMOVF STRING_I, F, Katso, jos se

BTFSC STATUS, Z, on ensimmäinen char

GOTO täällä, Yes?
jätä tämä osaDECF STRING_I, FCALL get_char

CALL get_font; Get rivin tietojaMovwf LOOPDINCF STRING_I, FTÄSTÄCALL get_char

CALL get_font; Get rivin tietojaMovwf temp2

RLF temp2, F

RLF temp2, F

RLF temp2, FMOVFW CHAR_I

Movwf TempLOOP1

RLF temp2, F

RLF LOOPD, FDECFSZ Temp, F

GOTO LOOP1TILAAJAYHTEYKSIENBCF PORTB, SI, Vapaa vähän lähettää

RLF LOOPD, F, Kierto niin saamme vähän

; Haluamme ottaa Carrey

BTFSC STATUS, C; Saimmeko 1?

BSF PORTB, SI, kyllä sitten asettaa vähän lähettämäänBSF PORTB, SCK ja lähetä

Biologinen kertymistekijä BCF PORTB, SCKDECFSZ LOOPC, F, Otto silmukan laskuri,

GOTO LOOP; me valmis kiehkura?MOVLW 0x00

Movwf PORTABSF PORTB, RCK, kyllä, niin näyttö

Biologinen kertymistekijä BCF PORTB, RCK, linja lähettiMOVFW CR; Siirry nykyisen rivin W

CALL tbl_row; Get PORTA tavu

Movwf PORTA; Näytä riville; CALL Delay1DECFSZ CR, F

GOTO MAIN, ei viimeisen rivin näyttö Seuraava

MOVLW 0x05; viimeisen rivin alkaa

Movwf CR; alariville uudelleen.GOTO MAINget_char

MOVLW HIGH tbl_string

Movwf PCLATHMOVFW STRING_I

CALL tbl_stringMovwf Temp

MOVLW HIGH MAIN

Movwf PCLATHMOVFW tempPALAUTTAMISTAget_font

Movwf C_FONTMOVLW HIGH tbl_font; Get aloitussivu

Movwf P_FONT; osoite.MOVLW LOW tbl_font; Get offset

ADDWF C_FONT, W

BTFSC STATUS, C

INCF P_FONT, FADDWF C_FONT, W

BTFSC STATUS, C

INCF P_FONT, FADDWF C_FONT, W

BTFSC STATUS, C

INCF P_FONT, FADDWF C_FONT, W

BTFSC STATUS, C

INCF P_FONT, FADDWF C_FONT, W

BTFSC STATUS, C

INCF P_FONT, FADDWF CR, W

Movwf O_FONTMOVFW P_FONT

Movwf PCLATHMOVFW O_FONT

CALL tbl_fontMovwf Temp

MOVLW HIGH MAIN

Movwf PCLATH

MOVFW tempPALAUTTAMISTAtbl_row

addwf PCL, F

retlw 0x00; Dummy merkintä .....
(PCL 0)

retlw 0x01, rivi 1 (PORTA tavu)

retlw 0x02; Row 2

retlw 0x04; ...

retlw 0x08

retlw 0x80tbl_data

addwf PCL, F

retlw 0x00; Dummy merkintä .....
(PCL 0)

retlw 0xDB; Rivi 1 tiedot

retlw 0xAA; Row 2

retlw 0x81; ...

retlw 0x0F

retlw 0xFF, Delay rutiinit (Ripped muodostavat noin sivusto)Long_Delay

movlw d'50 '; viive 5 sekuntia

call Delay100W

tuotonDelay100W movwf count; viive W x 100ms

D2 soittaa Delay100 suurin sallittu viive 25,5 sekuntia

decfsz määrä, f

goto d2

tuotonDelay255 movlw 0xff; viive 255 mS

goto d0

Delay100 movlw d'100 '; viive 100ms

goto d0

Delay50 movlw d'50 '; viive 50ms

goto d0

Delay20 movlw d'20 '; viive 20ms

goto d0

Delay10 movlw d'10 '; viive 10 mS

goto d0

Delay1 movlw d'1 '; viive 1ms

goto d0

Delay5 movlw 0x05; viive 5,000 ms (4 MHz Clock)

d0 movwf count1

d1 movlw 0xE7

movwf LASKE.A

movlw 0x04

movwf countb

Delay_0 decfsz LASKE.A, f

goto 2 dollaria

decfsz countb, f

goto Delay_0decfsz count1, f

goto d1

tuoton
ORG merkkijonotaulukkoon

tbl_stringADDWF PCL, Fdt "Stian AAAABBBBCCCCAAAABBBBCCCC"

dt "B B B B B"

dt "D D D D D"ORG FontTable

tbl_fontMovwf PCLdt 0x00, 0x00, 0x00, 0x00, 0x00, 0, Dummy merkintä

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

dt 0x00, 0x00, 0x00, 0x00, 0x00

 
Hi zanor
Kuulostaa sinulla on ongelmia PCLATH.Jos et tallenna PCLATH aikana ISR mitään GOTO / Puhelu ISR voi vektori odottamattoman osoitteeseen.

Kokeile seuraavia keskeytys alku ja loppu varmistamaan oikean yhteydessä säästää.
Koodi:

IntVec movwf W_TEMP, std yhteydessä säästää

swapf STATUS, W; ....

movwf STATUS_TEMP; ....

movf PCLATH, W; ....

movwf PCLATH_TEMP; ....

clrf PCLATH; page0

clrf asema; bank0

;

;

; ******** Keskeyttää rutiini tässä ************

;

;

ISRdone

movf PCLATH_TEMP, W; std yhteydessä palauttaa

movwf PCLATH; ....

swapf STATUS_TEMP, W; ....

movwf STATUS; ....

swapf W_TEMP, F; ....

swapf W_TEMP, W; ....

retfie

;
 
yleisnero kirjoitti:

Hi zanor

Kokeile seuraavia keskeytys alku ja loppu varmistamaan oikean yhteydessä säästää.Koodi:

IntVec movwf W_TEMP, std yhteydessä säästää

swapf STATUS, W; ....

movwf STATUS_TEMP; ....

movf PCLATH, W; ....

movwf PCLATH_TEMP; ....

clrf PCLATH; page0

clrf asema; bank0

;

;

; ******** Keskeyttää rutiini tässä ************

;

;

ISRdone

movf PCLATH_TEMP, W; std yhteydessä palauttaa

movwf PCLATH; ....

swapf STATUS_TEMP, W; ....

movwf STATUS; ....

swapf W_TEMP, F; ....

swapf W_TEMP, W; ....

retfie

;
 

Welcome to EDABoard.com

Sponsor

Back
Top