Hallo,
Voor school probeer ik een looplichtje te maken (als tussen fase) om te testen hoe de bitshift werkt.
Ik heb een PIC16F73 een handje vor weerstanden en led's.
Nu heb ik via de PIC tutorial het knipperlichtje van het politie project gemaakt.
Deze heb ik toen aangepast met een bit shift.
Nu werkt dit niet en ik weet niet waarom.
Ik heb het zelfs zo simpel gemaakt door eenmaal een bitshift commande (RRF) in de code te plaatsen maar er gebeurd helemaal niks (geen klipperend ledje, helemaal niks).
Ergens gaat het fout bij de RRF maar ik weet niet waarom.
Zonder de RRF werkt alles prima en knipperen 2 ledjes.
Welke fout maak ik?
code:
#include <p16f73.inc>
instelporta EQU 85h
porta EQU 05h
teller EQU 40h
teller2 EQU 41h
ORG 00h ;beginadres kiezen
BSF 03,5 ;kies bank 1
CLRF instelporta ;alles pinnen poort A uitgang maken
BCF 03,5 ;kies bank 0
knipper MOVLW 03h ;laad 01h in W
MOVWF porta ;zet de waarde van W
;in porta, oftewel zet de led aan
RRF porta,1
MOVLW 0FFh ;laad 0FFh 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 porta ;zet de waarde van W
;in porta, oftwel doe de led uit
MOVLW 0FFh ;1 cycle
MOVWF teller2 ;1 cycle
again MOVLW 0FFh ;1 cycle
MOVWF teller ;1 cycle
again2 DECFSZ teller, 1 ;1 cycle
GOTO again2 ;2 cycles
DECFSZ teller2, 1
GOTO again
GOTO knipper
ENDFuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Je kunt beter een RAM-register gebruiken voor het schuiven van je bits, en dat na het schuiven naar de uitgangspoort kopiëren. Je hebt waarschijnlijk last van het Read-Modify-Write probleem, een bekend probleem bij zwaar belaste poorten op PICs.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Het zal wel schelen als je porta op digitaal zet... (is default analoog). Tevens doet een RRF een rotate-through-carry, dus of de led aan of uit gaat is afhankelijk van wat er toevallig in het carry-bit staat...
Verder de gebruikelijke opmerkingen: Gebruik de 'gewone' registernamen uit de include file, en niet bsf 03,5; dat begrijpt geen hond zonder het eerst op te moeten zoeken in de datasheet...
Porta is al gedefinieerd in de include file.
hadv
Just find out what you like and let it kill you
Nee, PORTA is gedefineerd in de include, porta niet. Al had ik het persoonlijk dan anders gedaan: porta EQU PORTA.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Thx, Door eerst de status van porta naar een ander stuk geheugen te schrijven werkte het wel (zoals fuzzbass zei).
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com