社区
硬件/系统
帖子详情
串行通信:如何设置线路控制寄存器,设置奇偶校验位?
XiaoDingDangKM
2003-05-20 05:46:13
如何设置每一帧的奇偶校验位(第9位)?
同一问题的不同提法:如何设置线路控制寄存器某3位?
NT不允许用IN,OUT汇编指令,所以只有用高层函数,如何做呀?
...全文
268
8
打赏
收藏
串行通信:如何设置线路控制寄存器,设置奇偶校验位?
如何设置每一帧的奇偶校验位(第9位)? 同一问题的不同提法:如何设置线路控制寄存器某3位? NT不允许用IN,OUT汇编指令,所以只有用高层函数,如何做呀?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhaoweidf
2003-05-25
打赏
举报
回复
学习
RomanticProgrammer
2003-05-25
打赏
举报
回复
<RS-232和调制解调器高级通信编程》(人民邮电)
里面有用汇编实现地代码。
RomanticProgrammer
2003-05-25
打赏
举报
回复
<RS-232和调制解调器高级通信编程》(人民邮电)
里面有用汇编实现地代码。
NowCan
2003-05-21
打赏
举报
回复
我估计这个问题讨论结果是让你写驱动!
你的要求实际上和发送9数据位一样。
XiaoDingDangKM
2003-05-21
打赏
举报
回复
如何设置每一帧的奇偶校验位(第9位)?
同一问题的不同提法:如何设置线路控制寄存器某3位?
因为我要将奇偶位设置位1来告诉单片机群我(PC)发来的是地址,置为0说明我发来的是
数据。
NT不允许用IN,OUT汇编指令,所以只有用高层函数,如何做呀?
leejd
2003-05-20
打赏
举报
回复
设置STR和DTR
参考代码:
====================================
//串口初始化
bool __fastcall TComm::ComInit(AnsiString Port, int Baud, int Byte, int Parity,
int Stop, HANDLE& hCom)
{
DCB dcb;
COMMTIMEOUTS CommTimeOuts;
BOOL fSuccess;
//打开串口
hCom = CreateFile(Port.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);
if (hCom == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"打开通信设备文件失败!","错误",MB_OK);
return false;
}
if(!SetupComm(hCom,BLOCK_LENGTH,BLOCK_LENGTH))
{
MessageBox(NULL,"设置串行口内部输入、输出缓冲区长度操作异常!","错误",MB_OK);
return false;
}
if (!GetCommState(hCom, &dcb))
{
MessageBox(NULL,"获取通信设备控制块数据结构操作异常!","错误",MB_OK);
return false;
}
//以下五行参数用于三线连接,五线连接则忽略
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.BaudRate = Baud;
dcb.fBinary = 1 ;
dcb.fNull = 0 ;
dcb.ByteSize = Byte;
dcb.Parity = Parity;
dcb.StopBits = Stop;
dcb.fInX = FALSE;
dcb.fOutX = FALSE;
dcb.XonLim = BLOCK_LENGTH/4;
dcb.XoffLim = BLOCK_LENGTH/4;
if (!SetCommState(hCom, &dcb))
{
MessageBox(NULL,"设置通信设备控制块数据结构操作异常!","错误",MB_OK);
return false;
}
GetCommTimeouts(hCom, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts(hCom, &CommTimeOuts);
memset(&osRead, 0, sizeof(OVERLAPPED));
memset(&osWrite, 0, sizeof(OVERLAPPED));
osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
BufferOffset=0;
return true;
}
albeta
2003-05-20
打赏
举报
回复
MSDN光盘里头或者微软的MSDN里头有一篇关于串口编程的文章,去看看吧。
meCAD
2003-05-20
打赏
举报
回复
冲这第9位顶一下。
关注
51单片机与蓝牙模块的串口通信C程序
51单片机与蓝牙模块的串口51单片机与蓝牙模块的串口通信C程序通信C程序
MSP430 Application UART(串口驱动)
MSP430 Application UART(串口驱动)
stm32实现modbus协议从机程序
modbus协议的下
位
机实现,芯片采用stm32f103vet6,我的开发板没有485转换芯片,所以用的是RS485-232的转换器,没有使能引脚,但是只要稍加修改就可以改为
控制
485芯片。
串行通信
奇偶校验
c语言程序,用C51实现带
奇偶校验
的
串行通信
.doc
用C51实现带
奇偶校验
的
串行通信
MCS-51系列单片机的串行口有4种工作方式。方式0为移
位
寄存器
方式,用于外接同步I/O设备或扩展I/O口,不算起始
位
和停止
位
。方式1为8
位
异步串行通讯,方式2和方式3为9
位
异步串行通讯。方式2和方式3中的第9
位
是可程控
位
,即可由软件来确定第9
位
是“0”还是“1”。也就是说,MCS-51系列单片机不像某些专用串行芯片,如INTEL8051、8050、TLC16C55...
UART中的
奇偶校验
和粘性
奇偶校验
(stick parity)
如果数据帧中1的个数为奇数,校验
位
被
设置
为0,使得整个数据帧中1的个数仍然为奇数。在粘性
奇偶校验
模式下,每个数据帧的
奇偶校验
位
都会自动
设置
为与前一个数据帧的
奇偶校验
位
相同的值。如果数据传输中的某个数据帧的
奇偶校验
位
与前一个数据帧的
奇偶校验
位
不一致,那么就说明数据传输中出现了错误。因此,数据帧2的
奇偶校验
位
也被
设置
为0。总的来说,粘性
奇偶校验
位
可以确保连续传输的数据帧具有相同的
奇偶校验
位
,从而提高数据传输的可靠性。在粘性
奇偶校验
模式下,每个数据帧的
奇偶校验
位
自动
设置
为与前一个数据帧的
奇偶校验
位
相同的值。
硬件/系统
2,643
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章