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

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 ]