Hi,
I started reading about parity, flow control and all that jazz, but I am clued out as to how to deal with dropped/corrupt serial frames. The articles say that checking parity doesn't 100% solve all the problems. I am currently using 9600, n , 8, 2.
My program uses asynchronous serial communications by bit-banging the 8085 serial port. It works fine, but I found one serial frame for one character that didn't work from the teraterm log. P (50 hex) in Press shows up blank in the Teraterm log and in Teraterm it is missing.
Any suggestions on how to correct the issue would be appreciated.
-Kei
Teraterm Log (with binary set)
![teraterm_log.png teraterm_log.png](https://forum.allaboutcircuits.com/data/attachments/307/307943-40038bcf2ccd5e9ef7f9dd817491d05d.jpg)
Teraterm Window
![teraterm_window.PNG teraterm_window.PNG](https://forum.allaboutcircuits.com/data/attachments/307/307944-ad8249832592745ea566c3db3cea8cd5.jpg)
8085 Assember Code
I started reading about parity, flow control and all that jazz, but I am clued out as to how to deal with dropped/corrupt serial frames. The articles say that checking parity doesn't 100% solve all the problems. I am currently using 9600, n , 8, 2.
My program uses asynchronous serial communications by bit-banging the 8085 serial port. It works fine, but I found one serial frame for one character that didn't work from the teraterm log. P (50 hex) in Press shows up blank in the Teraterm log and in Teraterm it is missing.
Any suggestions on how to correct the issue would be appreciated.
-Kei
Teraterm Log (with binary set)
![teraterm_log.png teraterm_log.png](https://forum.allaboutcircuits.com/data/attachments/307/307943-40038bcf2ccd5e9ef7f9dd817491d05d.jpg)
Teraterm Window
![teraterm_window.PNG teraterm_window.PNG](https://forum.allaboutcircuits.com/data/attachments/307/307944-ad8249832592745ea566c3db3cea8cd5.jpg)
8085 Assember Code
Code:
# ORG 00A3H
# DB DATA:20H,0DH,0AH,57H,65H,6CH,63H,6FH,6DH,65H,20H,74H,6FH,20H,74H,68H,65H,20H,38H,30H,38H,35H,20H,4DH,6FH,6EH,69H,74H,6FH,72H,0DH,0AH,50H,72H,65H,73H,73H,20H,68H,20H,66H,6FH,72H,20H,68H,65H,6CH,70H,0DH,0AH,3EH
# ORG 00D6H
# DB DATA:0DH,0AH,38H,30H, 38H, 35H, 20H, 4DH, 6FH, 6EH, 69H, 74H, 6FH, 72H, 20H, 48H, 65H, 6CH, 70H, 0DH, 0AH,4CH, 65H, 67H, 65H, 6EH, 64H, 3AH, 20H, 78H, 78H, 78H, 78H, 68H, 20H, 73H, 74H, 61H, 72H, 74H, 69H, 6EH, 67H, 20H, 6DH, 65H, 6DH, 6FH, 72H, 79H, 20H, 61H, 64H, 64H, 72H, 65H, 73H, 73H, 2CH, 20H, 78H, 78H, 68H, 2CH, 20H, 79H, 79H, 68H, 2CH, 20H, 7AH, 7AH, 68H, 2CH, 2EH, 2EH, 2EH, 20H, 64H, 61H, 74H, 61H, 0DH, 0AH,0DH,0AH,77H,20H,78H,78H,78H,78H,68H, 20H, 78H, 78H, 68H, 2CH, 20H, 79H, 79H, 68H, 2CH, 20H, 7AH, 7AH, 68H, 2CH, 20H, 2EH, 2EH, 2EH, 20H, 77H, 72H, 69H, 74H, 65H, 20H, 64H, 61H, 74H, 61H, 20H, 74H, 6FH, 20H, 52H, 4FH, 4DH, 0DH, 0AH,72H, 20H, 78H, 78H, 78H, 78H, 68H, 20H, 78H, 78H, 68H, 2CH, 20H, 79H, 79H, 68H, 2CH, 20H, 7AH, 7AH, 68H, 2CH, 20H, 2EH, 2EH, 2EH, 20H, 72H, 65H, 61H, 64H, 20H, 64H, 61H, 74H, 61H, 20H, 66H, 72H, 6FH, 6DH, 20H, 52H, 4FH, 4DH, 0DH, 0AH,65H, 20H,78H, 78H, 78H, 78h,68H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 65H, 78H, 65H, 63H, 75H, 74H, 65H, 73H, 20H, 74H, 68H, 65H, 20H, 70H, 72H, 6FH, 67H, 72H, 61H, 6DH, 20H, 61H, 74H, 20H, 78H, 78H, 78H, 78H, 68H, 0DH, 0AH,73H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 28H, 72H,65H,73H,65H,74H,29H, 20H, 65H, 78H, 65H, 63H, 75H, 74H, 65H, 73H, 20H, 74H, 68H, 65H, 20H, 70H, 72H, 6FH, 67H, 72H, 61H, 6DH, 20H, 61H, 74H, 20H, 30H, 30H, 30H, 30H, 68H, 0DH,0AH,3EH
# ORG 01FDH
# DB DATA:0DH,0AH,7CH,5CH,2DH,2DH,2DH,2FH,7CH,0DH,7CH,20,6FH,5F,6FH,20,7CH,0DH,20,5C,5F,5E,5F,2FH,0DH,0AH,3EH
# ORG 0000H
LXI SP,7FFFH
INITIALIZE: MVI D,00H
MVI E,33H
LXI H,00A3H
START: PUSH H
MOV C,M
CALL COUT
POP H
INX H
DCX D
PUSH PSW
MOV A, D ; MOVE THE CONTENT OF REGISTER D INTO THE ACCUMULATOR A
ORA E ; LOGICAL OR OPERATION WITH REGISTER E
JNZ START
POP PSW
MENU: CALL CIN
CPI 68H
JNZ DEMO
CALL HELPPARM
JZ START
DEMO: CPI 64H
JNZ RESET
CALL DEMOPARM
JZ START
RESET: CPI 73H
JNZ MENU
JMP INITIALIZE
HLT
COUT:
DI
MVI B,0B ; NUMBER OF OUTPUT BITS
XRA A ; CLEAR CARRY FOR START BIT
CO1: MVI A,80 ; SET THE SDE FLAG
RAR ; SHIFT CARRY INTO SOD FLAG
CMC ; AND INVERT CARRY. WHY? (SERIAL IS INVERTED?)
SIM ; OUTPUT DATA BIT
LXI H,0112 ; LOAD THE TIME DELAY FOR ONE BIT WIDTH
CO2: DCR L ; WAIT FOR BIT TIME
JNZ CO2
DCR H
JNZ CO2
STC ; SHIFT IN STOP BIT(S)
MOV A,C ; GET CHAR TO SEND
RAR ; LSB INTO CARRY
MOV C,A ; STORE ROTATED DATA
DCR B
JNZ CO1 ; SEND NEXT BIT
EI
LXI H,3FFF ; WAIT A WHILE BEFORE SENDING THE CHARACTER AGAIN
CHILL: DCR L
JNZ CHILL
DCR H
JNZ CHILL
RET
CIN:
DI
PUSH B
MVI B,09 ; LOOP COUNT IS NUMBER OF BITS TO BE READ MINUS ONE
CI1: RIM ; DOES NOT INCLUDE STOP BITS
ORA A
JM CI1
LXI H,0109H ; DELAY A HALF BIT TIME TO GET TO THE MIDDLE OF THE START BIT
CI2: DCR L
JNZ CI2
DCR H
JNZ CI2
CI3: LXI H,0112H ; DELAY TO THE MIDDLE OF THE NEXT DATA BIT
CI4: DCR L
JNZ CI4
DCR H
JNZ CI4
RIM ; READ THE NEXT DATA BIT
RAL ; SHIFT THE DATA BIT INTO THE CARRY FLAG
DCR B ; EXIT IF ALL OF THE BITS HAVE BEEN READ
JZ CI5
MOV A,C ; CHARACTER IN PROGRESS INTO A
RAR ; SHIFT THE DATA BIT FROM CARRY INTO THE MSB
MOV C,A ; STORE THE CHARACTER BACK INTO C
JMP CI3 ; GET THE NEXT BIT
CI5: MOV A,C ; RETURN THE CHARACTER IN A
POP B
EI
RET
HELPPARM:
LXI H,00D6H
MVI D, 01H
MVI E, 27H
RET
DEMOPARM:
LXI H,01FDH
MVI D, 00H
MVI E, 21H
RET
Last edited: