PIC Assembly fråga ***NYA FRÅGOR****

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
jonkers
Inlägg: 37
Blev medlem: 16 oktober 2004, 15:04:52

PIC Assembly fråga ***NYA FRÅGOR****

Inlägg av jonkers »

Håller på och skriver kod för att snacka med en hitachi 44780-kompatibel LCD och nybörjare som man är så stöter man på patrull ganska snart.

Jag vill sätta in ett värde i minne x, jag vill kopiera HÖGA nibblen i det minnet till PORTB´s LÅGA nibble UTAN att påverka PORTB´s höga nibble, sedan ska lite annat hända, sen vill jag kopiera LÅGA nibblen till PORTB´s LÅGA nibble utan att påverka PORTB´s höga nibble.

Lite knökigt att förklara så jag ska försöka säga det i pseudo-kod.

Så här vill jag att det ska funka:



movlw B'01001010'
movwf x
kopiera x höga nibble till PORTB´s låga nibble på ngt sätt
call göraliteannanskit
kopiera x låga nibble till PORTB´s låga nibble



Hoppas ni förstår vad jag menar och tack på förhand för ev hjälp.

eder-Jonkers
Senast redigerad av jonkers 25 november 2004, 14:32:40, redigerad totalt 1 gång.
ClasseMan
Inlägg: 176
Blev medlem: 9 juli 2004, 15:21:02
Ort: Karlskrona
Kontakt:

Inlägg av ClasseMan »

Vet inte om detta är det smartaste sättet men det funkar.


highnib = 11110000
lownib = 00001111

;Här sätter jag den lägre nibblen
movf PORTB, w
andwf highnib, w
movwf temp
movlw b'11111111' ;Detta är talet som skall till portb
andwf lownib,w
iorwf temp,w
movwf PORTB

;och här sätter jag den högre
movf PORTB, w
andwf lownib, w
movwf temp
movlw b'11111111' ;Detta är talet som skall till portb
andwf highnib,w
iorwf temp,w
movwf PORTB
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Snarare såhär:

Kod: Markera allt

;och här sätter jag den högre 
movf	PORTB, w 
andlw	b'11110000'
movwf	temp 
swap	data,w ;Detta är talet som skall till portb 
andlw	b'00001111'
iorwf	temp,w 
movwf	PORTB 

;Här sätter jag den lägre nibblen 
movf PORTB, w 
andlw	b'11110000'
movwf	temp 
movf	data,w ;Detta är talet som skall till portb 
andlw	b'00001111'
iorwf	temp,w 
movwf	PORTB 
eller såhär:

Kod: Markera allt

swapf	data,w
iorlw	b'11110000'
andwf	PORTB
andlw	b'00001111'
iorwf	PORTB

movf	data,w
iorlw	b'11110000'
andwf	PORTB
andlw	b'00001111'
iorwf	PORTB
Eventuella fel skyller jag på trötthet.
jonkers
Inlägg: 37
Blev medlem: 16 oktober 2004, 15:04:52

Inlägg av jonkers »

ClasseMan>>>>>

Tusen tack för snabbt svar!!!!!

Detta funkar juh bra i simulatorn sånär som på två små detaljer:

Den första kodsnutten gör nästan precis det jag vill, förutom att den tar den låga (vill att det ska vara höga) nibblen utav värdet och sätter i
låga nibblen på PORTB utan att jiddra med den höga nibblen.

Den andra kodsnutten sätter den höga (vill att det ska vara låga)
nibblen i den HÖGA nibblen på PORTB, det blir fel, jag vill alltså att
bara den låga nibblen på PORTB ska påverkas i båda fallen.

Nu har juh jag fått ett recept på hur det ska vara så jag borde kunna
korrigera själv men dels börjar jag bli mjuk i skallen (har kodat sen 09.00
imorse =) ) och dels har jag jävligt svårt för att ta till mig hur andwf, iorwf och dom där funkar.

Jag har plöjt massa om boolean algebra och logiska grindar och förstår
i teorin men tycker det är svårt att använda. Kanske en vanesak.

Jaja, blablabla, nu ska jag gå och lägga mig. =)

eder-jonkers
Senast redigerad av jonkers 4 november 2004, 21:50:52, redigerad totalt 1 gång.
jonkers
Inlägg: 37
Blev medlem: 16 oktober 2004, 15:04:52

Inlägg av jonkers »

Jaha fick ett till svar medans jag skrev mitt svar.

Ska prova din(a) variant(er) Chribbe76


Nu blir det inge sova iallafall =)
jonkers
Inlägg: 37
Blev medlem: 16 oktober 2004, 15:04:52

Inlägg av jonkers »

Chribbe76>>>>>

SWEET!!!!

Jag gick rakt på ditt andra alternativ och det funkar som en klocka + att det var väldigt tjusigt.

swapf var en ny instruktion för mig, får plugga på lite

det här är lite annorlunda än att blinka med några LED´s måste jag erkänna =)

nu kan jag sova gott
jonkers
Inlägg: 37
Blev medlem: 16 oktober 2004, 15:04:52

Inlägg av jonkers »

jaha så nu har jag alltså kommit längre i projektet och vill styra LCD´n
seriellt från datorn (via picen då)

i och med att jag använder en PIC16F628A så märker jag nu att jag har
begått ett smärre misstag när jag använder lägre nibblen på portB
som styrning till LCD´n för där finns juh USARTens RX och TX pinnar.

jag försöker verkligen klura ut det här själv men jag hittar inte riktigt
tråden i det hela och otålig som jag är måste jag ta hjälp av er igen....

jag använder då chribbe76´s lösning för att trixa med nibblarna (se första frågan)

swapf data,w
iorlw b'11110000'
andwf PORTB
andlw b'00001111'
iorwf PORTB

movf data,w
iorlw b'11110000'
andwf PORTB
andlw b'00001111'
iorwf PORTB

nu är det så att jag har bestämt mig för att använda HÖGA nibblen på PORTB som styrning så jag vill att allt ska dit istället för låga nibblen som det är nu. (läs hela tråden för att fatta vad jag snackar om).

jag har som sagt provat lite men får inte ihop det.......

chribbe76...... någon...... help me

när jag ändå har er uppmärksamhet så kan ni väll förklara vad open drain (pinne RA4) är för ngt


eder - jonkers
jonkers
Inlägg: 37
Blev medlem: 16 oktober 2004, 15:04:52

Inlägg av jonkers »

med risk för att göra hela den här tråden till en monolog från min sida så måste jag bara köra en update:

jag upptäckte att ClasseMan´s andra (då felaktiga) algoritm är precis det jag vill uppnå i första steget nu 8)

så jag kör på:

movf PORTB,W
andwf LOWNIB,W
movwf TEMP
movf LCDMEM,W
andwf HIGHNIB,W
iorwf TEMP,W
movwf PORTB

= LCDMEM höga nibble till PORTB höga nibble



sen gör jag (observera swapf i början):

swapf LCDMEM,F
movf PORTB,W
andwf LOWNIB,W
movwf TEMP
movf LCDMEM,W
andwf HIGHNIB,W
iorwf TEMP,W
movwf PORTB

= LCDMEM låga nibble till PORTB höga nibble???????????


eller?

borde funka tycker jag.
ClasseMan
Inlägg: 176
Blev medlem: 9 juli 2004, 15:21:02
Ort: Karlskrona
Kontakt:

Inlägg av ClasseMan »

Annars kan du nog bara ändra Chribbe76 kod till detta


movf data,w
iorlw b'00001111'
andwf PORTB
andlw b'11110000'
iorwf PORTB

swapf data,w
iorlw b'00001111'
andwf PORTB
andlw b'11110000'
iorwf PORTB
Användarvisningsbild
Xyzzy
Inlägg: 1260
Blev medlem: 30 januari 2004, 22:31:07
Ort: Uppsala, Sweden

Inlägg av Xyzzy »

jonkers skrev:när jag ändå har er uppmärksamhet så kan ni väll förklara vad open drain (pinne RA4) är för ngt
Det är samma sak som "open collector" fast eftarsom man inte använder bipolära transistorer så blir det 'drain'.
Porten kan alltså bara "dra ner" signalen mot GND, ej upp till VCC, du behöver därför ett sk. pulluppmotstånd (antagligen finns det inbyggt i PICen)
-Detta behöver du bara bry dig om då du använder pinnen som UTGÅNG.
Skriv svar