|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
19-03-2010, 11:45 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 2
: |
Giúp em sửa lỗi này với
Em mới học Pic, em không biết cách viết ngắt.
Nhờ các bác viết giúp em ngắt bằng timer sau mỗi giây một được không ạ? Em viết bài đếm tăng dần led 7 thanh dùng ngắt mà khi chạy mô phỏng không đúng. Mong anh em xem dùm và chỉ giáo cho em biết với. Code:
processor 16f877a include <p16f877a.inc> __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;------------------- ;Khai bao bien ;-------------------- count1 EQU 0x20 counta equ 0x21 countb equ 0x22 ;cac thanh ghi dung cho chuong trinh delay_1ms hang_don_vi equ 0x23 hang_chuc equ 0x24 ;cac thanh ghi chua cac gt hang chuc va hang dv count equ 0x25 display_reg equ 0x26 xx equ 0x27 xx1 equ 0x28 ;cac thanh ghi phu W_save equ 0x29 PCLATH_save equ 0x30 STATUS_save equ 0x31 FSR_save equ 0x32 ;cac thanh ghi danh cho ct ngat sodem equ 0x33 org 0x0004 goto isr ;--------------- ;chuong trinh ngat ;----------------------- isr ;--------------------- ;doan chuong trinh bat buoc khi bat dau ct ngat movwf W_save swapf STATUS,w clrf STATUS movwf STATUS_save movf PCLATH,w movwf PCLATH_save clrf PCLATH movf FSR,w movwf FSR_save ;---------------------------- ;kiem tra co ngat ;--------------------------------- btfss PIR1,TMR1IF ;kiem tra co ngat cua timer1 goto exit_int bcf T1CON,TMR1ON ;tam thoi tat timer1 de khoi tao lai ;-------------------------------- ;cac thao tac chinh cua chuong trinh ngat; ;------------------------------------------- clrf TMR1L ;khoi tao lai cac gt trong thanh ghi TMRL clrf TMR1H ;va TMRH movlw 0x61 ;dua vao cac thanh ghi dem cua timer1 movwf TMR1H movlw 0xA8 movwf TMR1L bsf T1CON,TMR1ON ;bat timer1 bcf PIR1,TMR1IF ;xoa co ngat incf count movlw d'5' xorwf count,0 btfss STATUS,Z goto exit_int ;neu chua bang 5 thoat clrf count ;bang roai thi reset lai count incf hang_don_vi,1 ;tang hang don vi len 1 movlw 0x0A xorwf hang_don_vi,0 ;so sanh voi 10 btfss STATUS,Z goto exit_int ;neu khong bang 10 thi thoat ngat clrf hang_don_vi ;neu bang thi xoa hang don vi incf hang_chuc,1 ;tang hang chuc len 1 movlw 0x0A xorwf hang_chuc,0 btfss STATUS,Z ;so sanh hang chuc voi 10 goto exit_int ;khong bang 10 thi thoat ngat clrf hang_chuc ;neu bang thi xoa hang chuc ;------------------------ ;doan chuong trinh de ket thuc ngat ;------------------------------- exit_int movf FSR_save,w movwf FSR movf PCLATH_save,w movwf PCLATH swapf STATUS_save,w movwf STATUS swapf W_save,1 swapf W_save,0 retfie org 0x0000 goto start ;------------------------------- ;chuong trinh chinh ;------------------------------ start ;-------------------------------- ;khoi tao cac Port dieu khien ;------------------------------------ bcf STATUS,RP1 bsf STATUS,RP0 ;chon bank1 movlw 0x00 movwf TRISD ;gan portD la output movlw b'11000000' movwf TRISB bcf STATUS,RP0 clrf PORTD movlw b'00111111' ;tat tat ca cac Led movwf PORTB ;----------------------------- ;khoi tao timer1 ;----------------------------- clrf T1CON clrf INTCON clrf TMR1H clrf TMR1L bsf STATUS,RP0 ;chon bank1 clrf PIE1 bsf PIE1,TMR1IE ;cho phep ngat timer1 bcf STATUS,RP0 ;chon bank0 clrf PIR1 ;xoa tat ca cac co ngat movlw 0x30 movwf T1CON movlw 0x61 movwf TMR1H movlw 0xA8 movwf TMR1L bsf T1CON,TMR1ON ;bat timer1 bsf INTCON,TMR1IE ;cho phep ngat Timer1 bsf INTCON,PEIE ;cho phep ngat ngoai vi bsf INTCON,GIE ;cho phep toan bo cac ngat ;------------------------------------- ;khoi tao cac bien ;------------------------------------- clrf hang_don_vi clrf hang_chuc ;------------------------------ ;vong lap chinh ;------------------------------- main call hien_thi goto main hien_thi movf hang_chuc call table movwf PORTD movlw b'11111101' movwf PORTB call delay_1ms movf hang_don_vi call table movwf PORTD movlw b'11111110' movwf PORTB call delay_1ms return table addwf PCL,1 retlw 0xC0 retlw 0xF9 retlw 0xA4 retlw 0xB0 retlw 0x99 retlw 0x92 retlw 0x82 retlw 0xF8 retlw 0x80 retlw 0x90 delay_1ms movlw d'1' movwf count1 d2 movlw 0xC7 movwf counta movlw 0x01 movwf countb delay_1 decfsz counta,1 goto $+2 decfsz countb,1 goto delay_1 decfsz count1,1 goto d2 return END thay đổi nội dung bởi: kid1412hv, 20-03-2010 lúc 02:03 AM. |
|
|