📄 theserialcommunicationbetweenmcuandvbofeastchina.txt
字号:
ORG0000H
LJMP MAIN
ORG0023H
LJMP SRT ;串行中断入口
ORG0030H
MAIN: MOV SP,#60H
MOV TMOD,#20H ;设T1为方式2,作波特率发生器
MOV PSON,#80H ;位SMOD=1
MOV TH0,#0FDH ;波特率=19.2K
MOV R0,#30H ;串行接收、发送缓冲区首址
SETB TR1
CLR ET1;禁止T1中断
MOV SCON,#50H ;串行方式1,REN=1
SETB ES ;允许串行中断
SJMP $
SRT: ;串行中断子程序
CLR ES ;关闭串行中断
CLR TI
CLR RI
GET: MOV A,SUBF
CJNE A,#13,GO ;若接收到回车符,结束
SJMP EXIT
GO: MOV@R0,A ;接收到的字符存入缓冲区
INC R0
WAIT: JBC RI,GET
SJMP WAIT
EXIT: MOV A,R0
SUB A,#30H ;接收到的有效字符个数
MOV R2,A
DEC R0
SEND: MOV SUBF,@R0;按反序发送刚接收到得字符串
WAIT1: JNB TI,WAIT1
CLR TI
DEC R0
DJNZ R2,SEND
WAIT2: MOV SUBF,#13;发送回车,结束标志。
JNB TI,WAIT2
CLR TI
SETB ES ;允许串行中断,准备下次通信
RETI
(6)编写串行通信子程序
PrivateSubsend(outstring,n)
DiminstringAsString’定义接收字符串instring
MSComm1.CommPort=1’定义该通信控件属性,用端口COM1
MSComm1.Settings=”19200,n,8,1”’波特率19200,无奇偶校验,8位数据,1个停止位
MSComm1.InputLen=0’当输入占用时,告诉控件读入整个缓冲区
MSComm1.PortOpen=True’打开端口
MSComm1.RThreshold=n’接收的字符串长度此处将是n
MSComm1.Output=outstring+Chr(&HD)’发送以回车符结尾的字符串
以下是采用查询方式从端口获得单片机方发来的数据
Do
DoEvents
LoopUntilMSComm1.InBufferCount>=n’等待,直到输入缓冲区计数大于或等于n
Print”InBufferCount=”;MSComm1.InBufferCount’显示接收到的字符串长度
instring=MSComm1.Input’取得接收到的字符串
Print”Ok,get:”;instring’显示接收到的字符串
MSComm1.PortOpen=False’关闭端口
EndSub
(7)上述子程序中也可以采用事件驱动的方法从端口获得单片机方发来的数据。把上述
部分(从Do开始到关闭端口)改为下列子程序:
PrivateSubMSComm1_OnComm()
DiminstringAsString
SelectCaseMSComm1.CommEvent
’errer捕捉每一个事件或错误,把代码写在对应的case语句后面
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -