list p=16f877a
#include "p16f877a.inc"
__config 0x3ff1
STATUS EQU 03h
TRISB EQU 86h
PORTB EQU 06h
COUNT1 EQU 0XFF
COUNT2 EQU 0XFF
CBLOCK 0X20
D1
D2
D3
D4
ENDC
BANK0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1 MACRO
BCF STATUS,RP1
BSF STATUS,RP0
ENDM
org 0X00
BANK1
MOVLW 0X00
MOVWF TRISA
BANK0
START CALL InitSerial
resend movlw 'A'
CALL SerialSend
movlw 'T'
CALL SerialSend
movlw 0x0D
CALL SerialSend
CALL SerialRcv
xorlw 'O'
btfss STATUS,Z
GOTO resend
CALL SerialRcv
XORLW 'K'
btfss STATUS,Z
goto resend
blink1 movlw 0x01
movwf PORTA
cmgf movlw 'A'
call SerialSend
movlw 'T'
call SerialSend
movlw '+'
call SerialSend
movlw 'C'
call SerialSend
movlw 'M'
call SerialSend
movlw 'G'
call SerialSend
movlw 'F'
call SerialSend
movlw '='
call SerialSend
movlw '1'
call SerialSend
movlw 0x0D
call SerialSend
CALL SerialOK
blink2 movlw 0x03
movwf PORTA
call DELAY
cpms movlw 'A'
call SerialSend
movlw 'T'
call SerialSend
movlw '+'
call SerialSend
movlw 'C'
call SerialSend
movlw 'P'
call SerialSend
movlw 'M'
call SerialSend
movlw 'S'
call SerialSend
movlw '='
call SerialSend
movlw '"'
call SerialSend
movlw 'M'
call SerialSend
movlw 'E'
call SerialSend
movlw '"'
call SerialSend
movlw 0x0D
call SerialSend
call DELAY
CALL SerialOK
blink3 movlw 0x07
movwf PORTA
call DELAY
cnmi movlw 'A'
call SerialSend
movlw 'T'
call SerialSend
movlw '+'
call SerialSend
movlw 'C'
call SerialSend
movlw 'N'
call SerialSend
movlw 'M'
call SerialSend
movlw 'I'
call SerialSend
movlw '='
call SerialSend
movlw '2'
call SerialSend
movlw ','
call SerialSend
movlw '1'
call SerialSend
movlw ','
call SerialSend
movlw '0'
call SerialSend
movlw ','
call SerialSend
movlw '0'
call SerialSend
movlw ','
call SerialSend
movlw '0'
call SerialSend
movlw 0x0D
call SerialSend
call SerialOK
blink4 movlw 0x0F
movwf PORTA
[B]SMSWAIT call CMTI
call SerialRcv
movwf D4
CMGR movlw 'A'
call SerialSend
movlw 'T'
call SerialSend
movlw '+'
call SerialSend
movlw 'C'
call SerialSend
movlw 'M'
call SerialSend
movlw 'G'
call SerialSend
movlw 'R'
call SerialSend
movlw '='
call SerialSend
movlw D4
call SerialSend
movlw 0x0D
call SerialSend[/B]
;;;;;;;;DELAY ROUTINE;;;;;;;;;;;;;;;;;;;
DELAY MOVLW D'100'
MOVWF D3
MOVLW D'100'
MOVWF D2
MOVLW D'100'
MOVWF D1
LOOP1 DECFSZ D1
GOTO LOOP1
LOOP2 DECFSZ D2
GOTO LOOP2
LOOP3 DECFSZ D3
GOTO LOOP3
RETURN
;;;;;;SERIAL SETUP;;;;;;;;;;;;;;;;;;;;;;;
InitSerial:
BANK1
movlw b'11000000'
iorwf TRISC,f
movlw D'25'
movwf SPBRG
movlw 0x24
movwf TXSTA
BANK0
movlw 0x90
movwf RCSTA
Return
;;;;;;SERIAL SEND;;;;;;;;;;;;;;;;;;;;;;;;;;
SerialSend:
BANK0
busywait:
btfss PIR1,TXIF
goto busywait
movwf TXREG
return
;;;;;;;;SERIAL RECEIVE;;;;;;;;;;;;;;;;;;;;
SerialRcv:
BANK0
btfss PIR1,RCIF
goto SerialRcv
MOVF RCREG,w
RETURN
;;;;;;;;SERIAL OK;;;;;;;;;;;;;;;;;;;;;;;;;
SerialOK:
BANK0
btfss PIR1,RCIF
goto SerialOK
MOVF RCREG,w
xorlw 'O'
btfss STATUS,Z
goto SerialOK
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CMTI:
BANK0
btfss PIR1,RCIF
goto CMTI
movf RCREG,w
xorlw ','
btfss STATUS,Z
goto CMTI
return
END