Pà con cho m hỏi chương trình m viết như vầy nhưng sao nó lại không báo ngắt để kết thúc truyền vậy? Chính xác là ko có ngắt để vào chương trình ngắt.
Vùng nhớ trong 458 phân bank thấp cao vậy m chỉnh bank khi chuyên lệnh là nó báo tràn con trỏ?
Code:
title "18F458 TRANSMIT TEST"
processor 18F458
include <P18F458.inc>
CONFIG OSC = XT, OSCS = OFF
CONFIG PWRT = ON, BOR = ON, BORV = 27
CONFIG WDT = OFF, WDTPS = 128
CONFIG STVR = ON, LVP = OFF, DEBUG = OFF
CBLOCK 0X20
W_SV,STATUS_SV,FSR_SV,PCLATH_SV,FSR,CANSTAT_SV
ENDC
ORG 0X00
GOTO MAIN
ORG 0X04
GOTO NGAT
NGAT
MOVWF W_SV
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_SV
MOVF PCLATH,W
MOVWF PCLATH_SV
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_SV
BTFSC PIR3,TXB0IF ;KT NGAT TRANSMIT
GOTO NGATRANS
BTFSC PIR3,ERRIF
GOTO LOI
GOTO EXITNGAT
NGATRANS
BSF PORTD,5
RETFIE
LOI
MOVLW 0XF0
MOVWF PORTD
RETFIE
EXITNGAT
MOVF FSR_SV,W
MOVWF FSR
MOVF PCLATH_SV,W
MOVWF PCLATH
SWAPF STATUS_SV,W
MOVWF STATUS
SWAPF W_SV,W
BSF INTCON,GIE
RETFIE
MAIN
MOVLW 0X08
MOVWF TRISB ;PORTB XUAT DATA
CLRF TRISC ;PORTC TEST TRANSMIT
CLRF TRISD ;-NT-
CLRF PORTC
CLRF PORTD
CLRF BRGCON1
CLRF BRGCON2
CLRF BRGCON3
MOVLW B'00001000'
MOVWF CANCON
BSF CIOCON,ENDRHI
BSF CIOCON,CANCAP
MOVLW B'00100100'
MOVWF PIE3
MOVLW B'00100000'
MOVWF IPR3
BSF INTCON,GIE
CALL TRANSMIT
BTFSC TXB0CON,TXERR
BSF PORTD,0 ;ERR=1
BTFSS TXB0CON,TXREG
BSF PORTD,0 ;REG=0
BTFSS TXB0CON,TXIE
BSF PORTD,2 ;IE=0
BSF PORTD,3
BSF PORTD,4
GOTO $
TRANSMIT
MOVLW B'00001111'
MOVWF BSR
MOVLW B'00000000'
MOVWF TXB0SIDH
MOVLW B'11100000'
MOVWF TXB0SIDL
MOVLW B'00001000'
MOVWF TXB0DLC
MOVLW B'11001100'
MOVWF TXB0D0
MOVWF PORTC ;TEST PORTC
MOVLW B'11001100'
MOVWF TXB0D1
MOVWF TXB0D2
MOVWF TXB0D3
MOVWF TXB0D4
MOVWF TXB0D5
MOVWF TXB0D6
MOVWF TXB0D7
BSF TXB0CON,TXREG
RETURN
END