
II-50
EPSON
S1C88348/317/316/308 TECHNICAL SOFTWARE
9 SERIAL INTERFACE 2 (ASYNCHRONOUS INTERFACE)
Source List
(2)
(1)
and
a,#11110011b
or
a,#00001100b
ld
[br:low intr_pr1],a
ld
a,[low intr_en1]
and
a,#01111000b
;ept1 interrupt dis.(baud rate control)
or
a,#00000111b
ld
[br:low intr_en1],a
;eserr esrec and estra intr. en
ld
a,sc
and
a,#00111111b
or
a,#01000000b
ld
sc,a
;i1 flag clear (en. /irq2 intr.)
ret
(2) Receiving of asynchronous serial interface (8-bit mode)
;************************************************************************
;*
*
;*
async 8-bit mode receive (p13 and 12 = hand shake:not use)
*
;*
*
;************************************************************************
;*** control routine
asyncrv:
ld
br,#br_io
;set br reg. address to 0ffxxh
carl
osc1toosc3
;change osc1 to osc3 ***
ld
a,[lod vdd_ngf]
;vdd ng flag
cp
a,#0ffh
jrl
z,asyncrv03
;psc=1/1*fosc3(4.9152mhz),timer1=reload mode and reload data set to timer 1
ld
[br:low pt_mode2],#00000110b
or
[br:low pt_mode2],#00000001b
;timer 1 start (baud rate)
ld
iy,#lod receive_buffer
;receive data buffer
ld
b,#0
;set receive counter (00h=256)
ld
a,[br:low ser]
and
a,#00000001b
ld
[br:low ser],a
;rxen=0 (dis.) async reset
xor
a,a
ld
[lod receive_flag],a
;async receive interrpt flag clear
ld
[lod error_flag],a
;async receive error flag clear
ld
a,[br:low ser]
and
a,#00000001b
or
a,#00000100b
ld
[br:low ser],a
;rxen=1 (en.)
;no hand shake
asyncrv00:
ld
a,[br:low ser]
and
a,#00000101b
or
a,#00001000b
ld
[br:low ser],a
;rxtrg=set and error reset
;wait async receive interrupt
asyncrv01:
ld
a,[lod receive_flag]
;async receive interrput flag
cp
a,#0ffh
jrs
z,asyncrv02
;
ld
a,[lod error_flag]
;async error interrupt flag
cp
a,#00h
jrs
z,asyncrv01
;receive error occurrs
;
async receive error processing
;
xor
a,a
ld
[lod error_flag],a
;clear error interrupt flag
jrs
asyncrv03
;
;receive no error
asyncrv02:
xor
a,a
ld
[lod receive_flag],a
;clear async receive interrupt flag
ld
a,[br:low trxd]
;receive data read
ld
[iy],a
;set receive data buffer
inc
iy
;receive buffer + 1
djr
nz,asyncrv00
;until buffer end (256 bytes)
;