XName Postat Aprilie 17, 2007 Partajează Postat Aprilie 17, 2007 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
Abram Burel Postat Aprilie 18, 2007 Partajează Postat Aprilie 18, 2007 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
CristianC Postat Aprilie 18, 2007 Partajează Postat Aprilie 18, 2007 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
XName Postat Aprilie 18, 2007 Autor Partajează Postat Aprilie 18, 2007 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum