Egen bygg display har uppdaterings problem (PIC)
Re: Egen bygg display har uppdaterings problem (PIC)
Ja, men inte med BANKSEL, utan med BANKISEL...
Re: Egen bygg display har uppdaterings problem (PIC)
Finns det ett enklare sätt att välja vilken buffer man skall läsa ur, än att ha två likadana kodsnuttar och den enda skillnaden de är från vilken buffer läsning sker t.ex.
eller
Kod: Markera allt
Chk_set_buffer
movf set_buffer, w
sublw h'01' ; Om 01
btfsc STATUS, Z ; D.v.s skippa nästa inst om Z = 1
goto Read_buffer_1 ; Gå till Read_buffer_1 om 01.
goto Read_buffer_2 ; Gå till Read_buffer_2 om 02.
Kod: Markera allt
Read_buffer_1
B1_index_6 ; Index pekare =36 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto B1_index_7 ; Nej, gå till Index_7
movf buffer_1+7, w ; Kopiera buffer_1+7 till w
movwf digit_2 ; Spara w i Digit_1
incf buffer_1, f ; Addera buffer_1 med 1
B1_Index_7
Kod: Markera allt
Read_buffer_2
B2_index_6 ; Index pekare =36 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto B2_index_7 ; Nej, gå till Index_7
movf buffer_2+7, w ; buffer_2+7 till w
movwf digit_2 ; Spara w i Digit_1
incf buffer_2, f ; Addera buffer_2 med 1
B2_index_7
Re: Egen bygg display har uppdaterings problem (PIC)
Tja, om du ska göra exakt samma sak mot buffrarna så är det kanske bara
koden där du *väljer* buffer (d.v.s laddar FSR) som behöver vara dubblerad.
Läsning och skrivningen från/till bufferten kan sedan använda samma kod
oavsett vilken buffert som FSR för tillfället pekar mot.
koden där du *väljer* buffer (d.v.s laddar FSR) som behöver vara dubblerad.
Läsning och skrivningen från/till bufferten kan sedan använda samma kod
oavsett vilken buffert som FSR för tillfället pekar mot.
Re: Egen bygg display har uppdaterings problem (PIC)
Kan man skriva så här då?
Ex.
Ex.
Kod: Markera allt
Movlw Buffer_1 ; kopiera värdet Buffer_1 till w
movwf FSR ; Spara w i pekaren till Buffer_1;
index_6 ; Index pekare =36 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto B1_index_7 ; Nej, gå till Index_7
movf INDF+7, w ; Kopiera INDF+7 till w
movwf digit_2 ; Spara w i Digit_1
incf INDF, f ; Addera INDF med 1
Index_7
Re: Egen bygg display har uppdaterings problem (PIC)
Fixa gärna din kod du klistrar in så att kommando, parametrar och kommentarer
"linar upp" lite snyggt. Det blir mycket trevligare att läsa.
Sen så förstår jag inte frågan. Visst kan man skriva så där, om det är det som
koden visar som man vill göra !? Vad betyder "Index pekare =36 ?" ??
"linar upp" lite snyggt. Det blir mycket trevligare att läsa.
Kod: Markera allt
Movlw Buffer_1 ; kopiera värdet Buffer_1 till w
movwf FSR ; Spara w i pekaren till Buffer_1;
bankisel Buffer_1 ; Se till att IRP pekar rätt.
index_6 ; Index pekare =36 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1,
; ...om Ind_check blir 0 hoppa över nästa.
goto B1_index_7 ; Nej, gå till Index_7
movf INDF+7, w ; Kopiera INDF+7 till w
movwf digit_2 ; Spara w i Digit_1
incf INDF, f ; Addera INDF med 1
Index_7
koden visar som man vill göra !? Vad betyder "Index pekare =36 ?" ??
Re: Egen bygg display har uppdaterings problem (PIC)
>Fixa gärna din kod du klistrar in så att kommando, parametrar och kommentarer "linar upp" lite snyggt. Det blir mycket >trevligare att läsa.
Lite konstigt när det ser bra ut i MPLAB, men hoppar runt lite när man klistrar in här. Skall fixa det till nästa kod inlägg.
>Sen så förstår jag inte frågan.
Frågan var: Finns det ett enklare sätt att välja vilken buffer man skall läsa ur, än att ha två likadana kodsnuttar och den enda skillnaden de är från vilken buffer läsning sker.
Jag förstår att det förvirrar lite då jag inte postade hela koden utan tog en del av den för att visa.
Så här är det att Index pekaren kommer i de sekvenser av data som klockan skickar ut t.ex. 1B 21 36 31 32
Index pekaren är alltid den som kommer efter 21 alltså i detta ex. 36 och pekar då på var man skall stoppa in nästa som är 31, sen ökas indexpekaren med 1 och nästa tecken 32 sparas då i index pekare 37.
Index pekaren är som följer.
Lite konstigt när det ser bra ut i MPLAB, men hoppar runt lite när man klistrar in här. Skall fixa det till nästa kod inlägg.
>Sen så förstår jag inte frågan.
Frågan var: Finns det ett enklare sätt att välja vilken buffer man skall läsa ur, än att ha två likadana kodsnuttar och den enda skillnaden de är från vilken buffer läsning sker.
Jag förstår att det förvirrar lite då jag inte postade hela koden utan tog en del av den för att visa.
Så här är det att Index pekaren kommer i de sekvenser av data som klockan skickar ut t.ex. 1B 21 36 31 32
Index pekaren är alltid den som kommer efter 21 alltså i detta ex. 36 och pekar då på var man skall stoppa in nästa som är 31, sen ökas indexpekaren med 1 och nästa tecken 32 sparas då i index pekare 37.
Index pekaren är som följer.
Kod: Markera allt
30 och 31 = Timmar
32 och 33 = Minuter
34 och 35 = Sekunder
36 och 37 = Tion och hundradelar
Re: Egen bygg display har uppdaterings problem (PIC)
OK. Jag är ändå inte med på vad du gör. Det skulle kunna tolkas
som att du har en lite egen kodsnutt för varje position i bufferten !?
Är det du visar där du skriver i bufferten eller där du läser och aggerar
på datat efter att ha fått en full buffert ?
Varför "INDF+7" i MOVF instruktionen ? Vad tror du att det gör ?
som att du har en lite egen kodsnutt för varje position i bufferten !?
Är det du visar där du skriver i bufferten eller där du läser och aggerar
på datat efter att ha fått en full buffert ?
Varför "INDF+7" i MOVF instruktionen ? Vad tror du att det gör ?
Re: Egen bygg display har uppdaterings problem (PIC)
Här är koden som analyserar datat som kommit in i en av buffrarna beroende på vilken som är satt.
Har inte hunnit testa koden.
>Varför "INDF+7" i MOVF instruktionen ? Vad tror du att det gör ?
Vill kopiera datat ur position 8 i buffern, för att lägga det till rätt siffra (digit_2)
Har inte hunnit testa koden.
>Varför "INDF+7" i MOVF instruktionen ? Vad tror du att det gör ?
Vill kopiera datat ur position 8 i buffern, för att lägga det till rätt siffra (digit_2)
Kod: Markera allt
Read_buffer
movf set_buffer, w ; Kopiera värdet i set_buffer till w
sublw h'01' ; Om 01 läs buffer_1
btfsc STATUS, Z ; D.v.s skippa nästa inst om Z = 1
goto Read_buffer_2 ; Gå till Read_buffer_2 om 01.
movlw Buffer_1 ; kopiera värdet Buffer_1 till w
movwf FSR ; Spara w i pekaren till Buffer_1;
Bankisel Buffer_1 ; Se till att IRP pekar på Buffer_1.
goto index ; Gå till Index
Read_buffer_2
movlw Buffer_2 ; kopiera värdet Buffer_1 till w
movwf FSR ; Spara w i pekaren till Buffer_1;
Bankisel Buffer_2 ; Se till att IRP pekar på Buffer_2.
;
index
movf INDF, w ; kopiera värdet ur position 1 i buffern till w
movwf Ind_check ; Spara w i Ind_check
movlw h'30' ; Sätt värde 0x30 i w
subwf ind_check,f ; Subtrahera w med Ind_check
btfss STATUS, Z ; Om Z = 0 hoppa över nästa.
goto index_1 ; Nej, gå till Index_1
movf INDF+1, w ; kopiera värdet ur position 2 i buffern till w
movwf digit_7 ; Spara w i Digit_7
incf INDF,f ; Addera värdet ur första position i buffern med 1
goto Read_buffer ; gå till Read_buffer
;
index_1 ; Index pekare =31 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa
goto index_2 ; Nej, gå till Index_2
movf INDF+2, w ; kopiera värdet ur position 3 i buffern till w
movwf digit_6 ; Spara w i Digit_6
incf INDF,f ; Addera värdet ur första position i buffern med 1
goto Read_buffer ; gå till Read_buffer
;
index_2 ; Index pekare =32 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto index_3 ; Nej, gå till Index_3
incf INDF,f ; Addera värdet ur första position i buffern med 1
goto Read_buffer ; gå till Read_buffer
;
index_3 ; Index pekare =33 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto index_4 ; Nej, gå till Index_4
movf INDF+4, w ; kopiera värdet ur position 5 i buffern till w
movwf digit_5 ; Spara w i Digit_5
incf INDF,f ; Addera värdet ur första position i buffern med 1
movf ch_d5,w ; Kopiera ch_d5 till w
movwf temp2 ; Spara w i Temp2
Movf digit_5,w ; Kopiera digit_5 till w
subwf temp2,f ; Subtrahera w med temp2
btfsc STATUS, Z ; Om Z = 0 hoppa över nästa.
goto Read_buffer ; gå till Read_buffer
movlw h'00' ; Sätt värde h'00' i w
movwf T5 ; Sätt T5 låg
goto Read_buffer ; gå till Read_buffer
;
index_4 ; Index pekare =34 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto index_5 ; Nej, gå till Index_5
movf INDF+5, w ; kopiera värdet ur position 6 i buffern till w
movwf digit_4 ; Spara w i Digit_4
incf INDF,f ; Addera värdet ur första position i buffern med 1
movf ch_d4,w ; Kopiera ch_d4 till w
movwf temp2 ; Spara w i Temp2
Movf digit_4,w ; Kopiera digit_4 till w
subwf temp2,f ; Subtrahera w med temp2
btfsc STATUS, Z ; Om Z = 0 hoppa över nästa.
goto Read_buffer ; gå till Read_buffer
movlw h'00' ; Sätt värde h'00' i w
movwf T4 ; Sätt T4 låg
goto Read_buffer ; gå till Read_buffer
;
index_5 ; Index pekare =35 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto index_6 ; Nej, gå till Index_6
movf INDF+6, w ; kopiera värdet ur position 7 i buffern till w
movwf digit_3 ; Spara w i Digit_3
incf INDF,f ; Addera värdet ur första position i buffern med 1
movf ch_d3,w ; Kopiera ch_d3 till w
movwf temp2 ; Spara w i Temp2
Movf digit_3,w ; Kopiera digit_3 till w
subwf temp2,f ; Subtrahera w med temp2
btfsc STATUS, Z ; Om Z = 0 hoppa över nästa.
goto Read_buffer ; gå till Read_buffer
movlw h'00' ; Sätt värde h'00' i w
movwf T3 ; Sätt T3 låg
goto Read_buffer ; gå till Read_buffer
;
index_6 ; Index pekare =36 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto index_7 ; Nej, gå till Index_7
movf INDF+7, w ; kopiera värdet ur position 8 i buffern till w
movwf digit_2 ; Spara w i Digit_2
incf INDF,f ; Addera värdet ur första position i buffern med 1
movf ch_d2,w ; Kopiera ch_d2 till w
movwf temp2 ; Spara w i Temp2
Movf digit_2,w ; Kopiera digit_2 till w
subwf temp2,f ; Subtrahera w med temp2
btfsc STATUS, Z ; Om Z = 0 hoppa över nästa.
goto Read_buffer ; gå till Read_buffer
movlw h'00' ; Sätt värde h'00' i w
movwf T2 ; Sätt T2 låg
goto Read_buffer ; gå till Read_buffer
;
index_7 ; Index pekare =37 ?
decfsz Ind_check, f ; Subtrahera Ind_check med 1, om Ind_check blir 0 hoppa över nästa.
goto Loop ; Nej, gå till Loop
movf INDF+8, w ; kopiera värdet ur position 9 i buffern till w
movwf digit_1 ; Spara w i Digit_1
incf INDF,f ; Addera värdet ur första position i buffern med 1
movf ch_d1,w ; Kopiera ch_d1 till w
movwf temp2 ; Spara w i Temp2
Movf digit_1,w ; Kopiera digit_1 till w
subwf temp2,f ; Subtrahera w med temp2
btfsc STATUS, Z ; Om Z = 0 hoppa över nästa.
goto Loop ; gå till Loop
movlw h'00' ; Sätt värde h'00' i w
movwf T1 ; Sätt T1 låg
goto Loop ; gå till Loop
Re: Egen bygg display har uppdaterings problem (PIC)
> >Varför "INDF+7" i MOVF instruktionen ? Vad tror du att det gör ?
> Vill kopiera datat ur position 8 i buffern, för att lägga det till rätt siffra (digit_2)
Och fungerar det som du tror ? Nej, det gör det inte.
Har du testkört den delen i MPSIM ? Nej, det kan du inte ha gjort.
När du gör "movf INDF, w" så kopieras det som ligger i registret som
har den adress som symbolen INDF pekar på. INDF är definierat till ett
visst värde i INC filen. Och just INDF är lite speciellt eftersom det använder
värdet i FSR till att "indirekt" peka på det faktiska värdet.
Generellt så tar MOVF en adress-parameter som alltså är adressen till
det register där data ska hämtas. (Just INDF är ett litet specialfall eftersom
den tar värdet i FSR som en adress till det aktuella registret.)
Om du nu gör t.ex "movf INDF+1, w" så kommer det aktuella värdet att
hämtas från det register som har adress "INDF+1", d.v.s det register som
ligger direkt efter INDF i memory mappen. Alltså från TMR0 eller OPTION
(beroende på hur dina bankbitar är satta). Jag är helt övertygad om att
det *inte* är det du vill göra !
På samma sätt kommer "movf INDF+7, w" att läsa värdet i antingen
PORTC, TRISC, CM1CON0 eller BAUDCTL (beroende på bankbitarna).
Sannolikt inte alls det du avsåg att göra.
> Vill kopiera datat ur position 8 i buffern, för att lägga det till rätt siffra (digit_2)
Och fungerar det som du tror ? Nej, det gör det inte.
Har du testkört den delen i MPSIM ? Nej, det kan du inte ha gjort.
När du gör "movf INDF, w" så kopieras det som ligger i registret som
har den adress som symbolen INDF pekar på. INDF är definierat till ett
visst värde i INC filen. Och just INDF är lite speciellt eftersom det använder
värdet i FSR till att "indirekt" peka på det faktiska värdet.
Generellt så tar MOVF en adress-parameter som alltså är adressen till
det register där data ska hämtas. (Just INDF är ett litet specialfall eftersom
den tar värdet i FSR som en adress till det aktuella registret.)
Om du nu gör t.ex "movf INDF+1, w" så kommer det aktuella värdet att
hämtas från det register som har adress "INDF+1", d.v.s det register som
ligger direkt efter INDF i memory mappen. Alltså från TMR0 eller OPTION
(beroende på hur dina bankbitar är satta). Jag är helt övertygad om att
det *inte* är det du vill göra !
På samma sätt kommer "movf INDF+7, w" att läsa värdet i antingen
PORTC, TRISC, CM1CON0 eller BAUDCTL (beroende på bankbitarna).
Sannolikt inte alls det du avsåg att göra.
Re: Egen bygg display har uppdaterings problem (PIC)
>Har du testkört den delen i MPSIM ? Nej, det kan du inte ha gjort.
Som jag skrev har inte testat koden, det tog mig mer än en halvtimme att få till koden så den såg bra ut.
Inte gjord för "tab" separerad kod.
>Sannolikt inte alls det du avsåg att göra.
Nä det vara därför jag fråga:
>Finns det ett enklare sätt att välja vilken buffer man skall läsa ur, än att ha två likadana kodsnuttar och den enda skillnaden de är från vilken buffer >läsning sker t.ex.
Jag vet att man kan skriva "movf buffer_1+7, w" och för buffer_2 "movf buffer_2+7, w", men det gör att man får så mycket kod.
Skriver man så här för att kopiera ut "movf FSR+7, w"?
Som jag skrev har inte testat koden, det tog mig mer än en halvtimme att få till koden så den såg bra ut.
Inte gjord för "tab" separerad kod.
>Sannolikt inte alls det du avsåg att göra.
Nä det vara därför jag fråga:
>Finns det ett enklare sätt att välja vilken buffer man skall läsa ur, än att ha två likadana kodsnuttar och den enda skillnaden de är från vilken buffer >läsning sker t.ex.
Jag vet att man kan skriva "movf buffer_1+7, w" och för buffer_2 "movf buffer_2+7, w", men det gör att man får så mycket kod.
Skriver man så här för att kopiera ut "movf FSR+7, w"?
Re: Egen bygg display har uppdaterings problem (PIC)
> Jag vet att man kan skriva "movf buffer_1+7, w"
Ja, det är OK eftersom "buffer_1" pekar *direkt* mot starten på bufferten.
I ditt fall använder du INDF vilket ju pekar på en speciellt register (SFR)
inte en minnesadress i RAM (GPR)
Man jahaja, då förstår jag lite bättre vad du är ute efter...
Men det hela verkar lite feltänkt. FSR och INDF är tänkta då man
behöver stega igenom en buffert från start till slut, och mellan varje steg
gör men t.ex en "INCF FSR, F" (t.ex). Man kan inte använda FSR/INDF för att
komma åt valfri position i bufferten lite "random" så att säga. Man kan alltså
aldrig läsa/skriva något annat än just det som FSR för tillfället "pekar" på.
Inom parentes så har den nya PIC16F1xxx modellerna en ny instruktion
för att göra ungefär det du är ute efter. Det kallas "relative adressing"
och man kan adressera +/- 32 positioner rellativt FSR0/1. Men inte på
de traditionella PIC16 modellerna, som sagt.
Ja, det är OK eftersom "buffer_1" pekar *direkt* mot starten på bufferten.
I ditt fall använder du INDF vilket ju pekar på en speciellt register (SFR)
inte en minnesadress i RAM (GPR)
Man jahaja, då förstår jag lite bättre vad du är ute efter...

Men det hela verkar lite feltänkt. FSR och INDF är tänkta då man
behöver stega igenom en buffert från start till slut, och mellan varje steg
gör men t.ex en "INCF FSR, F" (t.ex). Man kan inte använda FSR/INDF för att
komma åt valfri position i bufferten lite "random" så att säga. Man kan alltså
aldrig läsa/skriva något annat än just det som FSR för tillfället "pekar" på.
Inom parentes så har den nya PIC16F1xxx modellerna en ny instruktion
för att göra ungefär det du är ute efter. Det kallas "relative adressing"
och man kan adressera +/- 32 positioner rellativt FSR0/1. Men inte på
de traditionella PIC16 modellerna, som sagt.
Re: Egen bygg display har uppdaterings problem (PIC)
Då är jag lite mer me på hur det funkar, med FSR och INDF.
En grej är ju att kopiera ut index pekaren och lägga på en egen minnes plats så man kan öka den med INCF och sen tabell som talar om hur många steg man skall hoppa i buffern för att läsa ut data ur den positionen. Vet inte riktigt hur jag menar, men det låter ju bra.
Fast det verkar enklare att skapa en kod för Buffer_1 och en för Buffer_2.
En grej är ju att kopiera ut index pekaren och lägga på en egen minnes plats så man kan öka den med INCF och sen tabell som talar om hur många steg man skall hoppa i buffern för att läsa ut data ur den positionen. Vet inte riktigt hur jag menar, men det låter ju bra.
Fast det verkar enklare att skapa en kod för Buffer_1 och en för Buffer_2.
Re: Egen bygg display har uppdaterings problem (PIC)
Ja, eller ha en tredje "arbetsbuffert" dit du kopierar buffert_1 eller
buffert_2 när du behöver jobba med det. I denna tredje gemensamma
bufferten kan du adressera dig runt slumpmässigt hur du vill.
Sen så kan du ju alltid öka eller minska FSR som du vill fram och tillbaka.
D.v.s istället för "movf INDF+7, w" så blir det :
Och sedan återställa FSR efteråt (om det behövs).
Eller (om det ska fungera oberoende på om det är buffer 1 eller 2 som för tillfället är laddat i FSR) :
Jag har inte testat så att detta faktriskt fungerar, men spontant låter det korrekt.
Eller :
Aja, det blir lite snårigt hur man än gör. Det är inte utan anledning som
de (Microchip) har gjort lite tillägg i just indexerad/rellativ adresseringen...
buffert_2 när du behöver jobba med det. I denna tredje gemensamma
bufferten kan du adressera dig runt slumpmässigt hur du vill.
Sen så kan du ju alltid öka eller minska FSR som du vill fram och tillbaka.
D.v.s istället för "movf INDF+7, w" så blir det :
Kod: Markera allt
MOVLW Buffer_1 + 7 ; beräkna adressen till pos 7 i buffer_1
MOVWF FSR ; Ladda indexregister med adressen till pos 7
MOVF INDF, W ; Hämta pos 7 (eller igentligen 8)...
Eller (om det ska fungera oberoende på om det är buffer 1 eller 2 som för tillfället är laddat i FSR) :
Kod: Markera allt
MOVLW FSR + 7 ; beräkna adressen till pos 7 i den aktuella bufferten
MOVWF FSR ; Ladda indexregister med adressen till pos 7
MOVF INDF, W ; Hämta pos 7 (eller igentligen 8)...
Eller :
Kod: Markera allt
MOVLW 7 ; Ladda W med antalet steg frammåt som önskas.
ADDWF FSR, F ; Öka indexpekaren med antalet steg.
MOVF INDF, W ; Hämta den aktuella positionen...
de (Microchip) har gjort lite tillägg i just indexerad/rellativ adresseringen...
Re: Egen bygg display har uppdaterings problem (PIC)
Får testa någon av alternativen imorgon, har lite andra funktioner att lösa innan allt kan testas t.ex. om det inte skrivs till alla positioner i buffern så måste den på något sätt avbrytas där t.ex. att 1B skrivs in sist som t.ex. "End of text"
Re: Egen bygg display har uppdaterings problem (PIC)
Måste bara berätta vad som hände idag när man till slut skrivit klar all kod och granskat den.
Klickade på "Build All" i MPLAB för att sen bränna ner koden till PIC´n, stoppade i USB sladden till brännaren och när jag tittar på skärmen är den svart. Hmm.
Trycker på tangentbordet och det händer inget, numlock och capslock lampan skiftar inte. Datorn har hängt sig, f_n tänker jag nu har all kod jag lagt in gått åt skogen.
Startar om datorn, men inget händer går inte ens in i bios (inget pip).
Öppnar datorn och kollar hittar inget synligt fel.
Ställer ut den i kylan då den är rätt varm och tar in den efter en stund.
Kopplar in allt och statar hör att någon fläckt låter lite illa i lagret och kollar det är displaykorts fläkten som verker tycka livet är pest.
Får igång allt och bränner in koden i Pic´n.
Men då är något hel knas med koden redan från början i koden.
Kollar koden i "Disassambly Listning" och ser att första "Call" som skall anropa en rutin för att sända ut ett tecken till en digit, går till en helt annan address.
Skall gå till 0x830, men gick till 0x30 istället som var en bit in i ISR rutinen.
Efter lite kollande visar det sig att rutinen ligger efter ASCII tabellen som hämtar ur flash minnet och hade alltså fått adressen direkt efter ASCII tabellen.
Flyttade rutinen och nu peka den på rätt address.
Konstigt att allt detta händer på en gång och att inte rutin felet dykt upp tidigare.
Det är väl ödet.
Sen funkar själv klart inte den nya koden som skall sparar i två buffrar och sen skall läsar ur data ur buffrarna. Så det blir eftermiddagens aktivitet, felsöka kod.
Klickade på "Build All" i MPLAB för att sen bränna ner koden till PIC´n, stoppade i USB sladden till brännaren och när jag tittar på skärmen är den svart. Hmm.
Trycker på tangentbordet och det händer inget, numlock och capslock lampan skiftar inte. Datorn har hängt sig, f_n tänker jag nu har all kod jag lagt in gått åt skogen.
Startar om datorn, men inget händer går inte ens in i bios (inget pip).
Öppnar datorn och kollar hittar inget synligt fel.
Ställer ut den i kylan då den är rätt varm och tar in den efter en stund.
Kopplar in allt och statar hör att någon fläckt låter lite illa i lagret och kollar det är displaykorts fläkten som verker tycka livet är pest.
Får igång allt och bränner in koden i Pic´n.
Men då är något hel knas med koden redan från början i koden.
Kollar koden i "Disassambly Listning" och ser att första "Call" som skall anropa en rutin för att sända ut ett tecken till en digit, går till en helt annan address.
Skall gå till 0x830, men gick till 0x30 istället som var en bit in i ISR rutinen.
Efter lite kollande visar det sig att rutinen ligger efter ASCII tabellen som hämtar ur flash minnet och hade alltså fått adressen direkt efter ASCII tabellen.
Flyttade rutinen och nu peka den på rätt address.
Konstigt att allt detta händer på en gång och att inte rutin felet dykt upp tidigare.
Det är väl ödet.
Sen funkar själv klart inte den nya koden som skall sparar i två buffrar och sen skall läsar ur data ur buffrarna. Så det blir eftermiddagens aktivitet, felsöka kod.