
Frågan var hu du ska kunna sätta TRISC rätt om du inte först laddar W med korrekt värde ?
Alltså hur det *överhuvudtaget* ska kunna fungera med MOVLW instruktionen bortkommenterad...
Jag ska kolla lite senare i dag...
Enkelt!Jag vill att det ska fungera så här,
LED 1 = RC0 = ska blinka
LED 2 = RC1 = ska lysa
LED 3 = RC2 = ska blinka
LED 4 = RC3 = ska lysa
Kod: Markera allt
MOVLW XXh ; <- Ersätt XX med rätt värde
MOVWF TRISC ;and set RC<0,1,2,3> ;as outputs
Kod: Markera allt
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Delay1 ; Define two file registers for the
Delay2 ; delay loop
endc
org 0
start
bsf STATUS,RP0
clrf TRISC
bcf STATUS,RP0
; movlw b'00000001' ; turn on LED C0
; movwf PORTC
; movlw b'00000010' ; turn on LED C1
; movwf PORTC
MainLoop
; movlw b'00000100' ; turn on LED C2
; movwf PORTC
movlw b'00001001' ; turn on LED C0 & C3
movwf PORTC
OndelayLoop
decfsz Delay1,f ; Waste time.
goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
decfsz Delay2,f ; The outer loop takes and additional 3 instructions per lap * 256 loops
goto OndelayLoop ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
; call it a two-tenths of a second.
; movlw b'00000100' ; turn on LED C2
; movwf PORTC
movlw b'00000000' ; turn off LED
movwf PORTC
OffDelayLoop
decfsz Delay1,f ; same delay as above
goto OffDelayLoop
decfsz Delay2,f
goto OffDelayLoop
goto MainLoop ; Do it again...
end
Kod: Markera allt
movlw b'00001111' ; turn on LED C0 & C3 (and C1 and C2...)
movwf PORTC
movlw b'00000110' ; turn off LED (and C1 and C2 on...)
movwf PORTC
Kod: Markera allt
movlw b'00001111' ; turn on LED C0 & C1 (and C2 and C3...)
movwf PORTC
movlw b'00001100' ; turn off LED (and C2 and C3 on...)
movwf PORTC
Kod: Markera allt
cblock 0x20
Delay1 ; Define two file registers for the
Delay2 ; delay loop
portc_tmp ; shadow reg
endc
ON equ 1
OFF equ 0
#define C0 portc_tmp, 0
#define C1 portc_tmp, 1
#define C2 portc_tmp, 2
#define C3 portc_tmp, 3
set_led macro led, onoff
if onoff == 1
BSF led ; Tänd LED (i shadow reg)
else
BCF led ; Släck LED (i shadow reg)
endif
movf portc_tmp, w
movwf portc ; Uppdatera LEDs
endm
org 0
start
bsf STATUS,RP0
clrf TRISC
bcf STATUS,RP0
; Sätt startläge på LEDs.
set_led C0, off
set_led C1, off
set_led C2, on
set_led C3, on
MainLoop
setled C0, on
setled C1, on
OndelayLoop......
...
...
setled C0, off
setled C1, off
OffDelayLoop.....
...
...
goto MainLoop ; Do it again...
end
Kod: Markera allt
cblock 0x20
Delay1 ; Define two file registers for the
Delay2 ; delay loop
endc
ON equ 1
OFF equ 0
#define C0 portc, 0
#define C1 portc, 1
#define C2 portc, 2
#define C3 portc, 3
set_led macro led, onoff
if onoff == 1
BSF led ; Tänd LED
else
BCF led ; Släck LED
endif
endm
[resten är lika...]
Kod: Markera allt
set_led C0, off
set_led C1, off
set_led C2, on
set_led C3, on
Kod: Markera allt
if onoff == 1
Kod: Markera allt
BCF led ; Släck LED
Kod: Markera allt
BCF led ; Släck LED
Kod: Markera allt
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Delay1 ; Define two file registers for the
Delay2 ; delay loop
portc_tmp ; shadow reg
endc
ON equ 1
OFF equ 0
set_led macro led, onoff
if onoff == 1
BSF portc_tmp, led ; Tänd LED (i shadow reg)
else
BCF portc_tmp, led ; Släck LED (i shadow reg)
endif
movf portc_tmp, w
movwf portc ; Uppdatera LEDs
endm
org 0
start
bsf STATUS,RP0
clrf TRISC
bcf STATUS,RP0
; Sätt startläge på LEDs.
set_led 0, off
set_led 1, off
set_led 2, on
set_led 3, on
MainLoop
set_led 0, on
set_led 1, on
OndelayLoop
decfsz Delay1,f ; Waste time.
goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
decfsz Delay2,f ; The outer loop takes and additional 3 instructions per lap * 256 loops
goto OndelayLoop ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
; call it a two-tenths of a second.
set_led 0, off
set_led 1, off
OffDelayLoop
decfsz Delay1,f ; same delay as above
goto OffDelayLoop
decfsz Delay2,f
goto OffDelayLoop
goto MainLoop ; Do it again...
end
Kod: Markera allt
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Delay1 ; Define two file registers for the
Delay2 ; delay loop
endc
ON equ 1
OFF equ 0
set_led macro led, onoff
if onoff == 1
BSF portc, led ; Tänd LED (i shadow reg)
else
BCF portc, led ; Släck LED (i shadow reg)
endif
endm
org 0
start
banksel trisc
clrf TRISC
banksel portc
; Sätt startläge på LEDs.
set_led 0, off
set_led 1, off
set_led 2, on
set_led 3, on
MainLoop
set_led 0, on
set_led 1, on
OndelayLoop
decfsz Delay1,f ; Waste time.
goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
decfsz Delay2,f ; The outer loop takes and additional 3 instructions per lap * 256 loops
goto OndelayLoop ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
; call it a two-tenths of a second.
set_led 0, off
set_led 1, off
OffDelayLoop
decfsz Delay1,f ; same delay as above
goto OffDelayLoop
decfsz Delay2,f
goto OffDelayLoop
goto MainLoop ; Do it again...
end