Resultat display

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Började kolla koden ifall det var något fel och det genom att skicka tillbaka det som kommer in i via RCREG.

Då vissade sig att något ligger och triggar ISR hela tiden, för det skickades data till pc´n hela tiden. Från början 00 eftersom inget kommit in och sen skicka man ex. 31 då skickade hela tiden.

Så jag la in koden som kollar om flaggorna för PIR1,TMR2IF eller INTCON,T0IF, om det var orsaken men det var det inte.
Så jag la in förljande kod för att den bara skall svara på RCIF.

EDIT: då hoppade den in i ISR när man skickade data till RCREG

Kod: Markera allt

rcif_on
	banksel	PIR1
	btfss	PIR1,RCIF	; Is it RCIF?
	goto	done		; Jump if not
	goto	datain
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jha, man MÅSTE alltså rensa RCIF-flaggan ändå. Bra då, då vet du, det är bara att köra på då.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Njaaa mer tvärtom.
Provade det med att sätta RCIF=0 efter läsning men det fungerade inte, så det är något annat som triggar ISR´n.

Det jag gjorde vart att kolla om RCIF var satt, då gick den igenom ISR koden. annars går ur ISR.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Om ditt enda interrupt som är enablad är just mottagning i UART är det väl bara att nolla hela PIR1.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Notera också att du *enbart* ska ha RCIE = "1".
Alla andra xxIE (utom GIE och PEIE så klart!) ska
vara = "0". D ska du inte kunna få interrupt från
någon annan källa...
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Okej hittade felet och den var satt för att kunna skicka txreg.
"The TXIF transmitter interrupt flag is set when the TXEN enable bit is set."
Så den får man sätta 1 i interupten om man skall skicka data via usart, Men nu är ju inte det aktuellt i det här projektet.
Det enda var att jag använde den för funktions test då jag inte har något att skicka till ännu.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Så då har jag lusat igenom koden och tror allt är med, om ni hittar något skrik till.
http://rodel.se/resultat_display.asm

Så då till nästa kapitel analysera datat i bufferten för att se om det skall sparas eller ej.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> "The TXIF transmitter interrupt flag is set when the TXEN enable bit is set."

Japp, så där står det i den gråa rutan på sidan 151 i databladet.
MEN DET ÄR FEL !!!

Lite längre ner på samma sida står den korrekta funktionen :

"The TXIF interrupt can be enabled by setting the TXIE
interrupt enable bit of the PIE1 register. However, the
TXIF flag bit will be set whenever the TXREG is empty,
regardless of the state of TXIE enable bit."

> Så den får man sätta 1 i interupten om man skall skicka data via usart,

Nej, inte generellt. *Bara* om du vill använda *interrupt* för att signalera
att TXREG är tomt och redo för ett nytt tecken. I ditt fall så pollade (testade)
du ju TXIF flaggan själv i koden och då kan (eller *ska*) TXIE alltid vara "0"!
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Tur att man har er här på EF, annars hade man varit flintskallig nu.

Min version av MPLAB, lever sitt egna liv.
Om man ändrar en rad och sen Build All och sen går in i koden igen så har den återgått till det som stod innan.
Har hänt nu ett gäng gånger, så nu får man dubbelkolla koden hela tiden.
Den får vara så, så länge.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Version av MPLAB ?
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

MPLAB 8.0
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Håller på och testar nu om datat man skickar in via RS232, spara i RX_buffern.
Men lyckas inte läsa ut något data, så skriver man på följande sätt för att läsa data ur rx_buffern?

movf rx_buffer, w
movwf test1
movf rx_buffer+1, w
movwf test2
movf rx_buffer+2, w
movwf test3
o.s.v.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ja.
Vad händer ?
Hur vet du att det inte fungerar ?
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Har hunnit testat en del sen jag postade inlägget.
Jag skickar datat från ex. Rx_buffer till digit_0, som i sin tur skickar det till digit0 på en DLR3416.
Det kommer inte upp något på displayen
Men om man ändrar och skickar in en t.ex en siffra i minnet på digit_0, så kommer det upp på displayen så det funkar.
Data kommer in det provade jag igår, med att skicka tillbaka det.
Så Rx_buffern är tämligen misstänkt.

Skall kolla igenom koden i ISR, nu för att se att det inte är något skumt där.

Har lagt upp koden, där jag är nu på länken nedan.
OBS! Den är lite rörig just nu då det har testats lite fram och tillbaka.
http://rodel.se/resultat_display.asm
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, har inte kollat alla detaljer, men ett par småsaker...

> movwf RX_DATA
> movf RX_DATA, w

Andra kommandot är helt onödigt (men det gör ingen skada heller)...

Som sagt, ser inget direkt konstigt.
Kan du posta MAP'en så att vi ser var RES har allokerat variablerna ?

Förresten, du får inget felmedelande vid "build" ?
Man borde inte kunna ha mer än 16 bytes i UDATA_SHR (vilket ju
allokerar minne i arean h'70' - h'7F').
Skriv svar