Ich muss das typische Beispiel von 8 LEDs codieren, die ein- und ausgeschaltet werden und dann alle in einer Schleife eingeschaltet werden.
Ich habe einen PIC 18F4550 bekommen und das codiert:
List P=18F4550 ;Microcontrolador a utilizar
include <P18F4550.inc> ;Definiciones de constantes
;********** Palabra de conficuración *******************************************
CONFIG FOSC = INTOSC_EC ;INTOSC_EC ; Internal oscillator
CONFIG PWRT= ON ; Power-up Timer Enable bit
CONFIG BOR=OFF ; Brown-out Reset disabled in hardware and software
CONFIG WDT=OFF ; WDT disabled
CONFIG MCLRE=ON ; MCLR pin enabled
CONFIG PBADEN=OFF ; PORTB<4:0> pins are configured as digital I/O
CONFIG LVP=OFF ; Single-Supply ICSP disabled
CONFIG DEBUG = OFF ; Background debugger disabled
CONFIG XINST = OFF ; Extended Instruction disabled
;******************************Variables***********************************
conta equ 0x00
;**********************************************************************************
org 0x0000
movlw 0x62
movwf OSCCON
clrf TRISD
CICLO
bcf PORTD,0
call RETARDO
bsf PORTD,0
bcf PORTD,1
CALL RETARDO
bcf PORTD,1
call RETARDO
bsf PORTD,1
bcf PORTD,2
CALL RETARDO
bcf PORTD,2
call RETARDO
bsf PORTD,2
bcf PORTD,3
CALL RETARDO
bcf PORTD,3
call RETARDO
bsf PORTD,3
bcf PORTD,4
CALL RETARDO
bcf PORTD,4
call RETARDO
bsf PORTD,4
bcf PORTD,5
CALL RETARDO
bcf PORTD,5
call RETARDO
bsf PORTD,5
bcf PORTD,6
CALL RETARDO
bcf PORTD,6
call RETARDO
bsf PORTD,6
bcf PORTD,7
CALL RETARDO
bcf PORTD,7
call RETARDO
bsf PORTD,7
bcf PORTD,0
CALL RETARDO
bra CICLO
RETARDO
movlw .255
movwf conta
CICLO2
DECFSZ conta,F
bra CICLO2
nop
nop
nop
nop
return
end
Wenn ich simuliere, funktioniert dieser Code fast. Manchmal werden sie nacheinander ein- und ausgeschaltet, beginnend mit der ersten LED, aber manchmal springt die Sequenz und einige zufällige LEDs werden unerwartet eingeschaltet.
Ich habe zuvor versucht, diesen Teil des Codes hinzuzufügen, bra CICLO
um den gesamten LED-ON-Effekt zu erzeugen, aber es hat nur dazu geführt, dass es sich am schlechtesten verhält.
bcf PORTD,0
bcf PORTD,1
bcf PORTD,2
bcf PORTD,3
bcf PORTD,4
bcf PORTD,5
bcf PORTD,6
CALL RETARDO
bsf PORTD,1
bsf PORTD,2
bsf PORTD,3
bsf PORTD,4
bsf PORTD,5
bsf PORTD,6
bsf PORTD,7
CALL RETARDO
Dies ist ein Bild meiner Simulation:
Was mache ich falsch? Wie kann ich bei 4 MhZ sicherstellen, dass die Verzögerungen 1 Sekunde betragen?
Versuchen Sie, in die entsprechenden LATDx-Register zu schreiben, verwenden Sie nur PORTD für Leseoperationen
bcf LATD,0
Dies sollte Ihr Problem beheben
bcf LATD,x
undbsf LATD,x
Ricardo