📄 uartqq.asm
字号:
MOV 4AH,#4BH ;UART接收缓冲区首地址
LCALL CTSENT
LCALL SENT ;SPI发送数据
LCALL CTCEIVER
AJMP CXUN
BZ:
LCALL CEIVER ;SPI接收数据
;发送回馈信号 <8MS
LCALL SENTUART ;uart sent
AJMP CXUN
TABLE:
DB 00H,0A0H,00H,00H,00H,00H,00H,41H,42H,43H,44H,45H,0A3H,4FH,31H ;接收
;DB 00H,30H,00H,00H,00H,00H,00H,7DH,7DH,7DH,7DH,7DH,0A3H,4FH,31H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-----------------------------------------------
;
; >> 子程序 -- nRF2401写配置字
;
; 所用寄存器:R2,ACC,延时调用
; 入口参数: DPTR
;-----------------------------------------------
NRFPZ:
PUSH ACC
PUSH 02H
MOV R2,#00H
AGAIN:
MOV A,R2
MOVC A,@A+DPTR
MOV SPI0DAT,A
ACALL DELAY16US ;spi寄存器内容移出等待
INC R2
CJNE R2,#0FH,AGAIN ;写十五个字节
MOV SPI0CN,#03H ;清除SPI中断标志
POP 02H
POP ACC
RET
;.................................................................
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;--------------------------------
; >> 子程序 --- UART 发送
; 30H起,25字节 R0 R1
;--------------------------------
SENTUART:
MOV R1,#30H
MOV R0,#20
SENTUART_1:
MOV A,@R1
MOV SBUF,A
SENTUART_2:
MOV A,PCON
JNB ACC.2,SENTUART_2
ANL PCON,#0FBH
INC R1
DJNZ R0,SENTUART_1
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;--------------------------------
; >> 子程序 --- 延时程序
; 50us,3ms,5us,16us,200ms
;--------------------------------
DELAY200MS:
PUSH 02H
MOV R2,#40H
DL200MA:
ACALL DELAY3MS
DJNZ R2,DL200MA
POP 02H
RET
DELAY50US:
PUSH 00H
PUSH 01H
PUSH ACC
MOV R0,#07H
DL50A:
MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DL50A
POP ACC
POP 01H
POP 00H
RET
DELAY3MS:
PUSH 00H
PUSH 01H
PUSH ACC
MOV R0,#010H
DL3MA:
MOV R1,#0FFH
DL3MB:
NOP
NOP
NOP
NOP
NOP
DJNZ R1,DL3MB
DJNZ R0,DL3MA
POP ACC
POP 01H
POP 00H
RET
DELAY5US:
PUSH 00H
PUSH ACC
MOV R0,#0A8H
DJNZ R0,$
POP ACC
POP 00H
RET
DELAY16US:
PUSH 00H
PUSH 01H
PUSH ACC
MOV R0,#03H
DL16A:
MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DL16A
POP ACC
POP 01H
POP 00H
RET
;.................................................................
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-----------------------------------------------------------------
;
; >>子程序 --- nRF2401配置为接收状态
; <43US
;-----------------------------------------------------------------
CTCEIVER:
CLR CE
CLR CS
CLR EA
NOP
SETB CS
ACALL DELAY5US
MOV A,#31H
MOV SPI0DAT,A
ACALL DELAY16US
MOV SPI0CN,#03H ;清除spi中断标志
CLR CS
ACALL DELAY16US ;等待配置结束
SETB CE ;启动接收
ACALL DELAY5US
SETB EA
RET
;-----------------------------------------------------------------
;
; >>子程序 --- nRF2401配置为发送状态
;
;-----------------------------------------------------------------
CTSENT:
CLR CS
CLR CE
CLR EA
NOP
SETB CS
ACALL DELAY5US
MOV A,#30H
MOV SPI0DAT,A
ACALL DELAY16US
MOV SPI0CN,#03H
CLR CS
ACALL DELAY16US
SETB CE
ACALL DELAY5US
SETB EA
RET
;-------------------------------------------------------
;
; >> 子程序 ——— 接收数据
;
; <8MS R0 R1
;-------------------------------------------------------
CEIVER:
SETB CE
ACALL DELAY50US
MOV A,SPI0DAT ;清空接收缓冲区
CLR EA
MOV R1,#20
MOV R0,#30H
CEIVER_2:
MOV A,#0FFH
MOV SPI0DAT,A ;启动SPI接收
ACALL DELAY16US ;
MOV A,SPI0DAT
MOV @R0,A
INC R0
DJNZ R1,CEIVER_2
;CLR CE
SETB EA
ACALL DELAY3MS
RET
;............................................................
;-------------------------------------------------------
;
; >> 子程序 ——— 发送数据
;
; <8MS R0 R1
;-------------------------------------------------------
SENT:
SETB CE
ACALL DELAY16US
MOV A,#41H
MOV SPI0DAT,A
ACALL DELAY16US
MOV A,#42H
MOV SPI0DAT,A
ACALL DELAY16US
MOV A,#43H
MOV SPI0DAT,A
ACALL DELAY16US
MOV A,#44H
MOV SPI0DAT,A
ACALL DELAY16US
MOV A,#45H
MOV SPI0DAT,A
ACALL DELAY16US ;发送地址
MOV R0,#20
MOV R1,#4BH
SENT_1:
MOV A,@R1
MOV SPI0DAT,A
ACALL DELAY16US
INC R1
DJNZ R0,SENT_1
CLR CE
;ACALL CLEAR
ACALL DELAY3MS
ACALL DELAY3MS
SETB CE
RET
CLEAR:
MOV R0,#20
MOV R1,#4BH
CLEAR_1:
MOV A,#0FFH
MOV @R1,A
DJNZ R0,CLEAR_1
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-----------------------------------------------------------------
;
; >>中断程序 --- 与上位机的UART通信之中断处理
;
;-----------------------------------------------------------------
UART:
PUSH ACC
JNB RI,UARTT
UARTR:
CLR RI
MOV A,SBUF
MOV R1,4AH
MOV @R1,A
INC 4AH
DJNZ 49H,UART_1
ORL PCON,#40H ;UART接收完成标志
AJMP UART_1
UARTT:
CLR TI
ORL PCON,#04H
UART_1:
POP ACC
RETI
SPI:
ACALL DELAY16US
CLR SPIF
CLR RXOVRN
RETI
;.............................................................
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -