Idem sa konečne pustiť do programovania PIC
Potrebujem pomôcť s MULTISIM.
PIC 16F84
Začínam sa baviť so simulaciou PIC.Programator PICKIT kupím neskôr.
Ako prvu zložitejšiu funkciu chcem otestovať prerušenie,ale neviem kde je chyba či v programe alebo v MULTISIM,lebo som skusil rozne zapojenia a nič.
Neviem či to Multisim vie lebo ak nie tak na simulaciu PIC neviem čo použijem ešte pred naprogramovanim.
Nechcem teraz sedieť hodiny za tym a rozmyšľať kde je chyba.
multisim
Kód: Vybrat vše
http://www.edisk.sk/stahni/86891/rar.rar_156.24KB.html
Ak neviete vyjsť z môjho zapojenia tak poprosím o vaše jednoduché zapojenie na Prerušenie PORT 4-7 napr,niečo na Blikač
Je to blikanie LED a LED1
Ak vždy stlačim TL vyvolam prerušenie ,zmenim parameter "prep"=0a1 a tým sa zmení na blikanie LED alebo LED1 ,a zmení sa aj rychlosť
Teraz tu je vyvolane prerušenie z RB4-RB7,ani to nejde ako nešlo RB0
Prerušenie a uloženie hodnot mam asi spravne ale neviem či aj
nastavenie prerušenia a zmazanie
port4
prerušenie::
prerus movwf W_save
swapf STATUS,w
movwf Sta_sav
......
......
.....
.....
swapf Sta_sav,w
movwf STATUS
swapf W_save,f
swapf W_save,w
retfie
zmazanie prerušenia:::
ORG 04h ;vektor přerušení
BCF INTCON,GIE ;zakázání všech přerušení
BCF INTCON,RBIF ;smazání příznaku přerušení od RB4-RB7
nastavenie prerušenia:::
init ...
.....
.....
MOVLW B'10001000' ; povoleni preruseni pouze od RB0
MOVWF INTCON
....
ASM------------------
Kód: Vybrat vše
LIST P=16F84
INCLUDE<P16F84.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _RC_OSC
#DEFINE TLAC PORTB,4 ; tlacidlo
#DEFINE TLAC1 PORTB,3 ; tlacidlo
#DEFINE LED PORTA,0 ; za stredniky !!!
#DEFINE LED1 PORTA,1 ; za stredniky !!!
c2 EQU h'21' ;proměnné pro cykly
cas EQU h'30' ;pocet bliknuti
prep EQU h'22' ;prepinac blikania medzi LED a LED1
GIE EQU H'0007'
EEIE EQU H'0006'
T0IE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
T0IF EQU H'0002'
INTF EQU H'0001'
RBIF EQU H'0000'
W_save equ 29h ; zaloha w
Sta_sav equ 25h ; zaloha status
PCL_sav equ 26h ; zaloha pcl
FSR_sav equ 27h ; zaloha fsr
;- zaciatok-------------------------------------------------
ORG 00h ;přesun na vykonávání
GOTO init ;programu
ORG 04h ;vektor přerušení
BCF INTCON,GIE ;zakázání všech přerušení
BCF INTCON,RBIF ;smazání příznaku přerušení
GOTO prerus
;- inicializacia-------------------------------------------------
init BSF STATUS,RP0
MOVLW B'00000000' ; port A vystup
MOVWF TRISA
MOVLW B'11111111' ; port B vstup
MOVWF TRISB
BCF STATUS,RP0
MOVLW B'10001000' ; povoleni preruseni pouze od RB0
MOVWF INTCON
MOVLW B'00100000' ; vloženie 64 smyčku
MOVWF cas
;- prepinanie LED-------------------------------------------------
hej BTFSC prep,0
GOTO ld1
BTFSS prep,0
GOTO ld2
;- blikanie-------------------------------------------------
ld1 BSF LED ; provádí blikání LED
CALL cekej ; podle hodnoty tempu
CALL cekej ; se v tomto bloku provádí
BCF LED ; určený počet bliknutí
CALL cekej
CALL cekej ;podprogram čekání
GOTO hej
ld2 BSF LED1 ; provádí blikání LED1
CALL cekej ; podle hodnoty tempu
CALL cekej ; se v tomto bloku provádí
BCF LED1 ; určený počet bliknutí
CALL cekej
CALL cekej ;podprogram čekání
GOTO hej
;- smycka-------------------------------------------------
cekej MOVF cas,w ;podprogram čekání
MOVWF c2
wait2 DECFSZ c2,1
GOTO wait2
RETURN ;návrat z podprogramu
;- prerusenie --zniženie blikania-----------------------------------------------
prerus movwf W_save
swapf STATUS,w
movwf Sta_sav
MOVLW B'00100000'
ADDWF cas,1 ;pripocitanie na zmeny rychlosti
comf prep,1 ;zmena LED a LED1
BTFSC TLAC ;cakat na pustenie TL
GOTO $-1
swapf Sta_sav,w
movwf STATUS
swapf W_save,f
swapf W_save,w
retfie
END
Diiiiky za každu radu