home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Acorn User 9
/
AU_CD9.iso
/
Cover_Discs
/
Back_Issues
/
1998_12
/
Regulars
/
RTR
/
Serial3
< prev
next >
Wrap
Text File
|
1998-09-23
|
6KB
|
213 lines
PIC 16C84 Assembler V1.4 by Mike Cook
File:- ADFS::Square.$.Develop.SerialPIC.SerialIO
Assembled on :- Thu,02 Jul 1998 at 17:02:31
;Serial I/O User Port
;For an 10 MHz clock
;A0 - Serial out
;A1 - Serial in
;A2 - CTS allows serial input
;A3 - RTS output held until this is low
;A4 - I/O mode 0 = Input mode 1 = Output mode
;Note for 16F84 invert the state of the PWRTE
list P=16C84
C equ 0
PCL equ 2
Z equ 2
PORTB equ 6
PORTA equ 5
TRISB equ 86H
TRISA equ 85H
EECON1 equ 88H
EEDATA equ 8
EEADR equ 9
STATUS equ 3
RP0 equ 5
INC equ 1
cts equ 2
rts equ 3
sBuf equ 0ch ;Serial send buffer
Scount equ 0dh ;Tempory Counter
Cdown equ 0eh ;Time delay countdown
rBuf equ 0fh ;Recieve buffer
;
org 0
0000 2833 goto Start
;Recieve a serial byte
Rx:
0001 1105 bcf PORTA,cts ;Allow for incomming data
0002 3008 movlw 8 ;Number of data bits to get
0003 008D movwf Scount
Sb:
0004 1885 btfsc PORTA,1 ;Hold until start bit
0005 2804 goto Sb
0006 1505 bsf PORTA,cts ;Stop any more incomming
0007 2028 call hDelay ;Half a baud delay
Rnb:
0008 1003 bcf STATUS,C ;Clear the carry bit
0009 0C8F rrf rBuf,f ;Prepare for next bit
000A 202B call rDelay ;Full baud delay for recieve
000B 1885 btfsc PORTA,1 ;Test input
000C 178F bsf rBuf,7 ;Set if needed
000D 0B8D decfsz Scount,f ;See if finished
000E 2808 goto Rnb ;Round again if not
000F 202B call rDelay ;Allow for stop bit to start
0010 0008 return
;Send a serial byte
Send:
0011 1985 btfsc PORTA,rts ;Only proceed when rts is low
0012 2811 goto Send
0013 3009 movlw 9 ;Number of data bits to send
0014 008D movwf Scount
0015 1005 bcf PORTA,0 ;Start bit
0016 2025 call cDelay ;Extra delay compensation
Sloop:
0017 202E call Delay
0018 180C btfsc sBuf,0 ;Set the next bit
0019 1405 bsf PORTA,0
001A 1C0C btfss sBuf,0
001B 1005 bcf PORTA,0
001C 0C8C rrf sBuf,f ;Shift for next time
001D 0B8D decfsz Scount,f
001E 2817 goto Sloop ;Round until finished
001F 1405 bsf PORTA,0 ;Stop bit
0020 2025 call cDelay ;Extra delay compensation
0021 202E call Delay
0022 202E call Delay
0023 2025 call cDelay ;For good measure
0024 0008 return
cDelay:
0025 3009 movlw 9 ;Small delay at end of send
0026 008E movwf Cdown
0027 2830 goto Dloop
hDelay:
0028 3015 movlw 21 ;half delay for serial recieve 10MHz clock
0029 008E movwf Cdown ; 19,200 Baud rate
002A 2830 goto Dloop
rDelay:
002B 3026 movlw 38 ;Delay for serial recieve 10MHz clock
002C 008E movwf Cdown ; 19,200 Baud rate
002D 2830 goto Dloop
Delay:
002E 3027 movlw 39 ;Delay for serial send 10MHz clock
002F 008E movwf Cdown ; 19,200 Baud rate
Dloop:
0030 0B8E decfsz Cdown,f
0031 2830 goto Dloop
0032 0008 return
Start:
0033 1683 bsf STATUS,RP0 ;SELECT REGISTER BANK 1
0034 301A movlw 1Ah ;Bits 4,3 & 2 inputs
0035 0085 movwf TRISA^80H
0036 1283 bcf STATUS,RP0 ;SELECT REGISTER BANK 0
0037 1A05 btfsc PORTA,4 ;See if in input or output mode
0038 2846 goto InLoop
0039 1683 bsf STATUS,RP0 ;SELECT REGISTER BANK 1
003A 3000 movlw 0 ;All port B to outputs
003B 0086 movwf TRISB^80H
003C 1283 bcf STATUS,RP0 ;SELECT REGISTER BANK 0
003D 1405 bsf PORTA,0 ;Serial at Mark
003E 1505 bsf PORTA,cts ;CTS disabled
outMain:
003F 2001 call Rx ;Get byte to output
0040 080F movf rBuf,w ;Byte to send
0041 0086 movwf PORTB ;Output it
0042 0806 movf PORTB,w ;Get output state
0043 008C movwf sBuf ;Ready to output it
0044 2011 call Send ;Send it back to computer
0045 283F goto outMain
InLoop:
0046 1683 bsf STATUS,RP0 ;SELECT REGISTER BANK 1
0047 30FF movlw 0ffh ;All port B to inputs
0048 0086 movwf TRISB^80H
0049 1381 bcf 1,7 ;Enable pull up resistors
004A 1283 bcf STATUS,RP0 ;SELECT REGISTER BANK 0
004B 1405 bsf PORTA,0 ;Serial at Mark
004C 1505 bsf PORTA,cts ;CTS disabled
inMain:
004D 2001 call Rx ;Get byte to initiate read
004E 0806 movf PORTB,w ;Get input state
004F 008C movwf sBuf ;Ready to output it
0050 2011 call Send ;Send it back to computer
0051 284D goto inMain
end
Memory Usage Map ('X' = Used, '-' = Unused)
0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXX-XXXXXXXX XX-------------- ---------------- ----------------
33 Lables & Constants:-
Hex Name
0000 C
0002 PCL
0002 Z
0006 PORTB
0005 PORTA
0086 TRISB
0085 TRISA
0088 EECON1
0008 EEDATA
0009 EEADR
0003 STATUS
0005 RP0
0001 INC
0002 cts
0003 rts
000C sBuf
000D Scount
000E Cdown
000F rBuf
0001 Rx
0004 Sb
0008 Rnb
0011 Send
0017 Sloop
0025 cDelay
0028 hDelay
002B rDelay
002E Delay
0030 Dloop
0033 Start
003F outMain
0046 InLoop
004D inMain
0 Errors