De bedoeling is dat op poort 28 van de 16f870 een blokgolf komt, om dit te realiseren hebben wij de volgende code geproduceerd echter geeft MPlab enige errors als wij de code simuleren. Zien wij wat over het hoofd of vergeten we dingen ?
list p=16f870
include "p16f870.inc"
temp1 EQU 0x32
temp2 EQU 0x33
temp3 EQU 0x30
BSF STATUS, RP0 ; selecteer bank 1
CLRF TRISB ; set TRISB B in write mode
BCF STATUS, RP0 ; selecteer bank 0
Golf:
BSF 06,7 ; set bit 7 hoog
CALL DELAY_X ; wacht x millisec
BCF 06,7 ; set bit 7 laag
CALL DELAY_Y ; wacht y millisec
GOTO Golf
delay_50micros: ; zorgt voor een vertraging van 249 cycli (50 microseconde)
MOVLW d'81'
MOVWF temp1 ; temp1 = 81
loopmicros: ; deze loop wordt 81 maal aangeroepen (3 * 81 cycli)
DECFSZ temp1, 1
GOTO loopmicros
RETURN
DELAY_Y:
MOVLW d'100' ; 10 ms delay
MOVWF temp2 ; temp2 = 100
loopmillis: ; deze loop wordt 100 maal aangeroepen
CALL delay_50micros
CALL delay_50micros
DECFSZ temp2, 1
GOTO loopmillis
RETURN
DELAY_X:
MOVLW d'100' ; 50 ms delay
MOVWF temp3
loopmillis1: ; deze loop wordt 100 maal aangeroepen
CALL delay_50micros
DECFSZ temp3, 1
GOTO loopmillis1
RETURN
END
Het zou schelen als je er ff bij vertelt waar dat ding over zeurt...
Afijn, ik spreek geen PICs, dus uit de losse pols:
- Label loopmillis is 2x gedefinieerd
- Bij de AVR start de uC op address 0. Daar moet dus een JMP naar de eigenlijke start staan. Geen idee hoe PICs dat doen. (owja.. volgende adressen worden voor interrupts ed. gebruikt. RTFD).
- In deze delay loops vergeet je dat de overige instructies ook tijd kosten. Doe zoiets met een timer
De code is okey en mplab geeft geen errors. Wel een hoop warnings, maar dat komt omdat je de instructies in de zelfde kolom zet als de labels.
Op 13 december 2004 15:59:13 schreef Marco69:
Het zou schelen als je er ff bij vertelt waar dat ding over zeurt...
Afijn, ik spreek geen PICs, dus uit de losse pols:
- Label loopmillis is 2x gedefinieerd
- Bij de AVR start de uC op address 0. Daar moet dus een JMP naar de eigenlijke start staan. Geen idee hoe PICs dat doen. (owja.. volgende adressen worden voor interrupts ed. gebruikt. RTFD).
- In deze delay loops vergeet je dat de overige instructies ook tijd kosten. Doe zoiets met een timer
ok ik heb die loops verandered.
we mogen geen timers gebruiken bij deze opdracht maar enkel loops
de fout codes zijn voornamelijk
Warning[203] C:\MPLAB\PROEF 3.ASM 8 : Found opcode in column 1. (BSF)
Error[152] C:\MPLAB\PROEF 3.ASM 8 : Executable code and data must be defined in an appropriate section
Error[151] C:\MPLAB\PROEF 3.ASM 17 : Operand contains unresolvable labels or is too complexError[152] C:\MPLAB\PROEF 3.ASM 25 : Executable code and data must be defined in an appropriate section
k.p.meinesz
Een schizofreen is nooit alleen!
eigelijk is het simpel
als je op de foutcode clickt dan springt mplab naar die foutregel toe in je programma.
nu de eerste BSF staat in de eerste colom dus krijg je een waarschuwing
verder zijn je labels waarschijnlijk te lang
loopmillis1 en delay-50micros
maak daar van milli1 en delay50
grote kans dat een deel van de foutmeldingen al weg is
edit
millis1(tab,tab)goto(tab)millis1
eerste colom het label 2e de opcode derde label of waarde
houd het overzichtelijk
[Bericht gewijzigd door k.p.meinesz op ]