Sari la conținut
ELFORUM - Forumul electronistilor

Intreruperi 16F84A


XName

Postări Recomandate

am facut o intrerupere simpla de tot

picul se manifesta astfel , la alimentare totul este stins, la apasarea pe butonul legat la RB7 se apinre ledul de pe RA1, dar la o noua apasare aceasta nu se mai stinge, desi asa ar trebui sa faca :(

#include p16F84a.inc   LIST p=PIC16F84A   ;modelul de microcontroler   __CONFIG _XT_OSC & _WDT_OFF test EQU 0BANK0 macro   bcf STATUS,RP0   endm BANK1 macro   bsf STATUS,RP0   endmIntrerupere macro  BANK0  movfw PORTA  movwf test  btfsc test,1 ;dc test,1=1  fa 0 la porta, sari pt 0  clrf PORTA  btfss PORTA,1 ;dc test,1=0 fa 1 la porta, sari pt 1  bsf PORTA,1  bcf INTCON, RBIF  retfie   endm  ;***********************   ORG 0x0000 ;Vectorul RESET   goto Main  ORG 0x0004 ;Vectorul INTRERUPERE  Intrerupere  goto Main ;************** Programul principal ********************************* Main   BANK0   clrf PORTB   BANK1   movlw B'10000000'   movwf TRISB   BANK0   clrf PORTA   BANK1   movlw B'00000000'   movwf TRISA   BANK0  BANK0  clrf INTCON  movlw B'10001000'  movwf INTCON Loop   goto Loop   end 
Link spre comentariu
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • XName

    2

  • CristianC

    1

  • Abram Burel

    1

Zile populare

Top autori în acest subiect

Pai, daca incarci in test si la btfss testezi... PORTA :)De fapt, chestia cu cititul unui port de iesire nu e deloc buna. Tine "imaginea" lui PORTA in test de la la inceput, prelucreaza-l pe test si scriel la final in PORTA.

Link spre comentariu

Am vazut ca ai definit vaariabil "test" la adresa 0. Asta inseamna ca de fapt scrii intr-un registru special (INDF). Setul de registrii generali pentru PIC16F84A incepe cu adresa 0x1C.

 

ex:

#include p16F84a.inc   LIST p=PIC16F84A   ;modelul de microcontroler   __CONFIG _XT_OSC & _WDT_OFF   cblock 0x1Ctest   endcBANK0 macro   bcf STATUS,RP0   endm BANK1 macro   bsf STATUS,RP0   endm   ;***********************   ORG 0x0000 ;Vectorul RESET   goto Main ;-------------------------------------------------------  ORG 0x0004 ;Vectorul INTRERUPERE   BANK0   movf PORTA,w   movwf test   btfsc test,1 ;dc test,1=1  fa 0 la porta, sari pt 0   bcf PORTA,1  btfss test,1 ;dc test,1=0 fa 1 la porta, sari pt 1   bsf PORTA,1   bcf INTCON, RBIF   retfie;------------------------------------------------------- ;************** Programul principal ********************************* Main   BANK0   clrf PORTB   BANK1   movlw B'10000000'   movwf TRISB   BANK0   clrf PORTA   BANK1   movlw B'00000000'   movwf TRISA   BANK0   BANK0   clrf INTCON   movlw B'10001000'   movwf INTCON Loop   goto Loop   end
Link spre comentariu

tocmai am testat codul, functioneaza, insa acuma ramane de eliminat contactul imperfect al butonului, pt uneori se stinge uneori nu Incerc sa fac un macro de intarzaiere Multumesc

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări