📄 dfseript.asm
字号:
;--------------------------------------------------------
; 文件名: DFSERIPT.ASM
; 作者: Jason Tseng
;---------
#define DFSERIPT_ASM
#INCLUDE DFSERIPT.INC
PUBLIC TRANSMIT
PUBLIC RECEIVE
BAUDRATE EQU BAUDRATECONST ;用户定义波特率为波特率常数
TX EQU TXPIN ;用户定义TXPIN引脚指定为TX
RX EQU RXPIN ;用户定义RXPIN引脚指定为RX
SDATA .SECTION 'DATA'
COUNT DB ? ;串行位计数器
TXREG DB ? ;发送数据寄存器
RCREG DB ? ;接收数据寄存器
DELAY DB ? ;延时计数器
SERIAL .SECTION 'CODE'
TRANSMIT PROC ;TRANSMIT子程序
MOV TXREG,A ;将发送的数据赋给TXREG
MOV A,BAUDRATE ;设置波特率延时
MOV DELAY,A ;
CLR TX ;发送起始标志位"0"
MOV A,9 ;设置发送数据的位数
MOV COUNT,A ;
TXDELAY: ;
SDZ DELAY ;波特率延时循环
JMP TXDELAY ;
MOV A,BAUDRATE ;重新载入波特率延时常数
MOV DELAY,A ;
SDZ COUNT ;检查数据发送是否完毕
JMP SENDBIT ;如果未发送完毕,跳到SENDBIT发送下一位
JMP ENDTX ;数据发送完毕,跳到ENDTX
SENDBIT:
RRC TXREG ;带借位C循环右移txreg以获得发送的数据
SNZ C ;检查借位C
JMP LOBIT ;C=0跳到LOBIT发送 "0"
SET TX ;C=1发送"1"
JMP TXDELAY ;
LOBIT: ;
CLR TX ;发送"0"
JMP TXDELAY ;
ENDTX: ;
NOP ;延时
NOP ;
SET TX ;发送停止位
T1: ;
SDZ DELAY ;在发送每一位之间延时
JMP T1 ;
MOV A,BAUDRATE ;
MOV DELAY,A ;
T2: ;
SDZ DELAY ;
JMP T2 ;
RET ;
TRANSMIT ENDP ;
RECEIVE PROC ;接收子程序
SZ RX ;检查起始位"0"
JMP RECEIVE ;若无起始位,则跳到receive
MOV A,9 ;接收到起始位则对接收数据进行初始化
MOV COUNT,A ;设置接收位数
MOV A,BAUDRATE+1 ;设置波特率延时
MOV DELAY,A ;
RXDELAY: ;
SDZ DELAY ;波特率延时
JMP RXDELAY ;
MOV A,BAUDRATE+1 ;重新载入波特率常数
MOV DELAY,A ;
SDZ COUNT ;检查数据接收是否完毕
JMP RXBIT ;如果接收未完毕则跳到RXBIT接收下一位数据
MOV A,RCREG ;如果接收完毕,则将准备接收数据
RET ;
RXBIT: ;
SET C ;先设置接收位为"1"
SNZ RX ;检查所接收位是否为"1"
CLR C ;若接收标志为"0",则清除接收位 "0"
RRC RCREG ;带借位循环右移rcreg
JMP RXDELAY ;
RECEIVE ENDP ;
END
;-----
; End of DFSERIPT.ASM
;--------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -