timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
ik ben wat aan het stoeien met assembler voor de pic nu heb ik een vrij simpel progje en dat wil maar niet werken
list p=16F627A
include <P16F627A.inc>
__config _BODEN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_OFF &_WDT_OFF &_LVP_OFF &_MCLRE_OFF & _INTRC_OSC_NOCLKOUT
errorlevel -302
ORG 005h
BCF STATUS, RP1
bcf STATUS, RP0
movlw B'00100000'
movwf PORTB
movlw B'00000000'
movwf PORTA
movlw b'00000000'
movwf CCP1CON
MOVLW B'00000111' ;Disable Comparator module's
mOVWF CMCON
BSF STATUS, RP0
movlw B'00000000'
movwf TRISB
movlw B'11111111'
movwf TRISA
main btfss PORTA, 1
goto led_aan
btfsc PORTA, 1
bcf PORTB, 1
goto main
led_aan BSF PORTB, 1
goto main
end
en ik weet zeker dat het zou moeten werken
de pic draait er gaat namelijk een led branden(om te checken of de pic wel draait)
maar hij reageert niet op de drukknop en ik bevat neit waarom het niet wilt werken
Omdat wanner jij het prog aanzet hij direct naar led_aan gaat daarna gata ie naar main maar dan gaat ie direct weer naar led_aan dus je hebt een oneindige loop gemaakt volgens mij
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
O naja was ook een gok hoor
ik schrijf zelf namelijk niet in asm
maar zo als jij het had zal het in picbasic wel een loop vormen 
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Peter Claus
It is so simple to be happy, but it is so difficult to be simple
Je schrijft eerst waarden naar poorten A en B en dan pas initialiseer je ze.
Dat capture compare register heb je voor deze toepassing niet nodig.
En ik dacht dat je bij gebruik van poort A het ADCON1 register ook moet instellen om te kiezen tussen analoge en digitale ingangen.
Initieel staan de bits op 0, dus zijn alle bits van poort A analoog. Ik geloof dat daar al één van de fouten zit.
De hoofdroutine ziet er OK uit, ook al hangt ze met haken en ogen aan elkaar.
Ben je zeker dat de drukknop aan poort a bit 1 hangt? De eerste bit van poort a is bit 0.
[Bericht gewijzigd door Peter Claus op ]
Als ik het goed begrijp wil je een ledje uit kunnen schaken door minddel van een knopje dat PORTA zit.Dit gebeurt ook wel.Maar het hooft prograam zet steeds weer het ledje aan.
en dat gaat zo snel dat je het niet ziet.Dus moet er een vertraging tussen programmeren.
hier
staat het uitgelegd hoe je een vertraging kan maken
Het zou moeten werken.
Zolang het signaal op A,1 laag is blijft de led aan.
Zolang het signaal op A,1 hoog is blijft de led uit.
Wat me opvalt dat je op een gegeven moment STATUS,RP0 1 maakt, om BANK 1 te selecteren om TRISA en TRISB te kunnen gaan laden. Vervolgens maak je STATUS,RP0 niet opnieuw 0 voordat je de main loop binnengaat. De PORTA en PORTB referenties in de main loop wijzen dus eigenlijk naar TRISA en TRISB, waardoor het niet werkt.
Wat ik je zou aanraden, is om het BANKSEL directive te gebruiken om de STATUS,RP0 en STATUS,RP1 bits te vullen in plaats van expliciete BCF en BSF. Dan zie je dat soort dingen gemakkelijker. Misschien moet je "errorlevel -302" ook nog eens heroverwegen! 
Vriendelijke groet,
Frans
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
@cosphi dat CPP register hangt daar in om het uit te zetten
en hoe bedoel je hang met haken en ogen aan elkaar?
@frans77 oke ik zal er eens naar kijken of het wel wekrt asl ik terug naar bank0 ga
@zonnepaneeltje dat zou inderdaad de bedoeling moetetn zijn
@allen dank u voor de medewerking hier heb ik wat aan ik laat mijn bevindingen nog wel horen
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
De processor begint op adres h00.
Ik weet niet wat er gebeurd als de processor op h00 begint, en er geen instructies staan op de adressen t/m h05.
Beter nog is:
ORG 00h
GOTO INIT
ORG 05h
INIT Hier je code laten beginnen
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
00h is toch de reset vector en moet daaromo vrij blijven
en 04 moet vrij blijven omdat dat de interupt vector is nou kan ik me ook vergissen hoor
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
00h is toch de reset vector en moet daaromo vrij blijven
en 04 moet vrij blijven omdat dat de interupt vector is nou kan ik me ook vergissen hoor
Bij een normale Start gaat de processor naar adres h00.
Bij een Interupt gaat de processor naar adres h04.
Dus op die adressen moet dus juist wel iets staan !
Bijvoorbeeld een goto instruktie.
Wat zou er gebeuren als de processor op een adres komt waarop geen instructies staan ?
[Bericht gewijzigd door MMSoft op ]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
list P=16F627A
include <P16F627A.inc>
__config _BODEN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_OFF &_WDT_OFF &_LVP_OFF &_MCLRE_OFF & _INTRC_OSC_NOCLKOUT
ORG 00h
goto init
ORG 005h
init BCF STATUS, RP1
bcf STATUS, RP0
movlw B'00100000'
movwf PORTB
movlw B'00000000'
movwf PORTA
movlw b'00000000'
movwf CCP1CON
MOVLW B'00000111' ;Disable Comparator module's
mOVWF CMCON
BSF STATUS, RP0
movlw B'00000000'
movwf TRISB
movlw B'11111111'
movwf TRISA
BCF STATUS, RP0
main btfss PORTA, 1
bsf PORTB, 1
btfsc PORTA, 1
bcf PORTB, 1
goto main
End
dit wordt dan de code en die zou het moeten doen
@mmsoft ik heb zon vermoeden van helemaal nix
Het begin ziet er nu in ieder geval goed uit !
Ik zou TRISA en TRISB wel eerder instellen in het Init deel.
Dit is code die ik heb die het dichts de 16F627A benaderd:
LIST P=16F628A
include <P16F628A.INC>
__CONFIG B'11111101010000'
ORG 00h
GOTO INIT
NOP
NOP
NOP
GOTO INTERR
INTERR
RETFIE
INIT CLRF PORTA
CLRF PORTB
BSF STATUS, RP0
MOVLW B'00100000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS, RP0
MOVLW B'00000111'
MOVWF CMCON
Loop BSF PORTB, 1
GOTO Loop
END
Probeer deze eens.
[Bericht gewijzigd door MMSoft op ]
GOTO INTERR INTERR RETFIE
Die code betekent wel dat ALS er een interrupt komt de processor gelijk hangt.
De desbetreffende interrupt flag moet natuurlijk wel gereset worden in deze code...
Maar omdat er geen interrupts vrijgegeven worden kunnen deze niet optreden in dit geval...
Wat zou er gebeurd als de processor op een adres komt waarop geen instructies staan ?
Omdat het geheugen gewist is staat er op deze adressen de waardes 0xFF welke instruktie wordt er dan uitgevoerd ?
[Bericht gewijzigd door MMSoft op ]
Omdat het geheugen gewist is staat er op deze adressen de waardes 0xFF welke instruktie wordt er dan uitgevoerd ?
ADDLW 0xFF
Peter Claus
It is so simple to be happy, but it is so difficult to be simple
@cosphi de 627A heeft geen ADCON1 register
Inderdaad, ik heb het hier bij het foute eind. Sorry voor de misleiding
Deze PIC heeft geen analoge poorten.
Ik zit met die PIC16F874 in mijn hoofd waar ik op het moment aan't mee stoeien ben en die heeft analoge poorten en ook dit register.
en hoe bedoel je hang met haken en ogen aan elkaar?
Ik heb het wat over de layout wat zeker belangrijker wordt bij grotere programma's.
De woorden staan niet mooi onder elkaar wat het heel overzichtelijk maakt en sommige instructies zijn meer ingesprongen dan andere.
Ook maak je een subroutine met maar 1 instructie. Je kan net zo goed die instructie direct uitvoeren.
Dit bijvoorbeeld
main btfss PORTA, 1
goto led_aan
btfsc PORTA, 1
bcf PORTB, 1
goto main
led_aan BSF PORTB, 1
goto main
end
Zou ik meer iets zoals hieronder van maken.
main btfss PORTA,1
bsf PORTB,1
btfsc PORTA,1
bcf PORTB,1
goto main
end