Problem med simulering assembler PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Goliath
Inlägg: 32
Blev medlem: 1 juni 2005, 22:16:06
Ort: Göteborg
Kontakt:

Problem med simulering assembler PIC

Inlägg av Goliath »

Har stött på de här lilla problemet! jag vill skicka ut data på PORTA men lyckas inte få ut värdet när jag kollar i SPECIAL FUNCTION REGISTER

har skrivit de här lilla koden för att visa vad jag menar
funkar fint att skicka ut värdet på PORTC men inte PORTA


;**********************************************************
;PIC16F877A, MBLAB IDE v7.20

list p=pic16f877a
include p16f877a.inc
errorlevel -302 ;Eliminate bank warning

status equ 03
trisa equ 85
trisb equ 86
trisc equ 87
porta equ 05
portb equ 06
portc equ 07

;**************** Program Start ***********************
org 0 ;Reset Vector
goto init
org 4 ;Interrupt Vector
goto init

;**************** Initial Process *********************
org 5
init bsf status,RP0 ;Change to Bank1
clrf trisa ;Set PORTA to Output mode
clrf trisc ;Set PORTC to Output mode
movlw H'FF'
movwf trisb ;Set PORTB to Input mode
bcf status,RP0 ;Change to Bank0

Main
movlw b'10101011' ;Set data
movwf porta ;Output data
movwf portc ;Output data
goto Main

end
;**********************************************************
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Om du nu måste deklarera status, trisa, trisb osv måste du inte då oxå berätta vilket värde RP0 har i status registert???
Goliath
Inlägg: 32
Blev medlem: 1 juni 2005, 22:16:06
Ort: Göteborg
Kontakt:

Inlägg av Goliath »

Jeppsson, egentligen behövde jag inte deklarera trisa, trisb... eftersom jag har includerat p16f877a.inc där finns alla RP0 m.m deklarerade!

jag kan ändra RP0 till 5 men de hjälper fortfarande inte!
John
Inlägg: 62
Blev medlem: 12 juli 2005, 20:24:47
Ort: Göteborg

Inlägg av John »

PortA fungerar väl som AD-omvandlare på 877an. Tror du måste ställa in ADCON-registren innan du kan använda porten som utgång
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> status equ 03
> trisa equ 85
> trisb equ 86
> trisc equ 87
> porta equ 05
> portb equ 06
> portc equ 07

Gör ABSOLUT INTE så där !!!
Plocka bort raderna omedelbart...

> errorlevel -302 ;Eliminate bank warning

OK generellt, men kan väll vara bra under felsökning att få lite extra varningar.

> bsf status,RP0 ;Change to Bank1
Eller till Bank 3 !!

> bcf status,RP0 ;Change to Bank0
Eller till Bank 2 !!

Använd BANKSEL istället och peta inte direkt på bank select bitarna.

För övrigt så får du kolla om inte PORTA är defualt som analoga ingångar...

EDIT : kompletterade bank-kommentaren...
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Jag var lite osäker :roll: , för jag brukar inte själv includera *.inc filerna utan deklarera värdena på registerna ibörjan av programmet...

Så som du gör fast du inte behöver... :)

Vad har du för värde i trisa???

Vid deklarera som du har med så skriver du bara siffror, vet ej hur mplab tolkar det, du bör kanske skriva tex porta equ 0x05 så den fattar att det är HEX tal...
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Håller helt med sodjan!

Definiera INGET som redan är definierat!

Sen PORTA....jag brukar att använda följande i alla mina program där jag inte använder AD-funktionen:

Kod: Markera allt

 ifdef ADCON1
        BANKSEL 1
	movlw	b'00000110'
	movwf	ADCON1		; Set A/D totally off
	BANKSEL	0
	clrf	ADCON0		; Be sure that A/D is off
 endif ; def ADCON1
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Microchip data sheet PIC16F87XA sidan 41 om PORTA

Note: On a Power-on Reset, these pins are configured
as analog inputs and read as 0.
The comparators are in the off (digital)
state.


:oops:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> för jag brukar inte själv includera *.inc filerna utan deklarera värdena på registerna ibörjan av programmet...

Varför göra om samma jobb som Microchip redan har gjort ??

> 0x05 så den fattar att det är HEX tal...

Microchips rekomendation är :

hex : h'05'
oct : o'05'
dec : d'05'
bin : b'01010101'
asc : a'A'

Problemet med 0x05 (och de andra specialvarianterna för andra radix)
är att de inte har samma format mellan alla radix.

Icecap, din kod borde väll se ut så här :

Kod: Markera allt

 ifdef ADCON1
        BANKSEL ADCON1
   movlw   b'00000110'
   movwf   ADCON1      ; Set A/D totally off
   BANKSEL   ADCON0
   clrf   ADCON0      ; Be sure that A/D is off
 endif ; def ADCON1
Som du har skrivit det så måste man ju i alla fall
slå upp vilken bank ADCON0 och ADCON1 ligger i.
Tanken med BANKSEL är ju just att man inte behöver
ta reda på det själv ! Jag vet inte något fall där
man skulle "hårdkoda" banknumret i BANKSEL direktivet.
Goliath
Inlägg: 32
Blev medlem: 1 juni 2005, 22:16:06
Ort: Göteborg
Kontakt:

Inlägg av Goliath »

tack för alla svar!

Sodjan, de var väldigt smidigt med BANKSEL tack för tipset!

de går fortfarande inte trots koden som ni skrev
i databladet så säger dom att On a Power-on Reset, these pins are configured
as analog inputs and read as 0 men hur jag ska ändra det är fortfarande oklart!
Goliath
Inlägg: 32
Blev medlem: 1 juni 2005, 22:16:06
Ort: Göteborg
Kontakt:

Inlägg av Goliath »

nu har jag hittat felet!

jag skrev så här så funkade det

Kod: Markera allt

		BCF 	STATUS, RP0 	;
		BCF 	STATUS, RP1	  	; Bank0
		CLRF 	PORTA 			; Initialize PORTA by
		BSF 	STATUS, RP0 	; Select Bank 1
		MOVLW 	0x06 			; Configure all pins
		MOVWF 	ADCON1 			; as digital inputs
		MOVLW 	b'11000000'		; Value used to
		MOVWF 	TRISA 			; Set RA<3:0> as inputs
EDIT: kommentaren är fel, jag kopierade rakt av databladet
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Fint att det fungerar.

När det gäller BANKSEL, så är väll det enda "problemet" att den
sätter in bankswitching kod oavsett om det behövs eller inte.

Det finns andra lösningar där man låter MPASM hålla reda på
vilken bank man är i, och bara sätter in bcf/bsf kommandon om
det faktiskt behövs. Men det är lite överkurs just nu... :-)
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Sodjan du verkar vara kung på Assembler och framför allt på PIC processorer. :D :D

Finns det någon bra lathund på "bra och ha" kommando i MPASM? Så som till exempel BANKSEL eller det är sådant som man lär sig efter man har läst några hundra rader kod från andra asm-gurus??? :shock:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Finns det någon bra lathund på "bra och ha" kommando i MPASM?

Japp, den heter "MPASM/MPLINK PICmicro Quick Chart".
Kolla längst ner på MPLAB sidan hos Microchip.

Sedan finns naturligtsvis detaljerna i "MPASM/MPLINK User's Guide".
Men den har du säkert redan laddat ner, eller hur ? :-)

Det är ju komplett omöjligt att missa dessa då de finns på samma sida
där MPLAB laddas ner !

EDIT :
Jag vill bara lägga till att, att läsa andras ASM kod inte behäver vara fel alls,
problemet är att avgöra vad som är *bra* kod ! :-)
99% av det som finns "på nätet" är mest skräp där bäst-före datumet
sedan länga är passerat...
Skriv svar