Ik heb een programma geschreven alleen doet deze het heel raar,

alles is voor de rest goed ingesteld dan laat ik het programma het volgende doen.

      ADdata	equ	20h
Dout	equ	1
Sclk	equ 0
Teller	equ	21h
Teller2	equ 22h
	

		org		00h
		bsf		Status,5
		movlw	60h
		movwf	Osccon
		movlw	00h
		movwf	Ansel
		movlw	00h
		movwf	Trisa
		movlw	00h
		movwf	Trisb
		bcf		Status,5
		
		include<PIC16F88.inc>
		include<ASCII.inc>


Start	movlw	0FFh
		call	Sendda
		Goto	Start




Sendda	movwf	ADdata
		bcf		Porta,Dout	;clear
		bsf		Porta,Sclk	;Set high
				
		btfsc	ADdata,7
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1

		btfsc	ADdata,6
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1

		btfsc	ADdata,5
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1

		btfsc	ADdata,4
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1

		btfsc	ADdata,3
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1
	
		btfsc	ADdata,2
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1

		btfsc	ADdata,1
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1

		btfsc	ADdata,0
		bsf		Porta,Dout
		call	Clockdalo
		call	Clockdahi
		bcf		Porta,Dout
		call	Delay1
		call	Delay1
		Return
		
		
		

Clockdalo	bcf		Porta,Sclk
			Call	Delay1
			Return
			


Clockdahi	bsf		Porta,Sclk
			Call	Delay1
			Return



Delay1	    MOVLW	01h		;1 cycle
        	MOVWF	Teller2		;1 cycle
D1			MOVLW	0FFh		;1 cycle
        	MOVWF	Teller		;1 cycle
D2		    DECFSZ	Teller, 1   ;1 cycle
        	GOTO	D2			;2 cycles
        	DECFSZ	Teller2, 1
        	GOTO	D1
			Return



			end

nu werkt het Clockdahi en Clockdalo gedeelte wel maar bij Dout krijg ik hele kleine piekjes die veel korter zijn dan
Clockda-hi/lo

Weet iemand hoe dit komt??

[Bericht gewijzigd door G_SHOCK op ]

Wat gebeurt er bij de routine 'Clockdahi' en bij 'Clockdalo' ?
Wordt daar ook nog iets met Porta gedaan ?

Op 27 september 2006 20:39:04 schreef MMSoft:
Wat gebeurt er bij de routine 'Clockdahi' en bij 'Clockdalo' ?
Wordt daar ook nog iets met Porta gedaan ?

ja daar gebeurt dit :

Clockdahi
bsf Porta,Sclk
call Delay1

Clockdalo
bcf Porta,Sclk
Call Delay1

LET OP:

ASM is case sensitive.
Ik zie staan Porta en PortA.
Dit is niet hetzelfde.

Verder nog:

Een call moet altijd worden afgesloten met een return.
Deze zie ik niet zien bij Clockdahi/Clockdalo.

En staat de return wel in Delay1?

Hint: alles met kleine letters(lowercase) schrijven.

Op 27 september 2006 20:50:14 schreef Willie Worteltje:
LET OP:

ASM is case sensitive.
Ik zie staan Porta en PortA.
Dit is niet hetzelfde.

Verder nog:

Een call moet altijd worden afgesloten met een return.
Deze zie ik niet zien bij Clockdahi/Clockdalo.

En staat de return wel in Delay1?

Hint: alles met kleine letters(lowercase) schrijven.

sorry, tik het net allemaal uit me hoofd.
heb de code zelf net verandert om te kijken of het werkt op een andere manier, maar werkt nog niet.

alle hoofdletters en kleine letters zijn goed en overal ook Return na een subroutine.

Dan de code maar plaatsen ....

Op 27 september 2006 20:55:39 schreef Willie Worteltje:
Dan de code maar plaatsen ....

oke zie startpost
raar, als ik:

bcf		Porta,Sclk
bsf		Porta,Sclk

weg haal dan doet het andere gedeelte het wel(Dout), maar mijn clock doet het natuurlijk niet meer(Sclk)?
mag ik niet Porta 2x gebruiken??

[Bericht gewijzigd door G_SHOCK op ]

Ik zie het niet.

Maar wat doet de debugger in MPLAB?

Doet ie het daar wel goed?

En code kan wat korter.

Clockdalo en Clockdahi samen voegen

En je kan ook nog een aparte Delay2 maken.

WW. ja had hem eerst nog veel kleiner maar hij werkt de hele tijd niet dus ik d8 nou dan maar zo makkelijk mogelijk.

Maar je mag blijkbaar niet bsf PortA,Dout en bsf PortA,Sclk tegelijk gebruiken?
Dout = 1
Sclk = 0

MPLAB zegt dat alles goed is maar mijn picje niet :)

oke als ik de SCLK op me Portb zet dan werkt het geheel wel, kan iemand mij uitleggen waarom het dan wel werkt?

ik wil het graag op Porta namelijk, maar als het niet anders kan dan moet het maar zo.

[Bericht gewijzigd door G_SHOCK op ]

Maar je mag blijkbaar niet bsf PortA,Dout en bsf PortA,Sclk tegelijk gebruiken?
Dout = 1
Sclk = 0

Dat is geen probleem.

Welke PIC gebruik je ?

[Bericht gewijzigd door MMSoft op ]

Kijk eens in de datasheet of er verschil is tussen PortA en PortB.

Op 27 september 2006 21:22:34 schreef G_SHOCK:
WW. ja had hem eerst nog veel kleiner maar hij werkt de hele tijd niet dus ik d8 nou dan maar zo makkelijk mogelijk.

Maar je mag blijkbaar niet bsf PortA,Dout en bsf PortA,Sclk tegelijk gebruiken?
Dout = 1
Sclk = 0

MPLAB zegt dat alles goed is maar mijn picje niet :)

oke als ik de SCLK op me Portb zet dan werkt het geheel wel, kan iemand mij uitleggen waarom het dan wel werkt?

ik wil het graag op Porta namelijk, maar als het niet anders kan dan moet het maar zo.

Op welke pinnen is porta.Sclk en porta.Dout?
Porta.5 is input-only
En porta.0 tm porta.3 zijn standaard analoog. Eerst veranderen naar digitaal.

Op 27 september 2006 21:54:55 schreef chipje:
[...]

Op welke pinnen is porta.Sclk en porta.Dout?
Porta.5 is input-only
En porta.0 tm porta.3 zijn standaard analoog. Eerst veranderen naar digitaal.

in de ANSEL neem ik aan dan dat je bedoelt.

Ik heb een soortgelijk probleem ook met enkele picjes gehad.
Sommige PICjes pikken het niet als je achter elkaar bsf en/of
bcf instructies zet. De oplossing was bij mij de beide instructies vervangen door een movlw b'........' instructie, gevolgd door movwf PORTA.
Het probleem heeft volgens mij te maken met de inwendige opbouw met de poort-latches.

Zet eens je complete asm code neer. Ook alles wat voor 'start' staat.

Op 27 september 2006 22:05:51 schreef chipje:
Zet eens je complete asm code neer. Ook alles wat voor 'start' staat.

Dat bedoelde ik ook al!

Op 27 september 2006 22:05:46 schreef Zonnepaneeltje:
Ik heb een soortgelijk probleem ook met enkele picjes gehad.
Sommige PICjes pikken het niet als je achter elkaar bsf en/of bcf instructies zet.

Dat probleem ken ik niet, wel geeft het problemen als je een of meerdere uitgangen te zwaar belast.

de hele code staat er.

Als ik alle poorten naar Portb verzet werkt het wel netjes op portb-0 en Portb-1.

Code klopt. Moet gewoon kunnen werken.
Maar ik heb het zelf ook een keer mee gemaakt met een 16f84 die de porta.0 niet wilde aansturen terwijl de code goed was. Heb toen zelf niet de moeite genomen om het uit te zoeken, maar de functie naar poorta.2 'verplaatst'. Die had ik nog vrij.
Je zou een andere pic kunnen proberen, maar dat lost de eigelijke probleem natuurlijk niet op. Heb je die uitgangen belast? en waarmee?

Op 27 september 2006 22:28:29 schreef chipje:
Code klopt. Moet gewoon kunnen werken.
Maar ik heb het zelf ook een keer mee gemaakt met een 16f84 die de porta.0 niet wilde aansturen terwijl de code goed was. Heb toen zelf niet de moeite genomen om het uit te zoeken, maar de functie naar poorta.2 'verplaatst'. Die had ik nog vrij.
Je zou een andere pic kunnen proberen, maar dat lost de eigelijke probleem natuurlijk niet op. Heb je die uitgangen belast? en waarmee?

een probe :P

Ik denk sat dit toch een Read Modify Write fout is.
Deze ontstaan bij BSF/BCF instructies(zie datasheet)

Op 27 september 2006 22:54:04 schreef The Headhunter:
Ik denk sat dit toch een Read Modify Write fout is.
Deze ontstaan bij BSF/BCF instructies(zie datasheet)

en hoe haal ik die er uit, misschien met een delay na de eerste Read modify write? zal het vandaag is verder uitzoeken.

Als het een read-after-write fout is: NOPje ertussen plaatsen.

CD :)