Ik ben bezig om een pic16f84a te doorgronden (en te leren programeren), en nu heb ik een simple oorzaak - gevolg progje geschreven voor mijn pic.

...Ik had nu graag een stukje code willen laten zien, maar helaas besloot de harddisk van mijn laptop ermee te stoppen, en guess what...

In iedergeval gebruik ik als basis dit stukje code:


porta		EQU	05h
teller		EQU	40h
teller2	        EQU	41h
teller3		EQU	42h
instelporta     EQU	85h

                ORG	00h     	;beginadres kiezen

		BSF 	03,5		;kies bank 1
		CLRF	instelporta	;alles pinnen poort A uitgang maken
	        BCF 	03,5		;kies bank 0

dit is het begin stukje uit het demoprogje wat bij de pic tutorial hoort.

Het probleem is alleen dat er bij het compileren een fout gegenereerd wordt, welke stelt dat ik de bank select functie niet heb toegepast, en daardoor niet kan instellen of de poorten input of output zijn. gevolg, proggie werkt niet.

Wie weet wat er fout gaat bij mij???

[Bericht gewijzigd door Chris Hogevonder op ]

Probeer het eerst een met een makkelijkere taal zoals Jal.
Deze genereert ook een asm file zodat je precies ziet wat er allemaal gebeurd

Volgens mij ben je

ORG 00h

vergeten ;)

Op do 24-10-2002 07:20:16 schreef MADdie:
Volgens mij ben je
ORG 00h
vergeten ;)

Die staat er toch gewoon tussen ;)

Op do 24-10-2002 01:22:40 schreef Chris Hogevonder:
dit is het begin stukje uit het demoprogje wat bij de pic tutorial hoort.

Het probleem is alleen dat er bij het compileren een fout gegenereerd wordt, welke stelt dat ik de bank select functie niet heb toegepast, en daardoor niet kan instellen of de poorten input of output zijn. gevolg, proggie werkt niet.

Wie weet wat er fout gaat bij mij???

En die fout zit in dat stukje wat je hebt neergezet?
En is het een warning of een error? want een warning is niet erg maar een error wel.

die fout is
MESSAGE[302](file name) 9 REGISTER IN OPERAND NOT IN BANK 0 .ENSURE BANK BITS ARE CORRECT

Op do 24-10-2002 20:21:15 schreef k.p.meinesz:
die fout is
MESSAGE[302](file name) 9 REGISTER IN OPERAND NOT IN BANK 0 .ENSURE BANK BITS ARE CORRECT

das gene error, das gewoon een Message; hoeft geen fout te zijn, moogt ge da dus gerust negeren

idd die staat er bij ook teleksn bij, maar t werkt allemaal perfect hoor ;)

LIONEL je hebt gelijk

er hoort nog iets bij nl.

BUILD COMPLETED SUCCESFULLY

en idd het werkt er niet minder om.

OK, tnx allemaal,

ik denk dat ik dan nog maar eens naar de rest van het prog ga kijken... (als ik het nog kan redden...)

en over de taal, ik begrijp wat ik aan het doen ben, maar kon de fout (of message) niet plaatsen, en dacht dat daar de fout zat... vandaar

Kan deze mededeling ook niet plaatsen behelave dan dat het uit regel 9 komt(bij mij)

Die melding klopt. Het is alleen maar een warning die de assembler geeft aan je. Hij verteld dat je moet opletten omdat je niet in bank 0 zit (daar moet je standaard inzitten). Maar we willen in dat stukje code juist in bank 1 zitten om het TRIS in te stellen. Dus het is een nutteloos bericht maar toch aardig van de assembler dat die ons ff laat opletten :)

heb ik dus mooi mijn routine net zolang aangepast dat deze dat juist niet meer deed.
blijkt dus dat ik nu juist een fout maak.
zal ik dus even terug moeten zetten 85h=05h=85h |:(

heb ik er ook nog wat van die raare messages de eerste weet ik nu (met dank aan deze site) maar de rest kan ik niet uit komen???
dit zijn de warnings:

Message[302] C:\PROGRA~1\MPLAB\ROBOT.ASM 9 : Register in operand not in bank 0. Ensure that bank bits are correct.
Warning[202] C:\PROGRA~1\MPLAB\ROBOT.ASM 18 : Argument out of range. Least significant bits used.
Warning[202] C:\PROGRA~1\MPLAB\ROBOT.ASM 22 : Argument out of range. Least significant bits used.
Warning[202] C:\PROGRA~1\MPLAB\ROBOT.ASM 23 : Argument out of range. Least significant bits used.

Op 24 oktober 2002 21:34:13 schreef Bastiaan:
...Hij verteld dat je moet opletten omdat je niet in bank 0 zit (daar moet je standaard inzitten)... :)

...SWS volgt de discussie vanuit "de bank" in de woonkamer... ;)

Hoezo bank 0? zit prima op mijn eigen bank hier LOL :P

SWS

Op 22 januari 2003 12:20:58 schreef bart II:
heb ik er ook nog wat van die raare messages de eerste weet ik nu (met dank aan deze site) maar de rest kan ik niet uit komen???
dit zijn de warnings:
Warning[202] C:\PROGRA~1\MPLAB\ROBOT.ASM 18 : Argument out of range. Least significant bits used.
Warning[202] C:\PROGRA~1\MPLAB\ROBOT.ASM 22 : Argument out of range. Least significant bits used.
Warning[202] C:\PROGRA~1\MPLAB\ROBOT.ASM 23 : Argument out of range. Least significant bits used.

Aan alleen je warning hebben we niks. Je moet ook je code ff posten. Bij elke warning of error regel staat aangegeven om welk stukje code het gaat. Zo zie je dat de 1e warning op regel 18 zit. Post dus ff regel 18 eventjes met eventueel andere belangrijke info die wij nodig hebben om je te kunnen helpen.

hier heb je de code (grotendeels zelf geschreven dankzij deze site :):):):)


poorta	EQU	05h
poortb	EQU	06h
iporta	EQU	85h
iportb	EQU	86h

;--------POORTINSTELLEN--------
	ORG	00h
	BSF	03,5
	CLRF	iportb    
	BCF	03,5
;--------PROGRAMMA-------------
	MOVLW	05h
	MOVWF	poortb
	BTFSC	poorta,01h
	GOTO	achterl
;--------SUB LINKSACHTER------
achterl	BCF	poortb,05h
	BSF	poortb,08h
	GOTO	time
achter2	BSF	poortb,01h
	GOTO	time
voor1	BCF	poortb,0Fh
	BSF	poortb,08h
;--------SUB time------------
time   	MOVLW	0DAh
        MOVWF	40h
verder	MOVLW	0FFh
	MOVWF	41h
  	MOVLW	0FFh
        MOVWF	42h
opnieuw DECFSZ	42h, 1
        GOTO	opnieuw
verder2	DECFSZ	41h, 1
	GOTO	verder2
	DECFSZ	40h, 1
        GOTO	verder
	RETFIE
	
	END

[edit zo moet het beter gaan]

Alleen regel 18, 22 en 23 waren voldoende geweest.

Jij zet in regel 18 neer:
BSF poortb,08h
Oftwel jij wilt op de geheugenplek poortb bitje 8 setten. Maar bit 8 bestaat niet. Je hebt bit 0 t/m 7, en dus geen 9. Hij geeft ook de warning: out of range. Oftwel je zit buiten zijn bereik. Hij gebruikt als je niks verandert de laatste 7 bits die je meegeeft. Aangezien jij 1000000 hebt zal die alleen de 00000000 gebruiken en dus niks setten op poort b.

Het programma werkt wel want het is een warning alleen in dit geval niet zoals jij wilt. Maak er dus van:
BSF poortb,07h

Op regel 22 maak je het helemaal bont door te zeggen:
BCF poortb,0Fh
Je wilt dus bitje 0Fh dit is bitje 15 clearen. Die bestaat helemaal niet.

En regel 23 is dezelfde fout als regel 18.

Lees dus even goed in de datasheet de instructie BCF en BSF nog eens na.

Op 22 januari 2003 15:42:06 schreef Bastiaan:
Alleen regel 18, 22 en 23 waren voldoende geweest.

Lees dus even goed in de datasheet de instructie BCF en BSF nog eens na.

en vooral dat stukje over READ MODIFY WRITE OPERATIONS
oa BSF BCF
anders zoek je je straks hartsikke blind naar een fout

Op 22 januari 2003 13:04:42 schreef bart II:

[edit hij wordt een beetje onduidelijk maar ik weet niet hoe ik het op moet lossen]

Zet je programma tussen de UBB-codes code en /code. Probeer maar door je laatste posting te wijzigen.

Ik dacht dat je wel 2 bits tegelijk kon clearen of setten maar dat kan dus niet hoe moet ik het dan doen bv.
als ik bit 1 en bit 4 wil clearen zoals op regel 17
achterl BCF poortb,05h

Op 23 januari 2003 10:56:19 schreef bart II:
Ik dacht dat je wel 2 bits tegelijk kon clearen of setten maar dat kan dus niet hoe moet ik het dan doen bv.
als ik bit 1 en bit 4 wil clearen zoals op regel 17
achterl BCF poortb,05h

Gewoon door twee keer onder elkaar BCF te schrijven
BCF poortb, 01h
BCF poortb, 04h

Op 23 januari 2003 10:56:19 schreef bart II:
Ik dacht dat je wel 2 bits tegelijk kon clearen of setten maar dat kan dus niet hoe moet ik het dan doen bv.
als ik bit 1 en bit 4 wil clearen zoals op regel 17
achterl BCF poortb,05h

Ik zeg toch -> Lees de datasheet. Staat alles in wat jij niet weet maar wel wil weten.

zou ik moeten doen maar ik heb de datasheet nog niet gedownt dus vandaar maar dat ga ik direct doen en dan zal ik jullie niet meer lastig vallen!! met rare proggie vragen.

Op 23 januari 2003 13:35:15 schreef bart II:
zou ik moeten doen maar ik heb de datasheet nog niet gedownt dus vandaar maar dat ga ik direct doen en dan zal ik jullie niet meer lastig vallen!! met rare proggie vragen.

Het geeft allemaal niks, je mag best dingen vragen. Alleen als je alles zelf zo, vrij simpel, kan opzoeken dan is het wel erg makkelijk gedacht om ons het maar voor je te laten doen.

Probeer eens met "org 0x00" en voor de verder rest, eenvoudiger notaties van hex getallen zijn 0x00 met de laatste twee karakters duiden op het hex getal.

Groet Peter