C
c36041254
Guest
, what I want to do is that LED # 1 lights continiously as power is switched on and as interrupt occur (RB4 goes HIGH ) LED # 1 gets off and LED # 2 lights on and this remains so untill interrupt is not removed.
Ik probeer IOC gebruiken (interr. op verandering) in 628, hier is de code die goed werkt op simmulator maar niet op hardware,
wat ik wil doen is dat de # 1 LED-lampen als de continu stroom wordt ingeschakeld en als onderbreken optreden (RB4 gaat HIGH) LED # 1 krijgt af en LED-lampjes op # 2 en dit blijft zo totdat onderbreken wordt niet verwijderd.
Maar, is wat er feitelijk gebeurt is dat als interr.optreden (RB4 gaat hoog) LED # 1 dooft, maar, LED # 2 niet oplicht, niet kan begrijpen Whats wrong, please help!
Code:
list p = 16F628
# include <p16f628.inc>
__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
ERRORLEVEL -302
cblock 0x20
temp
temp_s
endc
;************************************************* *****************
org 0x00
goto main
;*********************************** INTERRUPT LOOP ************ *****
org 0x04
onder:
movwf temp
swapf STATUS, w
clrf STATUS
movwf temp_s
MOVLW b'10000000 '
movwf PORTA
btfsc PORTB, 0x04
goto onder
BCF INTCON, 0x00
swapf temp_s, w
movwf STATUS
swapf temp, w
retfiemain:
bsf INTCON, 0x07; Globel onderbreken mogelijk te maken (wij gebruiken interr.)bsf INTCON, 0x03; RB4-RB7 onderbreken op verandering is ingeschakeld / met andere woorden deze pinnen zal ook werken als
, interrupts en onderbreken zal optreden elke keer dat een van deze veranderingen staat pin
, Dwz: hoog naar laag of laag naar hoog, we kunnen niet instellen om op eather een staat veranderen
BCF INTCON, 0x00; Clear RB4-RB7 onderbreken vlag zo, dat een andere interr.
optreden.
;********************************** SET UP DE HAVENS *********** ******
bsf STATUS, RP0; schakelaar aan Bank 1
MOVLW b'00010001 '
movwf TRISB; set RB0 & RB4 als input
MOVLW b'00000000 '
movwf TRISA; setPORT A alle output
BCF OPTION_REG, 0x07; staat zwak pull ups op poort b / pull ups verstaan interne weerstanden
bsf OPTION_REG, 0x06; interuupt over de stijgende leeftijd / dit is defoult ingesteld
BCF STATUS, RP0; terug naar bank 0
movlw 0x07; comparatoren uitschakelen, zo hoog zal eenvoudig zijn
; HOGE dan 5 V (ten opzichte van levering), zodat met de lage
movwf CMCONLoop:MOVLW b'00000001 '
movwf PORTA; set pin 0 van de haven een HOGE
goto Loop
END
Ik probeer IOC gebruiken (interr. op verandering) in 628, hier is de code die goed werkt op simmulator maar niet op hardware,
wat ik wil doen is dat de # 1 LED-lampen als de continu stroom wordt ingeschakeld en als onderbreken optreden (RB4 gaat HIGH) LED # 1 krijgt af en LED-lampjes op # 2 en dit blijft zo totdat onderbreken wordt niet verwijderd.
Maar, is wat er feitelijk gebeurt is dat als interr.optreden (RB4 gaat hoog) LED # 1 dooft, maar, LED # 2 niet oplicht, niet kan begrijpen Whats wrong, please help!
Code:
list p = 16F628
# include <p16f628.inc>
__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
ERRORLEVEL -302
cblock 0x20
temp
temp_s
endc
;************************************************* *****************
org 0x00
goto main
;*********************************** INTERRUPT LOOP ************ *****
org 0x04
onder:
movwf temp
swapf STATUS, w
clrf STATUS
movwf temp_s
MOVLW b'10000000 '
movwf PORTA
btfsc PORTB, 0x04
goto onder
BCF INTCON, 0x00
swapf temp_s, w
movwf STATUS
swapf temp, w
retfiemain:
bsf INTCON, 0x07; Globel onderbreken mogelijk te maken (wij gebruiken interr.)bsf INTCON, 0x03; RB4-RB7 onderbreken op verandering is ingeschakeld / met andere woorden deze pinnen zal ook werken als
, interrupts en onderbreken zal optreden elke keer dat een van deze veranderingen staat pin
, Dwz: hoog naar laag of laag naar hoog, we kunnen niet instellen om op eather een staat veranderen
BCF INTCON, 0x00; Clear RB4-RB7 onderbreken vlag zo, dat een andere interr.
optreden.
;********************************** SET UP DE HAVENS *********** ******
bsf STATUS, RP0; schakelaar aan Bank 1
MOVLW b'00010001 '
movwf TRISB; set RB0 & RB4 als input
MOVLW b'00000000 '
movwf TRISA; setPORT A alle output
BCF OPTION_REG, 0x07; staat zwak pull ups op poort b / pull ups verstaan interne weerstanden
bsf OPTION_REG, 0x06; interuupt over de stijgende leeftijd / dit is defoult ingesteld
BCF STATUS, RP0; terug naar bank 0
movlw 0x07; comparatoren uitschakelen, zo hoog zal eenvoudig zijn
; HOGE dan 5 V (ten opzichte van levering), zodat met de lage
movwf CMCONLoop:MOVLW b'00000001 '
movwf PORTA; set pin 0 van de haven een HOGE
goto Loop
END