Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
110 lines (87 sloc)
2.55 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
| ;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 | |