
Serial Character Transmission Using the SCI
MC68HC812A4 Data Sheet, Rev. 7
Freescale Semiconductor
177
14.12.2 Code Listing
NOTE
A comment line is delimited by a semicolon. If there is no code before
comment, a semicolon (;) must be placed in the first column to avoid
assembly errors.
INCLUDE 'EQUATES.ASM'
; Equates for registers
; User Variables
; Bit Equates
; ----------------------------------------------------------------------
;
MAIN PROGRAM
; ----------------------------------------------------------------------
ORG
$7000
; 16K On-Board RAM, User code data area,
;
; start main program at $4000
MAIN:
BSR
INIT
; Subroutine to Initialize SCI0 registers
BSR
TRANS
; Subroutine to start transmission
DONE:
BRA
DONE
; Always branch to DONE, convenient for breakpoint
; ----------------------------------------------------------------------
;
SUBROUTINE INIT:
; ----------------------------------------------------------------------
INIT:
TPA
; Transfer CCR to A accumulator
ORAA
#$10
; ORed A with #$10 to Set I bit
TAP
; Transfer A to CCR
MOVB
#$34,SC1BDL
; Set BAUD =9600, in SCI1 Baud Rate Reg.
MOVB
#$00,SC1CR1
; Initialize for 8-bit Data format,
;
; Loop Mode
and parity disabled,(SC1CR1)
MOVB
#$08,SC1CR2
; Set for No Ints, and Transmitter enabled(SC1CR2)
LDAA
SC1SR1
; 1st step to clear TDRE flag: Read SC1SR1
STD
SC1DRH
; 2nd step to clear TDRE flag: Write SC1DR register
LDX
#DATA
; Use X as a pointer to DATA.
RTS
; Return from subroutine
; ----------------------------------------------------------------------
;
TRANSMIT SUBROUTINE
; ----------------------------------------------------------------------
TRANS:
BRCLR
SC1SR1,#$80, TRANS ; Wait for TDRE flag
MOVB
1,X+,SC1DRL
; Transmit character, increment X pointer
CPX
#EOT
; Detect if last character has been transmitted
BNE
TRANS
; If last char. not equal to "eot", Branch to TRANS
RTS
; else Transmission complete, Return from Subroutine
; ----------------------------------------------------------------------
;
TABLE : DATA TO BE TRANSMITTED
; ----------------------------------------------------------------------
DATA:
DC.B
'Freescale HC12 Banner - June, 1999'
DC.B
$0D,$0A
; Return (cr) ,Line Feed (LF)
DC.B
'Scottsdale, Arizona'
DC.B
$0D,$0A
; Return (cr) ,Line Feed (LF)
EOT:
DC.B
$04
; Byte used to test end of data = EOT
END
; End of program