#include __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) org 0 cblock 0x20 TEMP DISPLAY DELAY1 DELAY2 W_TEMP endc goto PORTS; org 0x04 INTERUPT: movwf W_TEMP ;Store w to TEMP bcf INTCON,7 ; Turn of interupts btfss PIR1,RCIF ; Wait untill RCREG is full goto $-1 bcf PIR1,RCIF ;Clear flag movf RCREG,w ; Move RCREG to w movwf DISPLAY ; Move w to DISPLAY call ROUTINE movf DISPLAY,w ; Move DISPLAY to w movwf PORTC ; Move it to PORTC movf W_TEMP,w ; Restore w bsf INTCON,7 ; Turn on interupts retfie ROUTINE: bcf STATUS,0 ;Clear flag rlf DISPLAY ;Rotate the display btfss STATUS,0 ; Check flag return ; Exit if not set movlw 0x01 ; If it is, reset display movwf DISPLAY return PORTS: bsf STATUS,RP1 ;Bank 2 clrf ANSEL ; All pins are digital I/O clrf ANSELH ; All pins are digital I/O bcf STATUS,RP1 ;Bank 0 bsf INTCON,7 ;Set up global interrupts bsf INTCON,6 ; Peripheral Interrupts bsf STATUS,RP0 ;Bank 1 bsf PIE1,5 ; Interupt on RX buffer full bcf STATUS,RP0 ; Bank 0 bcf PIR1,RCIF ; Clear the flag bsf STATUS,RP0 ; Bank 1 movlw 0x00 ; Move the hex value of 0 to multi purpose register W movwf TRISC ; make IO PortC all output movlw 0xff ; 0xff to w movwf TRISA ;PORTA input ;serial comm transmit movlw d'25' ; Move the value of 25 or 0x19, to the baud rate genrator movwf SPBRG ; this will make the baud rate = to 9600 at a 4mhz internal clock in high speed mode bsf TXSTA,BRGH ;baud rate high bsf TXSTA,TXEN ;Enable Transmision bcf TXSTA,SYNC ;asyncronous bcf STATUS,RP0 ;Exit bank 1 ;Serial comm Recieve bsf RCSTA,SPEN ;Set serial port enable high bsf RCSTA,CREN ; Enable reciever clrf PORTB ; Clear clrf PORTC ; Clear display movlw 0x01 ; Initalize Display movwf DISPLAY MAIN: bsf PORTC,0 ; Portc high btfsc PORTA,3 ; Poll the button press goto $-1 ; Goto instruction - 1 call TX ; Call transmission bcf PORTC,0 ; Clear port c,0 call DELAY ; Call delay goto MAIN TX: btfss PIR1 , TXIF ; TXIF is set if TXREG has no character goto $-1 ; Loop until TXIF is cleared movf DISPLAY,w ; Data to be transmitted over serial port movwf TXREG ; Copy data to transmit register bsf STATUS,RP0 ; RAM PAGE 1 btfss TXSTA , TRMT ; Wait until transmission is completed goto $-1 ; Loop back until transmission completed bcf STATUS,RP0 return DELAY: ; Generic Delay routine decfsz DELAY1 goto DELAY decfsz DELAY2 goto DELAY return end