📄 serial.asm
字号:
jz Tx_Data_Done ; [5/4]
iord INPUT_PORT ; [5]
and A, CTS ; [4]
IFDEF HW_FLOW_CONTROL
jnz Tx_Data_Exit ; [5/4]
ELSE
nop ; [4]
ENDIF
mov X, [tx_byte_counter] ; [5]
mov A, [X + output_data] ; [6]
mov [tx_data], A ; [5]
mov A, [parity_type] ; [5]
mov [parity], A ; [5]
mov A, [temp] ; [5]
and A, ~TXD ; [4]
;***************************************************************
Tx_Start:
iowr OUTPUT_PORT ; [5]
inc [tx_byte_counter] ; [7]
; Kill 56 cycles (104 - 48 = 56).
call 50_Cycle_Delay ; [50]
6_CYCLE_DELAY ; [6]
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D0:
iowr OUTPUT_PORT ; [5]
mov A, [tx_data] ; [5]
asr ; [4]
mov [tx_data], A ; [5]
; Kill 49 cycles (104 - 55 = 49).
call 42_Cycle_Delay ; [42]
7_CYCLE_DELAY ; [7]
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D1:
iowr OUTPUT_PORT ; [5]
mov A, [tx_data] ; [5]
asr ; [4]
mov [tx_data], A ; [5]
; Kill 49 cycles (104 - 55 = 49).
call 42_Cycle_Delay ; [42]
7_CYCLE_DELAY ; [7]
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D2:
iowr OUTPUT_PORT ; [5]
mov A, [tx_data] ; [5]
asr ; [4]
mov [tx_data], A ; [5]
; Kill 49 cycles (104 - 55 = 49).
call 42_Cycle_Delay ; [42]
7_CYCLE_DELAY ; [7]
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D3:
iowr OUTPUT_PORT ; [5]
mov A, [tx_data] ; [5]
asr ; [4]
mov [tx_data], A ; [5]
; Kill 49 cycles (104 - 55 = 49).
call 42_Cycle_Delay ; [42]
7_CYCLE_DELAY ; [7]
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D4:
iowr OUTPUT_PORT ; [5]
mov A, [data_bit_count] ; [5]
cmp A, 05h ; [5]
JNE Tx_D4_D5_Next ; [5/4]
mov A, [parity_on] ; [5]
cmp A, TRUE ; [5]
JNE Tx_D4_Stop_Next ; [5/4]
;----------------------------------------------------------------
Tx_D4_Parity_Next:
; Kill 37 cycles (104 - 67 = 37).
call 30_Cycle_Delay ; [30]
7_CYCLE_DELAY ; [7]
jmp Tx_Parity_Next ; [5] -> [29]
;----------------------------------------------------------------
Tx_D4_Stop_Next:
; Kill 41 cycles (104 - 63 = 41).
call 34_Cycle_Delay ; [34]
7_CYCLE_DELAY ; [7]
jmp Tx_Stop_0_Next ; [5] -> [24]
;----------------------------------------------------------------
Tx_D4_D5_Next:
mov A, [tx_data] ; [5]
asr ; [4]
mov [tx_data], A ; [5]
; Kill 34 cycles (104 - 70 = 34).
call 34_Cycle_Delay ; [34]
;----------------------------------------------------------------
Tx_D5_Next:
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D5:
iowr OUTPUT_PORT ; [5]
mov A, [data_bit_count] ; [5]
cmp A, 06h ; [5]
JNE Tx_D5_D6_Next ; [5/4]
mov A, [parity_on] ; [5]
cmp A, TRUE ; [5]
JNE Tx_D5_Stop_Next ; [5/4]
;----------------------------------------------------------------
Tx_D5_Parity_Next:
; Kill 37 cycles (104 - 67 = 37).
call 30_Cycle_Delay ; [30]
7_CYCLE_DELAY ; [7]
jmp Tx_Parity_Next ; [5] -> [29]
;----------------------------------------------------------------
Tx_D5_Stop_Next:
; Kill 41 cycles (104 - 63 = 41).
call 34_Cycle_Delay ; [34]
7_CYCLE_DELAY ; [7]
jmp Tx_Stop_0_Next ; [5] -> [24]
;----------------------------------------------------------------
Tx_D5_D6_Next:
mov A, [tx_data] ; [5]
asr ; [4]
mov [tx_data], A ; [5]
; Kill 34 cycles (104 - 70 = 34).
call 34_Cycle_Delay ; [34]
;----------------------------------------------------------------
Tx_D6_Next:
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D6:
iowr OUTPUT_PORT ; [5]
mov A, [data_bit_count] ; [5]
cmp A, 07h ; [5]
JNE Tx_D6_D7_Next ; [5/4]
mov A, [parity_on] ; [5]
cmp A, TRUE ; [5]
JNE Tx_D6_Stop_Next ; [5/4]
;----------------------------------------------------------------
Tx_D6_Parity_Next:
; Kill 37 cycles (104 - 67 = 37).
call 30_Cycle_Delay ; [30]
7_CYCLE_DELAY ; [7]
jmp Tx_Parity_Next ; [5] -> [29]
;----------------------------------------------------------------
Tx_D6_Stop_Next:
; Kill 41 cycles (104 - 63 = 41).
call 34_Cycle_Delay ; [34]
7_CYCLE_DELAY ; [7]
jmp Tx_Stop_0_Next ; [5] -> [24]
;----------------------------------------------------------------
Tx_D6_D7_Next:
mov A, [tx_data] ; [5]
asr ; [4]
mov [tx_data], A ; [5]
; Kill 34 cycles (104 - 70 = 34).
call 34_Cycle_Delay ; [34]
;----------------------------------------------------------------
Tx_D7_Next:
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [tx_data] ; [5]
xor [parity], A ; [7]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_D7:
iowr OUTPUT_PORT ; [5]
mov A, [parity_on] ; [5]
cmp A, TRUE ; [5]
JEQ Tx_D7_Parity_Next ; [5/4]
;----------------------------------------------------------------
Tx_D7_Stop_0_Next:
; Kill 58 cycles (104 - 48 = 56).
call 50_Cycle_Delay ; [50]
6_CYCLE_DELAY ; [6]
jmp Tx_Stop_0_Next ; [5] -> [24]
;----------------------------------------------------------------
Tx_D7_Parity_Next:
; Kill 55 cycles (104 - 49 = 55).
call 50_Cycle_Delay ; [50]
5_CYCLE_DELAY ; [5]
;----------------------------------------------------------------
Tx_Parity_Next:
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, [parity] ; [5]
and A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_Parity:
iowr OUTPUT_PORT ; [5]
; Kill 75 cycles (104 - 29 = 75).
call 34_Cycle_Delay ; [34]
call 34_Cycle_Delay ; [34]
7_CYCLE_DELAY ; [7]
;----------------------------------------------------------------
Tx_Stop_0_Next:
BIT_DELAY ; [14 + (bit_rate * 104)]
mov A, TXD ; [4]
or A, [temp] ; [6]
;***************************************************************
Tx_Stop_0:
iowr OUTPUT_PORT ; [5]
; If stop_bit_count is 2, insert the
; proper delay time prior to the 2nd
; stop bit.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -