两个串口通信的问题??200分!!!大家快来接分!!!(200分)

  • 主题发起人 主题发起人 chll
  • 开始时间 开始时间
C

chll

Unregistered / Unconfirmed
GUEST, unregistred user!
1、现在我做一个串口通讯程序,要从Pc机往考勤机发送汉字(少于32个)。
我应该怎样来做???各位高手能否给我点意见??谢谢!!

2、一般串口通讯时,发送一个字符,即发送8位二进制数,现由于通讯协议
需要,需要发送9位二进制数,我应该怎样来做???请各位高手提点提点?
 
1.與發送一般的字符串一樣,再由考勤機接收后轉換成漢字內碼.問題是你的考勤機是否有漢字字庫.
2.那只能分成兩個字節發送了.
 
1。只有不到32个汉字,不如做成汉字点阵字库,接收微机发送代码。
2。你说的9位二进制数通信肯定是用了51系列的多单片机寻址,如果是单片机之间
这样做肯定很方便,实际微机通过修改和判断奇偶校验位可以实现,可这样很麻烦。
微机这边做程序也很麻烦,你知道现在一般不再采用底层编程。
建议采用8位中断通信只不过多了一个地址判别问题。实际上如果你学过TCP/IP协议
的话,你就会知道如何去进行单片机多机通信了。采用数据帧格式:帧头+地址+命令
+数据+帧尾。中断收发程序每接收一帧数据并判断为本机地址设置数据处理标志,主
程序收到标志处理数据,主程序也可以按照一定帧格式向微机发送相应请求处理等数
据。这样做看起来很繁,实际上比你说的那种方法更具实用性和可移植性。而且考勤
机要求的处理速度并不高,一般的51系列采用11。0592MHz的频率就足够了。
 
请问上面的老兄,汉字点阵字库怎么做?赐教!!
 
做个程序不就可以了,发EMAIL地址给我。wanlihen@wx88.net,我给你发一个
 
wanlihen兄,我的EMail: ling99313@sina.com
 
wanlihen兄,你的汉字点阵程序我也希望要一个,我正犯愁呢
EMail: treemanwww@163.com
 
找个串口控件,看看自带的例程。一般都支撑直接向发送字符串。
 
1、要从Pc机往考勤机发送汉字(少于32个)。
?? 考勤机处理汉字做什么??
我的考勤系统只向考勤机发送指令,读取考勤机的考勤记录!
(无非是,收记录、修改考勤机时间,设考勤机的一点参数)

2、一般串口通讯时,很少人用二进制数,多用ACSII码

我有完正的考勤系统,软件 SQL7.0+DELPHI5开发的
硬件 RD104 (FM1 射频卡)
 
wanlihen兄,谢谢你发给我的东东。

 
jun兄,是这样:考勤机需要显示汉字信息,要从pc机这里发过去。
Asc码好像也是以二进制数传输的,与我合作的单片机方面的工程师
要求我的通讯程序能发送9位数据,其中1位是用来起判断作用,而且只是
在通讯开始的时候用到。你做过这方面的项目,能不能介绍一下经验,给我一点
建议。谢谢了!!
 
如果考勤机内要显示的所需汉字不多,让单片机方面的工程师把用到的汉字点陈
写到单片机内部ROM中,这样也很方便之后调用显示就可以了
如里非要你传送二进制数来显示矩阵汉字也没什么
你只需按通讯协议,通讯开始的时候先发送校验位,通过后发送所需的二进制数到串口
接下来由硬件方面处理就好了。
 
jun兄,现在是这样的:我的PC机与多台考勤机连接,按通讯协议,发送数据时,
头两个字节是9位的寻址数据,用以确定与之对话的考勤机。问题是我不知道
怎么发这两个9位的寻址数据。能不能用奇偶校验位来模仿,我可以控制奇偶校验位吗?
怎么控制?

 
我看你还是和做硬件的人多多沟通一下,具体要看硬件是如何做的。
 
前面的wanlihen兄,你说的用8位中断通信加地址判断的方法,对我来说实现起来可能有点困难。
我想问一下,你说通过修改和判断奇偶校验位可以实现,能否说得详细一点??是不是要事先
计算出所发送数据的奇偶校验位是0还是1,以判断用奇校验还是用偶校验??或是不是还有别的
方法可以控制奇偶校验位??请指教!!谢谢!!
 
校验位是可以单独置1或0的,我也做硬件,所以我知道你的同事需要的是头两个字节
需要校验位为1(9位),以后为0或无校验位(9位/8位)。在一般的控件里都有这样
的属性: { parity }
P_EVEN 偶校验
P_ODD =奇校验
P_SPC = 校验位为0
P_MRK = 校验位为1;
P_NONE = 没有校验位。
 
竹竿大哥,首先感谢你对这个问题的关注。我用你说的方法试了一下。
当单片机处于接收地址帧的状态时,我将DCB.Parity的属性设置成MARKPARITY,
然后发送数据,单片机接收到了我的数据。说明此时第9位是1,是正确的。
可是我将DCB.Parity的属性设置成SPACEPARITY时,第9位应该是0,
处于接收地址帧状态的单片机应该是收不到数据的,
但我发送完数据后单片机也收到了数据,这就不对了。
我就弄不明白了???老兄可有什么高见!!!能否讨论一下??
 
我们上段时间用SPCom构件做了个类似的东东,不同的是你是控制考勤机,我们是控制电
话机,我们把SPCom的Parity属性设为Mark,然后要发1的时候就设置DtrContorl(还是其
他?有点忘记)为DtrEnable,发0的时候就设置DtrDisable,最后我们还修改了一下
SPCom的代码,改成同步发送才搞定的。总之是比较麻烦。
其实那主要是那个搞硬件的比较那个,用数据包做命令就简单很多了,我们的产品大部分
都是用命令包控制的,简单多!
 
这个问题,从理论上说是不应该的(如果硬件那边状态正确的
而且也是按照先1后0的方式的话),另外,你是怎么判断“单片机处于接收地址帧的状态”
还有就是你不用校验位时,单片机能否收到?
 
to 竹竿兄
我是在和我们的工程师(搞单片机的)调试程序时,他说单片机处于接收地址帧的的状态,
叫我将第9位置1,给他发数据看能否收到,结果是收到了。第二次,他仍将单片机置于接收
地址帧的状态,叫我将第9位置0发数据,看能否收到,结果也收到了。后来,我设成无
校验位,他那边还是处于接收地址帧状态,发数据后也收到了。原来在这个设置下单片机是
一直收不到数据的,现在是通收。将机器重启后还是如此。真是费解!!不知道是他那边设置
有问题还是我这边有问题。竹竿兄,你以前做这个的时候有没有出现过这样的情况呀??
是不是像fshell兄说的那样还有个什么参数要设定呀??
 
后退
顶部