![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
#1 |
|
Nhập môn đệ tử
|
Lỗi do lập trình hay do trình biên dịch ?
Tại sao khi viết chương trình ngắt trong MPLAB (7.31) mặc dù đã theo đúng khung chương trình ngắt do bác falleaf giới thiệu nhưng chưong trình vẫn bị Faile(Lỗi).
Cụ thể là viết chương trình như sau : Code:
PROCESSOR PIC16F877
INCLUDE <P16F877.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CPD_OFF
DATAOUT EQU 0x20
W_save EQU 0x21
PCLATH_SAVE EQU 0X22
STATUS_SAVE EQU 0X23
FSR_SAVE EQU 0X24
ORG 0x0000
GOTO batdau
ORG 0x004 ;<<=======================(thay bởi 0x005 thì thành công)
GOTO ISR_NGAT
ISR_NGAT
MOVWF W_save
MOVWF STATUS_SAVE
MOVF PCLATH,W
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_SAVE
BTFSS PIR1,PSPIF
GOTO thoat
BCF PIR1,PSPIF
BSF STATUS,RP0
BTFSC TRISE,OBF
GOTO thoat
BCF STATUS,RP0
MOVF DATAOUT,0
MOVWF PORTD
thoat
BCF STATUS,RP0
MOVF FSR_SAVE
MOVWF FSR
MOVF PCLATH_SAVE
MOVWF PCLATH
SWAPF STATUS_SAVE,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
ORG 0x000
CLRF STATUS
CLRF PCLATH
GOTO batdau
ORG 0x050
batdau
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
BSF STATUS,RP0
MOVLW B'00010111'
MOVWF TRISE
MOVLW 0x006
MOVWF ADCON1
BSF PIE1,PSPIE
BCF STATUS,RP0
BSF INTCON,GIE
BSF INTCON,PEIE
MOVLW b'01010101'
MOVWF DATAOUT
MOVF PORTD
GOTO $
END
Phiền các bạn giải thích hộ ? Thanks ! |
|
|
|
|
|
#2 |
|
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 101
: |
Lỗi báo như thế nào? Bạn phải post dòng thông báo lỗi lên thì mới trả lời cụ thể được
|
|
|
|
|
|
#3 |
|
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Chỉ thấy bạn có 1 cái sai là lặp 2 lần "org 0x00", bỏ cái bên dưới là ok.
Bạn cũng không cần đặt thêm cái org 0x50 làm chi, bây giờ thì chưa sai, nhưng rất dễ sai. Không hiểu = cách nào mà bạn dịch được cho dù đổi thành org 0x05. Bạn nên coi lại tut xem chỉ thị org nghĩa là gì. |
|
|
|
|
|
#4 |
|
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 101
: |
Nếu bạn viết đúng như đoạn chương trình trên đây thì mình tìm thêm được vài lỗi nữa của bạn. Bạn viết là :
ISR_NGAT MOVWF W_save MOVWF STATUS_SAVE MOVF PCLATH,W CLRF PCLATH MOVF FSR,W MOVWF FSR_SAVE ..... Phải sửa lại là : ISR_NGAT: MOVWF W_save ; Save WREG MOVF STATUS,W ; Save STATUS CLRF STATUS MOVWF STATUS_SAVE MOVF PCLATH, W MOVWF PCLATH_SAVE MOVF FSR, W MOVWF FSR_SAVE ........ Thoat: CLRF STATUS MOVF FSR_SAVE, W MOVWF FSR MOVF PCLATH_SAVE, W MOVWF PCLATH MOVF STATUS_SAVE, W MOVWF STATUS SWAPF W_save, F SWAPF W_save, W RETFIE |
|
|
|
![]() |
|
|