|
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 |
17-10-2011, 04:24 PM | #1 |
Đệ tử 2 túi
Tham gia ngày: Sep 2010
Bài gửi: 41
: |
thac mac ve timer0
tinh hinh la minh viet cho 16f877a 1 chuong trinh vi du nhu sau
processor 16f877a include <p16f877a.inc> count1 equ 0x20 counta equ 0x21 countb equ 0x22 hangdonvi equ 0x23 hangchuc equ 0x24 wsave equ 0x25 ; cac thanh ghi dung de cat cac noi dung cua cac thanh ghi quan trong khi thuc thi chuong trinh ngat pclathsave equ 0x26 statussave equ 0x27 fsrsave equ 0x28 org 0x004 goto isr isr movwf wsave swapf STATUS,W clrf STATUS movwf statussave movf PCLATH,W movwf pclathsave clrf PCLATH movf FSR,W movwf fsrsave banksel PORTB btfss INTCON,TMR0IF ; bang 1 thi tiep tuc minh nghi cau lenh nay la thua goto exitint ; neu co ngat chua duoc set thi thoat khoi chuong trinh ngat bcf INTCON,TMR0IF ; neu co ngat duoc set thi xoa co ngat de cho phep nhan biet thoi diem tiep theo xay ra ngat incf hangdonvi,1 ; tang hang don vi len 1 don vi, ket qua luu o hangdonvi movlw 0x0a xorlw hangdonvi ;so sanh hang don vi co bang 10 ko? btfss STATUS,Z goto exitint ;neu chua bang 10 thi thoat khoi chuong trinh ngat clrf hangdonvi ; neu bang 10 thi hang don vi =0 va tang chu so hang chuc len 1 don vi incf hangchuc,1 movlw 0x0a xorwf hangchuc,0 ;neu chu so hang chuc btfss STATUS,Z ; neu hang chuc chua 10, thoat khoi chuong trinh ngat goto exitint clrf hangchuc ; neu bang 10 di resetlai hang chuc = 0 va thoat khoi chuong trinh goto exitint exitint ; thu tuc thoat khoi chuong trinh con phuc vu ngat movf fsrsave,W movwf FSR movf pclathsave,W movwf PCLATH swapf statussave,W movwf STATUS swapf wsave,1 swapf wsave,0 retfie ; ket thuc chuong trinh ngat org 0x000 goto start org 0x050 start ; nhan start o dia chi 0x050 banksel TRISD clrf TRISD movlw b'11111100' ; rp1 va rb0 la cac chan ra movwf TRISB banksel PORTD ; xoa cong ra clrf PORTD movlw b'11111111' ; tat cac led hang don vi movwf PORTB clrf hangchuc ; bat dau vao chuong trinh xoa cac thanh ghi hangchuc va hang don vi clrf hangdonvi clrf TMR0 ; khoi tao gia tri dinh thoi TMR0 clrf INTCON ; banksel OPTION_REG movlw b'10000001' ; ko cho chon chuc nang dien tro keo duong o cong B va chon he so cho prescaler la 1:4 movwf OPTION_REG bcf STATUS,RP0 ; bsf INTCON,TMR0IE bsf INTCON,PEIE ; cho phep ngat ngoasai vi bsf INTCON,GIE ; cho phep toan bo cac ngat, bo dinh thoi TMR0 lam viec ngay tu cau lenh nay ; vong lap chinh main call hienthi goto main ;vong lap vo han hienthi movlw b'00000001' movwf PORTB movf hangchuc,0 ; w = hangchuc call table movwf PORTD ; hien thi chu so hang chuc xong call delay1ms ; tre 1ms movlw b'00000010' movwf PORTB movf hangdonvi,0 call table movwf PORTD ; hien thi chu so hang don vi xong call delay1ms return table addwf PCL,1 retlw 0xc0 ; hien thi so o retlw 0xf9 ;1 retlw 0xa4 ;2 retlw 0xb0 ;3 retlw 0x99 ;4 retlw 0x92 ;5 retlw 0x82 ;6 retlw 0xf8 ;7 retlw 0x80 ;8 retlw 0x90 ;9 delay1ms movlw d'1' MOVWF count1 d1 movlw d'199' movwf counta movlw d'1' movwf countb d2 decfsz counta,1 goto $+2 decfsz countb,1 goto d2 decfsz count1 goto d1 return return end tuy nhien sau khi bien dich proteus bao loi nhu sau - stack overflow pushing return address of interupt - stack underflow excuting RETURN instruction mình không hiểu tại sao lại có 2 lỗi trên dẫn đến mô phỏng cua mình trên thiết bị ảo không thể thực hiện được. Mình dung proteus 7.5 Sp3 va trình biên dịch MPlab 7.52, khi biên dịch trên MPlab thi không báo lỗi, mong các ban chỉ hộ mình với nhé. Vì mình cung mới học Pic nên cũng chưa có kinh nghiệm j nhiều lám. Thank các bạn nhiều |
|
|