;; USART TXISR test ;; ;; The purpose of this program is to verify that gpsim's ;; USART module generates TX interrupts properly. ;; ;; ;; list p=16f871 include include __CONFIG _WDT_OFF errorlevel -302 radix dec ;---------------------------------------------------------------------- ; RAM Declarations ; INT_VAR UDATA 0x20 w_temp RES 1 status_temp RES 1 pclath_temp RES 1 ;fsr_temp RES 1 INT_VAR1 UDATA 0xA0 w_temp1 RES 1 ;Alias for w_temp at address 0x20 GPR_DAT UDATA 0x30 temp1 RES 1 temp2 RES 1 tx_ptr RES 1 rxLastByte RES 1 rxFlag RES 1 ;---------------------------------------------------------------------- ; ********************* RESET VECTOR LOCATION ******************** ;---------------------------------------------------------------------- RESET_VECTOR CODE 0x000 ; processor reset vector movlw high start ; load upper byte of 'start' label movwf PCLATH ; initialize PCLATH goto start ; go to beginning of program ;------------------------------------------------------------------------ ; ; Interrupt Vector ; ;------------------------------------------------------------------------ INT_VECTOR CODE 0x004 ; interrupt vector location movwf w_temp swapf STATUS,w clrf STATUS movwf status_temp movf PCLATH,w movwf pclath_temp clrf PCLATH bcf STATUS,RP0 btfss PIR1,TXIF goto int_done call tx_message movwf TXREG btfss tx_ptr,5 goto int_done bsf STATUS,RP0 bcf PIE1^0x80,TXIE ; Enable Tx interrupts bcf STATUS,RP0 int_done: clrf STATUS movf pclath_temp,w movwf PCLATH swapf status_temp,w movwf STATUS swapf w_temp,f swapf w_temp,w retfie ;; ---------------------------------------------------- ;; ;; start ;; MAIN CODE start .sim ".frequency=20e6" .sim "module library libgpsim_modules" .sim "module load usart U1" ; .sim "U1.xpos = 250.0" ; .sim "U1.ypos = 80.0" .sim "node PIC_tx" .sim "node PIC_rx" ;; Tie the USART module to the PIC .sim "attach PIC_tx portc6 U1.RXPIN" .sim "attach PIC_rx portc7 U1.TXPIN" ;; Set the USART module's Baud Rate .sim "U1.txbaud = 9600" .sim "U1.rxbaud = 9600" ;; USART Initialization ;; ;; Turn on the high baud rate (BRGH), disable the transmitter, ;; disable synchronous mode. ;; clrf STATUS bsf PORTC,6 ;Make sure the TX line drives high when ;it is programmed as an output. bsf STATUS,RP0 bsf TRISC,7 ;RX is an input bcf TRISC,6 ;RC6 must be an input for TX to drive pin ;; CSRC - clock source is a don't care ;; TX9 - 0 8-bit data ;; TXEN - 0 don't enable the transmitter. ;; SYNC - 0 Asynchronous ;; BRGH - 1 Select high baud rate divisor ;; TRMT - x read only ;; TX9D - 0 not used movlw (1<