home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Sound Sensations!
/
sound_sensations.iso
/
midifile
/
fserial
/
serial.txt
Wrap
Text File
|
1989-02-04
|
3KB
|
80 lines
The follwowing code is written for MaxFORTH and a 68HC11 processor
connected to a 6552 dual serial port chip. The 6552 is mapped into the
address space of the processor. Similar code is used for a 6551 chip
although the registers are a bit different. In fact an 8251 INTEL serial
chip wowuld be used in about the same manner. The registers are different,
but polled operation would be done by monitoring the transmitter ready and
received data flags. The handshaking is done in TDRF? and RDRF? ( read data
ready flag?)
( Serial port S1 June 2, 1988
( modified from code by RANDY DUMSE for 6551 chip by KEN BUTTERFIELD
( software polled half duplex operation
( do not hook int to processor for this example
( designed to talk to 1/2 of a 6552 dual serial port adapter
( second half would use A404, A405, A407 for register addresses
( register addresses are mapped into the memory address space for 68hc11
( Added keyboard interrupt in S-KEY 7-12-88
HEX
A403 CONSTANT S-DATA
A400 CONSTANT S-STATUS
A401 CONSTANT S-CONTROL
40 CONSTANT S-WF
01 CONSTANT S-RF
: S-INIT ( init davidson port ( s1, or s2 )
E0 S-CONTROL C! 0C S-CONTROL C! 7F S-STATUS C! ;
( ODD PARITY, DISABLED, )
( RTS HI, DTR HI, 7 BITS )
( 1 STOP BITS, NO ECHO )
( 9600 BAUD )
( DISABLE ALL INTERRUPTS AND INIT )
: TDRF? S-STATUS C@ S-WF AND ;
: RDRF? S-STATUS C@ S-RF AND ;
: S-EMIT BEGIN TDRF? UNTIL S-DATA C! ;
: S-KEY
BEGIN
?TERMINAL IF ABORT THEN
RDRF?
UNTIL
S-DATA C@
;
: S-?TERMINAL RDRF? ;
: S-TYPE DUP IF OVER + SWAP DO I C@ 7F AND S-EMIT LOOP ELSE 2DROP THEN ;
: S-. S->D SWAP OVER DABS <# #S SIGN #> S-TYPE ;
: S-CR D S-EMIT ;
: S-SPACE 20 S-EMIT ;
: S-EXPECT ( ADDR,COUNT)
( FORMS COUNTED STRING AT ADDR, TERMINATED WITH SPACE TO BE USED WITH NUMBER )
2DUP BLANK
1 - 1 DO I OVER C!
S-KEY DUP 0D = IF DROP LEAVE
ELSE OVER I + C! THEN
LOOP DROP ;
: BYPASS ( CONNECT MAIN TERMINAL TO EXTERNAL SERIAL PORT )
S-INIT BEGIN ?TERMINAL IF KEY S-EMIT THEN
S-?TERMINAL IF S-KEY EMIT THEN
AGAIN ;
: S-ECHO ( echo the name of word defined by this command to the port )
<BUILDS LATEST , DOES>
@ COUNT 7F AND S-TYPE S-SPACE
;
: S-DRAIN ( Remove characters from serial stream until CR )
BEGIN ( used to help handshaking with remote system )
S-KEY D =
UNTIL
;