list p=16f876A ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ;***** VARIABLE DEFINITIONS w_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context saving pclath_temp EQU 0x73 ; variable used for context saving indications EQU 0x74 ;********************************************************************** ORG 0x000 ; processor reset vector nop ; nop required for icd goto main ; go to beginning of program ORG 0x004 ; interrupt vector location int movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register movf PCLATH,w ; move pclath register into w register movwf pclath_temp ; save off contents of PCLATH register ; isr code can go here or be located as a call subroutine elsewhere ;RS232-Empfaenger-Interupt? btfss PIR1, RCIF goto intEnde ; Interrupt came of where differently movfw RCREG ; RS232-Register select movwf indications ; and into the memory after 'indications' write write movwf PORTB ; Indications at the PortB indicate bcf PIR1, RCIF ; interrupt flag delete intEnde movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre-isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt main ; remaining code goes here bcf STATUS, RP0 bcf STATUS, RP1 clrf PORTB clrf PORTA bsf STATUS,RP0 movlw 0x00 movwf TRISA movwf TRISB call USART_initialize call USART_Baud_rate_adjust CALL prepare_Interrupts bcf STATUS,RP0 movlw 0xff movwf PORTA loop NOP goto loop prepare_Interrupts ;Interrupts BSF STATUS, RP0 ; Bank1 BSF PIE1, RCIE ; Enable receive interrupts BCF STATUS, RP0 ; Bank 0 clrf PIR1 ; all interrupt flags delete clrf PIR2 BSF INTCON, GIE ; generally permit interrupts BSF INTCON, PEIE ; Interrupts of peripheral devices permit RETURN USART_initialize BSF STATUS, RP0 ; Bank1 MOVLW 0x24 ; Transmitter:RS232 , BRGH bit is set MOVWF TXSTA ; BCF STATUS, RP0 ; Bank 0 MOVLW 0x90 ; Enable serial port, 8bit reception , MOVWF RCSTA ; continuous receive RETURN USART_Baud_rate_adjust BSF STATUS, RP0 ; Bank1 MOVLW 0x81 ; Set Baud guesses 9,6 KB with Fosc=20MHz MOVWF SPBRG RETURN END ; directive 'end of program'