- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用遥控器模拟计算机键盘和鼠标
用遥控器模拟计算机键盘和鼠标
关键字:多线程通信 串口通信
串行通讯在通讯领域被广泛应用,标准的RS232接口已成为计算机、计算机外设、交换机和许多通讯设备的标准接口。微机与微机、微机与外设、微机与程控交换机等都可以通过RS232接口进行方便的连接,以实现控制外设和传输数据等目的。在计算机外设中,RS-232串口因为其组成方式简单,编程控制方便而成为最为应用广泛的I/O通道之一。在硬件连接方面,最为简单的方式一条公用地线和两条信号线即可组成串行双工通信线路。而在软件编程控制方面,操作系统亦提供了对应的编程接口,使的开发者能灵活的控制串口工作。
串口通信
----Microsoft Visual C++ 以其界面的开放性著称,因其简单易学、32位面向对象的程序设计及ActivateX的灵活性而受广大计算机开发者的青睐,广泛应用于各个领域。怎样利用VC++进行串口的通讯编程,这是一种基本功。特别是在实时监控、大小型设备的整个生产过程控制等方面,VC++的串口编程显得尤为重要。
一般情况下的串口通讯无非采用两种方法:一是利用Windows的通讯API函数,二是利用VC++(或其它语言)的标准通讯函数_inp、_outp来实现。
Windows的API函数虽然使用面很广,但由于比较复杂而有一定的难度,故简单述之,其编程过程分为初始化串口、配置串口、超时控制、数据传输、关闭串口等。
(一) 初始化串行通讯口
通过计算机串口进行通讯之前,必须根据监控设备的有关通讯参数,约定双方的通讯方式,包括波特率的设置、奇偶位校验及停止位的设立。确定数据传输帧格式,确定UART操作方式。逐个对线路控制寄存器、波特率因子寄存器和M0DEM寄存器写入操作。
先确定计算机的通讯口地址是3F8还是2F8(根据用户的不同要求,可加插卡而有3E8、2E8,甚至使用多用户卡而有3220、3228、4220、4228、5220、5228),例中以2F8做为端口地址。利用_outp(PORT,0x0c)将波特率设置为9600,(_outp(PORT,0x30)将波特率设置为2400,_outp(PORT,0x18)将波特率设置为4800)。
数据传输格式则由地址PORT+3确定,如选用七位一停止位偶校验,则采用outp(PORT+3,0x3a)及outp(PORT+3,0x1a)两个语句;如选用八位一停止位无奇偶校验,则采用outp(PORT+3,0x3a)及outp(PORT+3,0x03)两个语句,可参考有关异步通讯数据格式方面的书。初始化串行通讯口ystemDlg的一个方法, 类CsystemDlg生成的对象在主线程中运行)如下:
void CSystemDlg::Com_init()
{
BYTE i;
_outp(com_base+3,0x80);
_outp(com_base ,0x18); /* baud rate 4800 */
_outp(com_base+1,0);
/*8bit 1stop no even */
_outp(com_base+3 ,0x3a);
_outp(com_base+3 ,0x03);
i=_inp(com_base+5) 0xfe;
_outp(com_base,i);
SetDTREnable(true); //将DTR置高,使Com口处于接收数据的状态
}
(二) 、查询接收流程
只需CPU检测到UART接收器数据准备就绪,即可从接收器数据寄存器中读取一字符。接收方首先输出数据终端就绪有效(DTR=1),然后检测MODEM状态寄存器,只有DSR=1,CPU才接收一字符。 1 2 3 4 5 6 字节 0x00 本 地
地 址 目 标
地 址 功 能
编 码 按 键
编 码 0xFF 含义 开头 本 地
地 址 目 标
地 址 功 能
编 码 按 键
编 码 结尾 注:0x00,0xFF表示十六进制数据
因为计算机CPU的速度远远高于串口实际通信所能达到的波特率,为了保证主程序不被阻塞,故采用多线程的方式把读串口数据的模块放于子线程(线程名称为ReadCom)中进行。如下程序段:
UINT ReadCom(LPVOID pParam)
{
BYTE i,j; //临时字节变量
CSystemDlg *Dlg=(CSystemDlg*)pParam; //获取主线程的指针
int PORT=Dlg-com_base; //串口地址
Dlg-SetDTREnable(true); //设置串口为接收状态
i=_in
您可能关注的文档
最近下载
- 2024年中级社工法规四色讲义-完整版全189页 .pdf VIP
- 17K408:散热器选用与管道安装.docx VIP
- 2025年湖北省武汉市高考物理四调试卷+答案解析(附后) .pdf VIP
- 合信 COTRUST科创思CTSC-200系列用户手册V1.40.pdf
- 2012湖南公务员考试-公共基础知识.doc VIP
- 二年级语文教师家长会专用.ppt
- 杭州名鑫双氧水有限公司每年10万吨(折27.5%)过氧化氢技术改造项目可行性研究报告.doc
- DB14Z 1-2025 高速公路智慧服务区建设指南.docx
- [城市轨道交通地下段列车运行引起的住宅室内振动与结构噪声限值及测量方法上海市.doc VIP
- SR变更管理程序+变更全套表单 OK.doc
文档评论(0)