首页 >> 中医丰胸

在下实现无线通信的方法牛

中医丰胸  2021年09月06日  浏览:4 次

三、 应用实例

由于该项目的软件源代码较长,我们只拿出和串口通信有关的程序片段来供大家参考。在我们的工作中实践了三种通信方式,即查询方式、事件驱动方式、事件驱动转查询方式。这三种方式各有利弊,查询方式方便可靠,可利用协议或设定时钟进入和退出查询状态,但不是资源的有效利用方式;事件触发方式对于定长通信非常有效,但定长通信在有些场合不实用;事件驱动转查询方式既有事件驱动的特点又有转查询方式特点,可以说是集二者之长,有效利用资源。下面着重介绍事件驱动转查询方式。

首先在公共模块中定义和ONCOMM有关的参数:

Global Const MSCOMM_EV_RECEIVE = 2‘收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。

Global Const MSCOMM_ER_RXOVER = 1008‘接受缓冲区溢出,接收缓冲区没有空间。

Global Const MSCOMM_ER_TXFULL = 1010 ‘传输缓冲区已满。传输字符时传输缓冲区已满。

在启动过程中对串口和输入输出缓冲区初始化:

Sub Form_Load ()

ttings = \"1200,n,8,1\" 设定波特率1200bps,无校验,8位数据位,1位停止位

mPort = 1 串口1

putLen = 1 一次从输入缓冲区中读取一个字符

BufferSize = 512 定义输入缓冲区为512字节(bytes)

BufferCount = 0 清空输入缓冲区

tBufferCount = 0 清空输出缓冲区

rtOpen = True 启动串口

End Sub

下面是发送数传命令的子过程,启动该过程由一个定时器控制:

Sub sample_data ()

SEnable = True 将Modem的PTT置高,同时打开对讲机

Call time_delay 适当延时

tput = \"*TRNS\" + Chr$(13) 发送命令

Do

该循环用来检测命令是否全部发送完毕

Loop Until tBufferCount = 0

Call time_delay

适当延时

SEnable = False 将Modem的PTT置低,将对讲机改为接受状态

BufferCount = 0 清空接收缓冲区

hreshold = 1 设定RThreshold = 1,等待出发OnComm事件

End Sub

在OnComm编写接收和处理代码:

Sub Comm1_OnComm ()

Select Case mEvent

Case MSCOMM_ER_RXOVER 接收缓冲区溢出,可插入相应的代码

Case MSCOMM_ER_TXFULL 传输缓冲区已满,可插入处理代码

Case MSCOMM_ER_RECEIVE 收到1个字符,可进入以下处理过程

hreshold = 0 不再响应OnComm事件,转入查寻方式接收

ii = 0

iii = 0: sinn = Chr$(42): sinn1 = Chr$(42)初始化变量

Do

duration = Timer + .2 设定超时退出的时间值

iii = iii + 1

sinn1 = sinn

Do 该循环判断输入缓冲区是否有数据或是否超时

\'dummy% = DoEvents()

Loop Until BufferCount = 1 Or Timer = duration

If Timer = duration Then

iii = iii - 1

overtime = True 确定超时退出,并非正常退出

Exit Do

End If

sinn = put 正常退出,取值付给sinn

If header_er = 0 Then

GoTo test_header

已经内置了相当多的应用。小小的触摸屏设备上包括了太多不必要的功能 End If

If Asc(sinn) 175 Or Asc(sinn) 160 Then 判断包头是否正确

iii = 0

GoTo station_number_er 包头不正确,丢掉该数据

End If

test_header:

header_er = 0 包头正确,接受到包头,header_er=0

ssin(iii) = sinn \'put date into string dimantion

station_number = Asc(ssin(1))

package_number = Asc(ssin(2))

sentence_number = Asc(ssin(3))

last_character = Asc(ssin(iii))

station_number_er: Loop Until sinn1 = Chr$(10) and

sinn = Chr$(13) 当收到正确的包尾0A,0D后退出

If overtime = True Then 如果超时非正常退出

overtime = False

hreshold = 1 重新启动OnComm事件,等待接收下一包

timer6_abled = True

GoTo endsub

End If

以下是接收数据正确以后的数据处理程序,包括解码和计算。

If package_number = 1 Then 如果接收数据正确,而且是最后一包

timer2_abled = True 启动控制数传命令定时器

SEnable = True 置PTT为高

tBufferCount = 0 清空输出缓冲区

Call time_delay

适当延时

tput = \"*MACK\" + Chr$(13)发送清内存命令

Do

检测是否发送完毕

Loop Until tBufferCount = 0

Call time_delay 适当延时

SEnable = False 置PTT为低

End If

If package_number 1 Then 如果不是最后一包

hreshold = 1

启动OnComm准备接收下一包

timer6_abled = True

End If

endsub: header_er = 1: BufferCount = 0

\'empty inbuffer protect from bed data on the inbuffer

End Select

End Sub查看本文来源

月经导致的腰疼怎么缓解
黄山白癜风医院
莆田哪里专业治白癜风
友情链接