Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Copyright (c) 2013 Manolis Agkopian ;
;See the file LICENCE for copying permission. ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROCESSOR 16F876A
INCLUDE <P16F876A.INC>
__config _XT_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _LVP_OFF & _BODEN_OFF
TMP_TX EQU 0x20 ;VALUE TO HOLD RECEIVED VALUE
COL_CNT EQU 0x21
LINE_CNT EQU 0x22
ORG 0x000
GOTO MAIN
ORG 0x004 ;INTERRUPT VECTOR
GOTO INTERRUPT
INCLUDE <LCD_DRIVER.INC>
MAIN:
CALL LCD_INIT ;FIRST OF ALL WE HAVE TO INITIALIZE LCD
CLRF LINE_CNT
MOVLW 0xFF
MOVWF COL_CNT
;---USE PORTA AS I/O
CLRF PORTA
MOVLW D'7' ;USE PORTA AS I/O
MOVWF CMCON ;
BSF STATUS,RP0 ;SWITCH TO BANK1
CLRF TRISA ;SET ALL PINS OF PORTA AS OUTPUT
BCF OPTION_REG,7
;---CONFIGURE PERIPHERAL INTERRUPTS
MOVLW B'00100000' ;DISABLE ALL PERIPHERAL INTERRUPTS EXCEPT RECEIVER
MOVWF PIE1 ;PERIPHERAL INTERRUPT ENABLE/DISABLE
;---CONFIGURE GENERAL INTERRUPTS
MOVLW B'01000000' ;DISABLE ALL INTERRUPTS EXCEPT PERIPHERAL
MOVWF INTCON ;INTERRUPT CONTROL REGISTER
;---CONFIGURE SPBRG FOR DESIRED BAUD RATE
MOVLW D'51' ;WE WILL USE 4800bps
MOVWF SPBRG ;BAUD AT 4MHZ
;---CONFIGURE TXSTA
MOVLW B'00100100' ;CONFIGURE TXSTA AS :
MOVWF TXSTA ;
;8 BIT TRANSMISSION - 6.BIT
;TRANSMIT ENABLED - 5.BIT
;ASYNCHRONOUS MODE - 4.BIT
;ENABLE HIGH SPEED BAUD RATE - 2.BIT
BCF STATUS,RP0 ;SWITCH TO BANK0
MOVLW B'10000000' ;ENABLE SERIAL PORT
MOVWF RCSTA ;RECEIVE STATUS REG
CLRF TMP_TX
BSF INTCON,7 ;ENABLE ALL UNMASKED INTERRUPTS
BSF RCSTA,4 ;ENABLE USART RECEIVE
MAIN_LOOP: ;CONTINOUS LOOP
;BTFSC PORTB,4 ;CHECK IF THE BUTTON IS PRESSED
GOTO MAIN_LOOP ;IF NOT GOTO CONTINOUS LOOP
;MOVF TMP_TX,W ;LOAD TMP_TX
;MOVWF TXREG ;TO TXREG
;WE LOAD TMP_TX ON THE INTERRUPT ROUTINE,
;WHEN AN INFORMATION RECEIVED FROM RX.
;GOTO MAIN_LOOP ;CONTINOUS LOOP
INTERRUPT:
BCF INTCON,7 ;DISABLE ALL INTERRUPTS
BTFSS PIR1,5 ;CHECK IF THE RCIF FLAG IS SET
GOTO QUIT_INT ;IF NOT RETURN BACK TO THE MAIN LOOP
MOVF RCREG,W ;MOVE THE RECEIVED BYTE TO W
MOVWF PORTA ;MOVE W TO PORTA
MOVWF TMP_TX
BCF PIR1,5
INCF COL_CNT
MOVF COL_CNT, W
XORLW 0x10 ;CHECK IF WE REACHED THE END OF THE LINE
BTFSS STATUS, Z
GOTO QUIT_INT ;IF NOT
;ELSE, CHECK IF WE REACHED THE END OF THE COLUMN
CLRF COL_CNT
CALL LCD_L2
INCF LINE_CNT
MOVF LINE_CNT, W
XORLW 0x02
BTFSS STATUS, Z
GOTO QUIT_INT ;IF NOT
;ELSE
CLRF LINE_CNT
CALL LCD_CLR
CALL LCD_L1
QUIT_INT:
MOVF TMP_TX, W
CALL LCD_CHAR ;LCD_CHAR WRITES AN ASCII CODE CHAR TO THE LCD, THE LCD uC WILL THEN AUTOINCREMENT THE CURSOR
RETFIE
END