/*UART1 DRIVERS
CPU_TYPE == 1 SST
115200 Boundrate, 1 start bit, 8 data bit, 1 stop bit, no verify, 12 clock machine
22.1184MHz crystal
CPU_TYPE == 0 STC11fXX series
115200 Boundrate, 1 start bit, 8 data bit, 1 stop bit, no verify, 1 clock machine
22.1184MHz crystal
*/
#include "..\define\defines.h"
#if UART1
#include <intrins.h>
#include "uart1.h"
#include "..\type\types.h"
#include "..\error\error.h"
#include "..\delay\delay.h"
#include "..\global\global.h"
#if CPU_TYPE == 1
#pragma asm
RX BIT 0A0H.4 ;Recv GPIO
TX BIT 0A0H.5 ;Transmit GPIO
TO EQU 050H ;Timeout errorcode
?PR?_UART1_Send?UART1 SEGMENT CODE
?PR?_UART1_Recv?UART1 SEGMENT CODE
?DT?_UART1_Recv?UART1 SEGMENT DATA OVERLAYABLE
PUBLIC _UART1_Recv
PUBLIC _UART1_Send
RSEG ?DT?_UART1_Recv?UART1
?_UART1_Recv?BYTE:
i?146: DS 1
; /*Send data to UART1
; buffer - buffer to send,buffer must in XDATA
; size - send length
; */
; void UART1_Send(U8 *buffer,U8 size)
RSEG ?PR?_UART1_Send?UART1
_UART1_Send:
USING 0
; SOURCE LINE # 44
;---- Variable 'buffer?040' assigned to Register 'R1/R2/R3' ----
;---- Variable 'size?041' assigned to Register 'R5' ----
; {
; SOURCE LINE # 45
?C0001:
; U8 i,s;
;
; do{
MOV A,R5
JZ ?C0005
; i = 8;
; SOURCE LINE # 49
;---- Variable 'i?042' assigned to Register 'R7' ----
MOV R7,#08H
; s = *buffer;
; SOURCE LINE # 50
MOV DPL,R1; LCALL ?C?CLDPTR
MOV DPH,R2
MOVX A,@DPTR
MOV R6,A
;---- Variable 's?043' assigned to Register 'R6' ----
;
; /*start bit*/
; TX = 0;
; SOURCE LINE # 53
CLR TX
; delay_tx_start();
; SOURCE LINE # 54
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
?C0003:
;
; /*data*/
; while(i--){
MOV A,R7
JZ ?C0004
; SOURCE LINE # 57
; TX = s & 0x01;
; SOURCE LINE # 58
MOV A,R6
RRC A
MOV TX,C
; s >>= 1;
; SOURCE LINE # 60
MOV A,R6
CLR C
RRC A
MOV R6,A
; delay_tx_data();
; SOURCE LINE # 61
NOP
NOP
; }
; SOURCE LINE # 62
DEC R7
SJMP ?C0003
?C0004:
NOP
NOP
NOP
;
; /*stop bit*/
; TX = 1;
; SOURCE LINE # 65
SETB TX
; delay_tx_stop();
; SOURCE LINE # 66
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;
; /*next byte*/
; size--;
; SOURCE LINE # 69
; buffer++;
; SOURCE LINE # 70
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; }
; SOURCE LINE # 71
DEC R5
SJMP ?C0001
; }
; SOURCE LINE # 72
?C0005:
RET
; END OF _UART1_Send
;
; /*Recv data from UART1
; buffer - recv buffer,buffer must in XDATA
; size - recv length
; return errorcode
; */
; E8 UART1_Recv(U8 *buffer,U8 size)
RSEG ?PR?_UART1_Recv?UART1
_UART1_Recv:
USING 0
; SOURCE LINE # 81
;---- Variable 'buffer?144' assigned to Register 'R1/R2/R3' ----
;---- Variable 'size?145' assigned to Register 'R5' ----
; {
; SOURCE LINE # 82
?C0008:
JNB RX,?_UART1_Recv?rx_start
; U8 i,r,x;
;
; do{
; SOURCE LINE # 85
; /*Check start bit*/
; r = RX_TIMEOUT;
; SOURCE LINE # 87
;---- Variable 'r?147' assigned to Register 'R7' ----
MOV i?146,#04H
?C0010:
JNB RX,?_UART1_Recv?rx_start
MOV R6,#0FFH
?C0012:
JNB RX,?_UART1_Recv?rx_start
MOV R7,#0FFH
?C0011:
; do{
; SOURCE LINE # 88
; /*Timeout about ( ( 255 * 4clock * 255 * 4) + (255 * 7clock) + (4 * 7clock) ) * 0.5425 = 565400.5525 us*/
; SOURCE LINE # 91
JNB RX,?_UART1_Recv?rx_start
; }while(--r);
; SOURCE LINE # 93
?C0009:
DJNZ R7,?C0011
JNB RX,?_UART1_Recv?rx_start;
CJNE R5,#0x01,?C0009_2;"A5" cmd no need wait long time,about 50ms
LJMP ?reader_timeout
?C0009_2:
JNB RX,?_UART1_Recv?rx_start
DJNZ R6,?C0012
JNB RX,?_UART1_Recv?rx_start
DJNZ i?146,?C0010
?reader_timeout:
; return eecReaderTimeout;
; SOURCE LINE # 95
MOV R7,#TO
RET
;
; rx_start:
; SOURCE LINE # 97
?_UART1_Recv?rx_start:
; /*start bit*/
; delay_rx_start();
; SOURCE LINE # 99
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;
; i = 8;
; SOURCE LINE # 101
MOV i?146,#08H
; x = 0;
; SOURCE LINE # 102
;---- Variable 'x?148' assigned to Register 'R6' ----
?C0032:
;
; /*data*/
; do{
; SOURCE LINE # 105
; x = RX;
; SOURCE LINE # 106
MOV C,RX
CLR A
RLC A
; x = x<<7;
; SOURCE LINE # 107
SWAP A
RLC A
RLC A
RLC A
ANL A,#080H
MOV R6,A
; r = r>>1;
; SOURCE LINE # 108
MOV A,R7
CLR C
RRC A
MOV R7,A
; r = r|x;
; SOURCE LINE # 109
MOV A,R6
ORL AR7,A
; delay_rx_data();
; }while(--i);
; SOURCE LINE # 111
DJNZ i?146,?C0032
;
; /*stop bit*/
; delay_rx_stop();
; SOURCE LINE # 114
NOP
;
; /*to buffer*/
; *buffer = r;
; SOURCE LINE # 117
MOV A,R7
MOV DPL,R1 ; LCALL ?C?CSTPTR
MOV DPH,R2
MOVX @DPTR,A
; buffer++;
; SOURCE LINE # 118
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
;
; /*next byte*/
; }while(--size);
; SOURCE LINE # 121
DEC R5
MOV A,R5
JNZ ?C0008
;
; return eecSuccess;
; SOURCE LINE # 123
MOV R7,A
; }
; SOURCE LINE # 124
?C0029:
RET
; END OF _UART1_Recv
#pragma endasm
/********************************************************************************************************************************/
#elif CPU_TYPE == 0
#pragma asm
RX BIT 0A0H.4 ;Recv GPIO
TX BIT 0A0H.5 ;Transmit GPIO
TO EQU 050H ;Timeout errorcode
?PR?_UART1_Send?UART1 SEGMENT CODE
?PR?_UART1_Recv?UART1 SEGMENT CODE
?DT?_UART1_Recv?UART1 SEGMENT DATA OVERLAYABLE
PUBLIC _UART1_Recv
PUBLIC _UART1_Send
RSEG ?DT?_UART1_Recv?UART1
?_UART1_Recv?BYTE:
i?146: DS 1
delay?147: DS 1
; /*Send data to UART1
; buffer - buffer to send,buffer must in XDATA
; size - send length
; */
; void UART1_Send(U8 *buffer,U8 size)
RSEG ?PR?_UART1_Send?UART1
_UART1_Send:
USING 0
; SOURCE LINE # 44
;---- Variable 'buffer?040' assigned to Register 'R1/R2/R3' ----
;---- Variable 'size?041' assigned to Register 'R5' ----
; {
; SOURCE LINE # 45
?C0001:
; U8 i,s;
;
; do{
MOV A,R5
JZ ?C0005
; i = 8;
; SOURCE LINE # 49
;---- Variable 'i?042' assigned to Register 'R7' ----
MOV R7,#08H
; s = *buffer;
; SOURCE LINE # 50
MOV DPL,R1; LCALL ?C?CLDPTR
MOV DPH,R2
MOVX A,@DPTR
MOV R6,A
;---- Variable 's?043' assigned to Register 'R6' ----
;
; /*start bit*/
; TX = 0;
; SOURCE LINE # 53
CLR TX
; delay_tx_start();
; SOURCE LINE # 54
; clock 192 - 10 = 182 = 35 * 5 + 3 + 4
MOV delay?147,#35 ;4 clock
NOP ;1 clock
NOP
NOP
NOP
?C0002_0:
DJNZ delay?147,?C0002_0 ;5 clock
?C0003:
;
; /*data*/
; while(i--){
MOV A,R7
JZ ?C0004
; SOURCE LINE # 57
; TX = s & 0x01;
; SOURCE LINE # 58
MOV A,R6
RRC A
MOV TX,C
; s >>= 1;
; SOURCE LINE # 60
MOV A,R6
CLR C
RRC A
MOV R6,A
; delay_tx_data();
; SOURCE LINE # 61
; clock 192 - 21 = 171 = 33 * 5 + 3 + 3
MOV delay?147,#33
NOP
NOP
NOP
?C0002_1:
DJNZ delay?147,?C0002_1
; }
; SOURCE LINE # 62
DEC R7
SJMP ?C0003
?C0004:
NOP
NOP
; /*stop bit*/
; TX = 1;
; SOURCE LINE # 65
SETB TX
; delay_tx_stop();
; SOURCE LINE # 66
; clock 192(192*0.054211=8.68us) = 37 * 5 + 3 + 4
MOV delay?147,#37
NOP
NOP
NOP
NOP
?C0002_2:
DJNZ delay?147,?C0002_2
; clock 153 = 30 * 5 + 3
MOV delay?147,#30
?C0002_3:
DJNZ delay?147,?C0002_3
;
; /*next byte*/
;