[ Marko1991 @ 04.01.2011. 02:18 ] @
Od skoro sam poceo da ucim programiranje mikrokontrolera (uzeo sam za pocetak pic16f84),i zaboo sam kod interapata. Kod treba da radi sledece:glavni program treba da prikaze brojeve od 0-7 u binarnom zapisu na 3 LED PORTA a u interapt rutini treba da se uvecava brojac i da se proverava da li je doslo do prekoracenja. E sad,ja mislim da nisam lepo vratio vrednost brojaca iz interapt rutine u glavni program,ali nisam uspeo da provalim kako to da uradim pa molim za pomoc. Evo koda list p=16f84 ;Definise upotrebljeni kontroler #include <p16f84.inc> ;Ubacuje nazive registara u program __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;Podesava konfiguracione bitove ORG 0X00 ;Definise start programa TEMPW equ 0x0C ;Cuva W na 0x0C BROJAC equ 0x0D ;Brojac ;Interapt rutina org 0x00 ;Ovde PC dolazi po ckljucenju i resetu goto Main ;Idi na glavni program org 0x04 ;Ovde pocinje obrada interapta movwf TEMPW ;Privremeno cuvanje W registra incf BROJAC,F ;Uvecaj brojac btfsc BROJAC,3 ;Testiraj treci bit BROJAC registra.Ako nije setovan preskoci sledecu instrukciju clrf BROJAC ;Upisi 0 u brojac.Ako je brojac posle uvecanja preskocio dozvoljenu vrednost(7) sada 0,a ako nije sada je uvecan movf TEMPW,W ;Vrati predhodni sadrzaj W registra bcf INTCON,INTF ;Obrisi INTF-dozvoli nove interapte retfie ;Kraj interapt rutine ;Glavni program-inicijalizacija Main movlw b'10010000' ;bit 7 GIE-dozvoli interapte(1) ;bit 4 INTE-RB0 izabran za spoljasnji interapt(1) ;bit 1 INTF-interapt fleg resetovan(0) movwf INTCON ;inicijalizuj INTCON registar bsf STATUS,RP0 ;Prebaci program u Bank1 movlw 0x01 ;b'00000001' u TRISB movwf TRISB ;RB0/INT kao ulaz,ostali kao izlaz clrf TRISA ;Svi pinovi na PORTA su izlazni bsf OPTION_REG,INTEDG ;Interapt pri rastucoj ivici signala bcf OPTION_REG,NOT_RBPU ;Ukljuceni interni pull up otpornici na PORTB bcf STATUS,RP0 ;Povratak u BANK0 clrf BROJAC ;Stavi 0 u BROJAC ;Glavni program-petlja Pri movlw BROJAC ;Iz BROJACa u W movwf PORTA ;a odatle u PORTA goto Pri ;Vrati se na pocetak petlje ;Kraj programa end ;Kraj programa P.S.Uvek sija samo jedna led(na portu ra0) Unapred hvala |