Hardware
Testprint K4 monteres med resetkomponenter og
en IC til RS232 kommunikation. De 4 x 1 uF kondensatorer, som er
forbundet til MAX232, kan reduceres
til 100 nF typer, hvis MAX232A eller ST232 anvendes. De 4 pile på diagrammet viser signalernes retning.
Testprint K4 monteret til 628uart.asm
Software i assembler
;*******************************************************************
; Function: Sends
alive message, then echoes characters at 9600 bps
; Processor: PIC16F628
at 4 MHz using internal RC oscillator
; Hardware: Testboard
K4
; Filename: 628uart.asm
; Author: Lars Petersen, oz1bxm@pobox.com
; Website:
www.qsl.net/oz1bxm/PIC/pic.htm
; Credit:
Tony Nixon's test program at
;
www.piclist.com/techref/microchip/16f877/setup.htm
;*******************************************************************
LIST P=16F628, R=DEC ; Use the PIC16F628 and decimal system
#include "P16F628.INC" ; Include header file
__config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON
CBLOCK 0x20
; Declare variable addresses starting at 0x20
dataL
ENDC
ORG 0x000
; Program starts at 0x000
;
; --------------------------------
; SET ANALOG/DIGITAL
INPUTS PORT A
; --------------------------------
;
movlw 7
movwf CMCON
; CMCON=7 set comperators off
;
; ----------------
; INITIALIZE PORTS
; ----------------
;
movlw b'00000000' ; set up portA
movwf PORTA
movlw b'00000100' ; RB2(TX)=1 others
are 0
movwf PORTB
bsf STATUS,RP0 ; RAM PAGE 1
movlw 0xFF
movwf TRISA
; portA all pins input
movlw b'11110010' ; RB7-RB4 and RB1(RX)=input,
others output
movwf TRISB
; ------------------------------------
; SET BAUD RATE TO COMMUNICATE
WITH PC
; ------------------------------------
; Boot Baud Rate = 9600,
No Parity, 1 Stop Bit
;
movlw 0x19
; 0x19=9600 bps (0x0C=19200 bps)
movwf SPBRG
movlw b'00100100' ; brgh = high (2)
movwf TXSTA
; enable Async Transmission, set brgh
bcf STATUS,RP0 ; RAM PAGE 0
movlw b'10010000' ; enable Async Reception
movwf RCSTA
;
; ------------------------------------
; PROVIDE A SETTLING
TIME FOR START UP
; ------------------------------------
;
clrf dataL
settle decfsz
dataL,F
goto settle
movf RCREG,W
movf RCREG,W
movf RCREG,W
; flush receive buffer
;
; ---------
; MAIN LOOP
; ---------
;
call message
; send "16F628 alive"
loop
call receive
; wait for a char
call send
; send the char
goto loop
;
; -------------------------------------------
; RECEIVE CHARACTER
FROM RS232 AND STORE IN W
; -------------------------------------------
; This routine does
not return until a character is received.
;
receive btfss PIR1,RCIF
; (5) check for received data
goto receive
movf RCREG,W
; save received data in W
return
;
; -------------------------------------------------------------
; SEND CHARACTER IN
W VIA RS232 AND WAIT UNTIL FINISHED SENDING
; -------------------------------------------------------------
;
send
movwf TXREG
; send data in W
TransWt bsf STATUS,RP0
; RAM PAGE 1
WtHere btfss TXSTA,TRMT
; (1) transmission is complete if hi
goto WtHere
bcf STATUS,RP0 ;
RAM PAGE 0
return
;
; -------
; MESSAGE
; -------
;
message movlw
'1'
call send
movlw '6'
call send
movlw 'F'
call send
movlw '6'
call send
movlw '2'
call send
movlw '8'
call send
movlw ' '
call send
movlw 'a'
call send
movlw 'l'
call send
movlw 'i'
call send
movlw 'v'
call send
movlw 'e'
call send
movlw 0x0D ; CR
call send
movlw 0x0A ; LF
call send
return
END
Noter
Kredsen ST232 bruges til seriel
kommunikation da den omsætter niveauerne i RS232 til TTL-niveauer.
En MAX232 kan også bruges. Hvis man vælger en DS275 bliver
opsætningen endnu simplere - der er et eksempel på denne hjemmeside:
Wichit
Sirichote. Terminalprogrammet (HyperTerminal) indstilles på 9600
baud med 8 databit, ingen paritet, ingen flowcontrol og 1 stopbit.
Portindstilling i HyperTerminal
Startmeddelelsen i HyperTerminal
Det samme program skrevet i C findes her.
Download
Download 628art.zip
som indeholder sourcekoden i assembler og hexfilen.
Fejlfinding
Du kan finde hjælp til fejlfinding
på siden PIC16F628 UART trouble shooting
(engelsk).
Tak
Jeg har lavet programmet på
basis af Tony Nixon's UART test program, som kan findes her: http://www.piclist.com/techref/microchip/16f877/setup.htm.
Anvendelseseksempel
Hein Ragas viser på sin hjemmeside
Buffered
USART communications hvordan ovenstående testprogram kan indgå
i mere avanceret software (morseblinker med 16 byte cirkulær buffer).