Stránka 1 z 1

MPLAB help?

Napsal: 01 zář 2010, 15:15
od edguy21
Zdravím!


Začínam sa venovať programovaniu PIC.
Potrebujem pomôct s programom MPLAB 8.56.
------simulacia zmeny na vstupnom porte------??????
Viem ako spustiť simulaciu a pod.,ale neviem ako priradiť vstupnym portom zmenu(to je napr.TL-0,1)

Skušam simulaciu s prerušenim ale simulacia ide dookola a neprejde celym zdrojakom ASM,lebo su tam podmienky na zmenu na PORTB,4 ako vstup.
PORTB 4-7 je definovany ako zdroj prerušenia

ASM je simulacia blikania LED a LED1,t.j. ak stlačim TL(PORTB,4) tak začne blikať druha LED ale neviem kde v MPLAB sa definuje zmena na porte.




Diiiky
:idea: :wink:

Napsal: 01 zář 2010, 15:39
od Burajko
zalozka -> Debuger ->Stimulus -> New Workbook objavi sa okno Stimulus,
V zalozke Asynch v prvom riadku a stlpci nastav napr. RB4,v stlpci nastav action napr.Toggle(po kazdom stlaceni Apply sa ti bude menit hodnota RB4)pokial samozrejme mas nakonfigurovany TRIS register ako input.

Napsal: 01 zář 2010, 22:27
od edguy21
Diky
:idea: :wink:

Na zmenu treba stlačiť Fire.

Som myslel že toto len som nevedel ako stlačim,som skušal cez Clock stimulus

----
S programovanim len začinam.
MPLAB na otestovanie lebo MULTISIM občas zblbne,a IRIS ešte nie velmi otestované.



Ešte otazka?
Neviem prečo mi robi prerušenie 2x.Ak stlačim PORTB,4 na 1 a 0 tak robí 2x.Skušal som robiť rôzne kombinacie ale vždy 2X.--to je vždy blika ta ista LED
Ak stlačim PORTB,4 aj počas druheho prerušenia tak ide až 3x.---len vtedy sa prepne LED

nastavenie je asi dobre::
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




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 !!!
#DEFINE   LED2   PORTA,2      ; 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
e2     EQU      h'29'
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'00000001'     ; 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
         nop
         BCF      LED            ; určený počet bliknutí
         nop     
         GOTO     hej

ld2    BSF      LED1           ; provádí blikání LED1
        nop
         BCF      LED1            ; určený počet bliknutí
         nop       
         GOTO     hej
             
;- smycka-------------------------------------------------
 


;- 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
    BSF      LED2           ; provádí blikání LED1
    NOP              ; se v tomto bloku provádí
    BCF      LED2            ; určený počet bliknutí     
    BTFSC TLAC               ;cakat na pustenie TL
    GOTO  $-1
    swapf Sta_sav,w
    movwf STATUS
    swapf W_save,f
    swapf W_save,w
    retfie

   END

[/code]

Napsal: 02 zář 2010, 01:21
od Atlan
LEBO:

a) Provést jakékoli čtení nebo zápis do registru PORTB. Tím dojde k ukončení změnového stavu, vyvolávajícího žádost o
přerušení
b) Nulovat příznak přerušení RBIF

Napsal: 02 zář 2010, 17:15
od MartinOV

Kód: Vybrat vše

BCF INTCON,GIE      ;zakázání všech přerušení

Není třeba, přerušení se automaticky zakáže skokem na adresu 04h. Povoluje se instrukcí RETFIE, která vrátí program na původní místo.

Napsal: 03 zář 2010, 17:55
od Burajko
Ja pouzivam MPLAB 8.50 tam je to apply.