mijn eerste project... en het wil maar niet lukken
Ik wou de leds aansturen met een pic 16f628a en de
poorten b gebruiken, maar dit zonder resultaat
zou iemand eens mijn sqript willen nazien en mij duidelijk maken wat ik fout doe?
ik gebruik de MPlab 6.6 en bij het BUILDEN gaat alles goed enkel op de "regel 10" geeft deze een waarschuwing geen ERROR.
;16f628a
instelportb EQU 86h
PORTB EQU 06h
teller EQU 40h
teller2 EQU 41h
ORG 00h ;eerste regel
CLRF instelportb ;alle poorten b uitgangen
knipper MOVLW 01h ;laad 01h in W
MOVWF PORTB ; zet waarde invan W in poort b
; of zet led aan
MOVLW 0FFh ;laad 0FFh (hex voor 255) in W
MOVWF teller2
verder MOVLW 0FFh
MOVWF teller
opnieuw DECFSZ teller, 1
GOTO opnieuw
DECFSZ teller2, 1
GOTO verder
MOVLW 00h ;laad 00h in W
MOVWF PORTB ;zet waarde W in portb (led uit)
MOVLW 0FFh ;1ste cycle
MOVWF teller2 ; " " "
again MOVLW 0FFh ; " " "
MOVWF teller ; " " "
again2 DECFSZ teller, 1 ; " " "
GOTO again2 ;2 de cyclus
DECFSZ teller2, 1
GOTO again
GOTO knipper
END
als je geen foutmeldingen, maar alleen warnings krijgt, dan is er syntactisch niets mis met je programma. Of het programma doet wat je wil, is natuurlijk de vraag.Heb je al een blink-a-led programma geschreven? Print je code eens uit en loop hem op papier na met een potlood en gum. Je zult zien waar de fout zit.. (zo vind ik mijn 'onvindbare' bugs tenminste')
Fripster
By the way: 0FFh en FFh zijn hetzelfde. Ik schrijf zelf altijd 0xFF, dat is gestandaardiseerd nl.
Doe je zelf een plezier en gebruik een .inc file! werkt veel prettiger. Kijk hier maar eens:
mijn include file
stukje werkende code
[Bericht gewijzigd door fripster op ]
maak eens een programma dat alle pins van de B poort hoog zet. Als je dan nog geen signaal krijgt, dan heb je een config probleem. Hoe staat je config eigenlijk?????
Deze staat niet in je code!
Ik gebruik altijd:
__CONFIG _BODEN_ON &_CP_OFF &_DATA_CP_OFF &_PWRTE_OFF &_WDT_OFF &_LVP_OFF &_MCLRE_ON &_HS_OSC
Fripster
Turbokeu
Golden Member
I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
Het TRISB register zit in Bank1.
Dus:
BSF STATUS,RP0
CLRF instelportb ;alle poorten b uitgangen
BCF STATUS,RP0
En werk met de .INC file!:
BSF STATUS,RP0
CLRF TRISB ;alle poorten b uitgangen
BCF STATUS,RP0
CD 
PS: De warning die je krijgt, vb.:
Message[302] D:\ISIS\DOT CLOCK\LED-DOT-V10.ASM 499 : Register in operand not in bank 0. Ensure that bank bits are correct.
Is om je te waarschuwen dat je op deze regel moet opletten omdat het register in een andere bank staat en je zelf moet controleren dat de bankselectie correct gebeurd is.
[Bericht gewijzigd door Turbokeu op ]
wat is in gods naam een "inc file"
wat is het verschil van wat ik hier gebruik
wordt dit door MPLAB ondersteund en vind ik hier info over want ik geloof dat hier weer ander commando's gebruikt worden?
ik dacht dat ik het juist gedaan had,
ik geloof dat ik het bos door de bomen niet meer zie
BSF STATUS,RPO waarom RPO
en niet bv 03h, o6h dit had ik al geprobeert
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
In de installatiemap van MPLAB vind je .INC file's voor alle PIC's, door deze in je programma toe te voegen kan je alle registers gewoon met hun naam noemen. PORTB bijvoorbeeld zal automagisch 06h zijn, je kan dan gewoon de namen gebruiken, veel leesbaarder.
Voor het selecteren van de juiste bank kan je trouwens het commando 'bansel' gebruiken. Daardoor zal MPLAB ervoor zorgen dat de PIC naar de bank waarop de instructie die je na 'banksel' zet, zal springen. Bijvoorbeeld 'banksel TRISB' (werkt dankzij de .INC file).
BSF STATUS,RPO waarom RPO
en niet bv 03h, o6h dit had ik al geprobeert
Ik ben een mens, en werk daarom liever met "woorden" dan met cijfers. Het is perfect mogelijk je PIC programma te schrijven in '1'tjes en '0'len maar dan zal niemand je code snappen.
Het is even slikken op op gang te geraken, maar het lukt je wel hoor, die .INC is voor je eigen gemak, die bank selecting is een klein ongemak dat je snel doorhebt, over een paar maanden kan je alles met een PIC
.
[Bericht gewijzigd door Videomodulator op ]
Turbokeu
Golden Member
I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
De .INC files staan in de C:\Program Files\Microchip\MPASM Suite directory.
Deze bevatten voor elke PIC processor de benaming en het adres voor elk register, de registerbits, de configuratiebits zodat je i.p.v.:
BSF 03,05 ; adres 03h is het STATUS register, bit 5 is het RP0 bithet volgende kan gebruiken:
BSF STATUS,RP0 ; het is dus RP(nul) en niet RPO (letter 'O')hetgeen véél gemakkelijker èn véél duidelijker is. Je moet geen adressen of bitposities onthouden, enkel de naam.
Open maar eens bvb. het PIC16F628A.INC bestand en bestudeer het.
Om deze INC files te gebruiken volstaat het in het begin van je code volgende lijnen op te nemen (hier voor een 16F628A):
Processor 16F628A
LIST P=PIC16F628A
#INCLUDE "P16F628A.INC"
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _LVP_OFF & _BODEN_OFF & _PWRTE_ONDe laatste lijn bevat je configuratiebits en laat toe dat deze door de (meeste) programmersoftware ingelezen worden en automatisch meegeprogrammeerd worden.
CD 
Edit: Videootje was me net vòòr...
Turbokeu
Golden Member
I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
Op 25 september 2006 08:57:51 schreef mozes811:
BSF STATUS,RPO waarom RPO
en niet bv 03h, o6h dit had ik al geprobeert
Het is geen RPO maar RP0 (nul).
03h,06h is het RP1 bit, in jouw geval moet je RP0 setten (zie mijn post hoger).
Zoals Video al zei is er ook het BANKSEL directive in MPLAB (zoals je ook PAGESEL hebt).
Indien je schrijft:
BANKSEL TRISB
CLRF TRISBgaat de MPLAB compiler bij het compileren automatisch het RP0 en/of RP1 bit correct zetten in de HEX-code zodat je in de juiste geheugenbank terechtkomt.
CD 
ik ga deze avond nog eens alles overdoen,
ik dank u reeds voor de verduidelijking,
waarschijnlijk zullen er nog wel enkelevragen volgen
Op 25 september 2006 08:57:51 schreef mozes811:
[...]
BSF STATUS,RPO waarom RPO
en niet bv 03h, o6h dit had ik al geprobeert
Denk je goed om de o/O en de 0?
Zou het kunnen dat de ".INC files" staan onder
project wizard (step four)
C
-programma files
-PMLAB IDE
-MCHIP_TOOLS
+ EXAMPLE
+ LKR
+ TEMPLATE
*MPLINK.EXE
*........inc (enz.)
moet ik deze dan gewoon in de rechter kolom invoegen en aanvinken? Samen met de "template-object .asm" en de ".lkr"
Is er enig dokumentatie ivm de commando's zoals "BANKSEL" want ik veronderstel dat er nog meerdere zijn of vergis ik mij.
Turbokeu
Golden Member
I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
Ik weet niet waar de INC files staan in MPLAB IDE V6.6 (ik gebruik V7.4) maar zo moeilijk zijn deze toch niet te vinden?
De INC files beginnen met 'P' gevolgd door de naam van de processor (bvb. P16F876A.INC).
Alle compiler directives staan duidelijk beschreven in de MPLAB IDE Help file (Language Tools - MPASM Assembler).
CD 
@turbokeu
wat is het verschil tussen bank 0 en bank 1 hier staat in beide een status register 06h en 86h en waarom de voorkeur naar een bepaalde of is dit van minder belang
Op 26 september 2006 06:16:25 schreef Turbokeu:
Ik weet niet waar de INC files staan in MPLAB IDE V6.6 (ik gebruik V7.4) maar zo moeilijk zijn deze toch niet te vinden?
De INC files beginnen met 'P' gevolgd door de naam van de processor (bvb. P16F876A.INC).Alle compiler directives staan duidelijk beschreven in de MPLAB IDE Help file (Language Tools - MPASM Assembler).
CD
start --zoeken - typ : *.inc
en windows helpt u zoeken !!
succes
Turbokeu
Golden Member
I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
Op 26 september 2006 22:07:12 schreef mozes811:
@turbokeuwat is het verschil tussen bank 0 en bank 1 hier staat in beide een status register 06h en 86h en waarom de voorkeur naar een bepaalde of is dit van minder belang
Verschillende registers zijn 'ontdubbeld' (in twee geheugenbanken aanwezig), of zelfs in alle 4 banken aanwezig.
bvb.
STATUS register: adres 03h, 83h, 103h, 183h.
Dit adres wijst allemaal naar hetzelfde register, het is alleen bereikbaar vanuit elke bank zonder te moeten veranderen van bank.
Dus bvb. BTFSS STATUS,Z kan je uitvoeren vanuit elke bank zonder de RPx bits te moeten zetten.
CD 
PS: Adres 06h en 86h is het PORTB en TRISB register dat respectievelijk ook terug te vinden is in adres 106h en 186h.