Multisim+prerušenie

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
edguy21
Příspěvky: 44
Registrován: 16 říj 2007, 02:00

Multisim+prerušenie

#1 Příspěvek od edguy21 »

Zdravím!


Idem sa konečne pustiť do programovania PIC 8O 8O
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
Obrázek

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
:idea: :wink:
Naposledy upravil(a) edguy21 dne 29 srp 2010, 12:35, celkem upraveno 1 x.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#2 Příspěvek od MiloPS3 »

Cau, priznak preruseni od RB0 je INTF, instrukce SWAPF prohodi spodni a horni 4 bity , takze pokud tam je 0 tak se to nemeni ,jestly chces negovat tak instrukci COMF, pokud neni chyba jinde mohlo by to fungovat
Přílohy
edguy21.asm
(3.28 KiB) Staženo 163 x

Uživatelský avatar
edguy21
Příspěvky: 44
Registrován: 16 říj 2007, 02:00

#3 Příspěvek od edguy21 »

:wink: :wink: :wink:
DDDDDDDDDDDDiiiky už ide aj rychlost aj zmena LED a LED1
neviem presne kde bola chyba,možno definicia TLAC a priznak povolenia prerušenia či nulovania
ide aj RBO aj RB4

dobabral som to lebo som to chcel asi narýchlo a chybička kedykoľvek nastane

00.Skusím aj program ISIS, to je PROTEUS že????
0.MPLAB viem čo je a použivat budem
1.simulacia ide aj so zapojenymi VDD VSS na PIC
2.RBIF som zamenil s INTF nechtiac ked som posielal prosbu na forum ,opravene na fore
---ak PORTB,4 zmenit
#DEFINE TLAC PORTB,4 ; tlacidlo

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

MOVLW B'10001000' ; povoleni preruseni pouze od RB4
MOVWF INTCON

---ak PORTB,0 zmenit
#DEFINE TLAC PORTB,4 ; tlacidlo

ORG 04h ;vektor přerušení
BCF INTCON,GIE ;zakázání všech přerušení
BCF INTCON,INTF ;smazání příznaku přerušení
GOTO prerus

MOVLW B'10010000' ; povoleni preruseni pouze od RB0
MOVWF INTCON
-----
3. BCF INTCON,GIE tiež sa použiva aj nulovanie GIE
4.Uloženie W a STATUS mam podla datashet kde je použite aj SWAPF,inde na niektorych konštrukciach to niektory nepouživaju

3.zmena blikania LED na LED1--lebo neišlo so SWAPF::::
SWAPF prep,1 som zmenil na comf prep,1







Ešte otazočka na prerušenia??
RB4-RB7 ako prerušenie + vystup počas prerušenia na odoslanie dat ide to ????
Napr.ak použijem PORTB4-7 pre tlačidla na prerušenie ,možem ich použit ak Vystup počas Prerušenia napr.na posun registrov(a pod.) pre LED display,
videl som niečo podobne v Učebnica programovania PIC


Příklad 6-1: Uložení obsahu registru W a STATUS do RWM
PUSH MOVWF W_TEMP ; uložení střadače do záložního registru
SWAPF STATUS,W ; načtení obsahu registru STATUS do střadače (s přemístěním horních a dolních 4 bitů)
MOVWF STATUS_TEMP ; uložení obsahu registru STATUS do záložního registru
ISR : :
:
; rutina obsluhy přerušení, která může libovolně měnit volbu banky registrů
POP SWAPF STATUS_TEMP,W ; načtení záložního registru s původním STATUS (s přemístěním horních a dolních 4 bitů)
MOVWF STATUS ; uložení původního obsahu STATUS do registru STATUS (POP)
; (obnovení volby banky registrů)
SWAPF W_TEMP F ; přemístění horních a dolních 4 bitů v


ešte raz VĎAKA
:idea: :wink:
p.s. MPLAB už použijem a teraz už možem tvoriť zložitejšie zapojenia s PIC a študovať TMR,SLEEP a mnoho viac o PIC,zapojenia LED,DISPLAY,Krok.motor.............

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#4 Příspěvek od Atlan »

Pozor na RA4 pin...je s otvorenym kolektorom na 16f84 16f628 a podobne asi na vsetkych picoch.

Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 02:00
Bydliště: Vysočina

#5 Příspěvek od Chenzee »

Priznak preruseni zmenou na RB4-RB7 lze smazat az po precteni registru PORTB.
Žádnej učenej z nebe nespadl ...

Uživatelský avatar
edguy21
Příspěvky: 44
Registrován: 16 říj 2007, 02:00

#6 Příspěvek od edguy21 »

Ok
takže počas prerušenia možem zmenit vstup na vystup kde su TL

PIC naštudujem ako to je s rezistormi na TL

napr.na RB4-RB7 budu TL ale možno aj iny PIC alebo LED alebo posuvny register...a pod. ak by som obsadil všetky piny ----
ˇškola programovania tam boli TL na PORTeB ale aj pripojeny posuvny register pre Multiplexny režim 7segment.Led displeja

Uživatelský avatar
edguy21
Příspěvky: 44
Registrován: 16 říj 2007, 02:00

#7 Příspěvek od edguy21 »

nevieš ako to je s Multisim::
kopia v novom projekte a simulacia

ak vytvorim schemu s PIC+asm ide,
potom dam novy projekt a všetko skopirujem ale nejde,kopiu robim preto aby som niečo upravil v scheme aj v asm a nerobil všetko odznova

Robim všetko teraz odznovu -inu schemu ale už ani to nejde



neviem či treba novu schemu robit od začiatku alebo program(pochybujem že chyba je tu)


ono asi nejde ani s klasickymi sučiastkami ak skopirujem do noveho projektu

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“