;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; USB Relay Interface ;;
;; --------------------------- ;;
;; Author: Peter Stevens
;; Version:0.9
;; Date: 01/05/2010
;; Description: Receives input over USB via UM232R USB to Serial converter, puts
;; input on to PORTA to control 32 bit channel relay card. Input is echoed back.
;
LIST P=16F628A, R=dec ;16F628A PROCESSOR
;
#include "P16F628A.INC" ; Include header file
;
__config _BOREN_ON & _DATA_CP_OFF & _PWRTE_OFF & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _INTOSC_OSC_NOCLKOUT
;
CBLOCK 0x20 ; Declare variable addresses starting at 0x20
; No Variables declared
ENDC
;
ORG 0x000
;
movlw 0x07
movwf CMCON ;Turn comparators off
;
; INITIALISE PORTS
;
bsf STATUS,RP0 ;Select Bank 1
;
movlw b'00100000' ;TRISA set to OUTPUT, RA5 INPUT
movwf TRISA
;
movlw b'00000110' ;Set RB2 to Tx, RB1 to RX
movwf TRISB
;
; CONFIGURE BAUD RATE AND TX/RX REGISTER
; 9600 baud, 8 data bits, 1 stop bit, no parity bit
;
movlw 0x19 ;9600 baud with 4Mhz Internal Oscillator
movwf SPBRG
;
movlw b'00100100' ;Transmit enable, high baud rate
movwf TXSTA
;
bcf STATUS,RP0 ;Select Bank 0
;
movlw b'10010000' ;Asyn. Comms enable. Continuous Rx enable.
movwf RCSTA
;
; MAIN PROGRAM
;
call cconf ;Comms Confirmation Message
main clrf PORTA
;
receive btfss PIR1,RCIF ;Checks bit RCIF of PIR1 ("Is receive buffer full?")
goto receive ;Loops until receive buffer is full
;
movf RCREG,W ;Move the contents of RCREG in to W
movwf PORTA ;Moves value in W on to PORTA
;
call txmit ;Transmit sub-routine
goto main ;Go to start of program
;
; Tx SUB-ROUTINE
;
txmit movwf TXREG ;Moves contents of W in to TXREG. Echos back recieved byte.
;
bsf STATUS,RP0 ;Select Bank 1
;
txtest btfss TXSTA, TRMT ;Checks bit TRMT of TXSTA ("Has message been sent?")
goto txtest ;Loop until transmit complete
;
bcf STATUS,RP0 ;Select Bank 0
return
;
;
; COMMS MESSAGE
;
cconf movlw 'C'
call txmit
movlw 'O'
call txmit
movlw 'M'
call txmit
movlw 'M'
call txmit
movlw 'S'
call txmit
movlw 0x20 ;Space
call txmit
movlw 'C'
call txmit
movlw 'O'
call txmit
movlw 'N'
call txmit
movlw 'N'
call txmit
movlw 'E'
call txmit
movlw 'C'
call txmit
movlw 'T'
call txmit
movlw 'E'
call txmit
movlw 'D'
call txmit
movlw 0xD ;Return
call txmit
;
return
;
END