关于串口通讯,那位会帮帮忙,在线等待,谢了。 ( 积分: 100 )

  • 主题发起人 主题发起人 xucongbo
  • 开始时间 开始时间
X

xucongbo

Unregistered / Unconfirmed
GUEST, unregistred user!
我做的是用spcomm向显示屏发送字符。
格式要求如下:
·通讯格式
显示屏采用标准RS-232通讯接口,串行通讯格式
为“2400,8,N,1”。
显示屏显示一行24点阵6个汉字或12个数字信息。

·信息格式:
11H + 显示信息 + 01H
--------------------------------------------------

11H ---- 表示地址码;
1号屏:11H,2号屏:22H,3号屏:33H

显示信息 ---- 使用汉字内码,共12个字节,
个数不足用空格填充;

01H ---- 表示信息结束码;
1号屏:01H,2号屏:02H,3号屏:03H


例如向一屏发,我是这样写的。
procedure TForm1.Button1Click(Sender: TObject);
var
SendStr,str:string;
i:integer;
begin
str:=edit1.Text;
for i:=0 to 11-length(str) do
begin
str:=str+' ';
end;
if ComboBox3.Text='一号' then
SendStr:=chr($11)+str+chr($01)
else if ComboBox3.Text='二号' then
SendStr:=chr($22)+str+chr($02)
else if ComboBox3.Text='三号' then
SendStr:=chr($33)+str+chr($03);

if comm1.WriteCommData(pchar(SendStr),length(SendStr)) then
showmessage(SendStr+inttostr(length(SendStr)))
else
showmessage('发送失败');
end;

但显示屏还是收不到,你给帮忙看一下,什么地方写的不对。
 
我做的是用spcomm向显示屏发送字符。
格式要求如下:
·通讯格式
显示屏采用标准RS-232通讯接口,串行通讯格式
为“2400,8,N,1”。
显示屏显示一行24点阵6个汉字或12个数字信息。

·信息格式:
11H + 显示信息 + 01H
--------------------------------------------------

11H ---- 表示地址码;
1号屏:11H,2号屏:22H,3号屏:33H

显示信息 ---- 使用汉字内码,共12个字节,
个数不足用空格填充;

01H ---- 表示信息结束码;
1号屏:01H,2号屏:02H,3号屏:03H


例如向一屏发,我是这样写的。
procedure TForm1.Button1Click(Sender: TObject);
var
SendStr,str:string;
i:integer;
begin
str:=edit1.Text;
for i:=0 to 11-length(str) do
begin
str:=str+' ';
end;
if ComboBox3.Text='一号' then
SendStr:=chr($11)+str+chr($01)
else if ComboBox3.Text='二号' then
SendStr:=chr($22)+str+chr($02)
else if ComboBox3.Text='三号' then
SendStr:=chr($33)+str+chr($03);

if comm1.WriteCommData(pchar(SendStr),length(SendStr)) then
showmessage(SendStr+inttostr(length(SendStr)))
else
showmessage('发送失败');
end;

但显示屏还是收不到,你给帮忙看一下,什么地方写的不对。
 
1.先用串口调试软件向显示屏发送数据,确定显示屏能正常显示
2.再用你的软件和串口调试软件对发,确定你的软件发送数据没有问题
 
这两项都试过了没有问题,我怀疑是发送格式不对,帮忙看看,发送格试是不是我写的不对。
 
你应该发送字符的ascii码下去吧,直接发送字符可能不行!
 
试着调一下串口的波特率再试一下看,有些可能用1200都可以了,另外你也可以尝试着用WINDOWS系统中付件自带的“超级终端”来发送你的命令,来确定你发的命令是否正确。
 
spcomm可以直接发送字符啊,波特率应该是2400是没问题的。
就是发送格式例如:chr($33)+str+chr($03)
怎么写,我这样写应该不对吧。
 
再好好查一下吧
如果串口调试软件可以让显示屏正常显示,那么你的软件发送的数据帧应该和串口调试软件发送的数据是完全一致的才对
 
串口调试软件可以让显示屏正常显示,
但写的就不行,我是安照他的说明写的啊。
怎样才能让我写的软件的数据帧和串口调试软件发送的数据是完全一致啊。
按照上面的说明格试,应该怎么写啊,我写的什么地方不对啊。
 
你用串口调试软件肯定是输入一串HEX字串发送的
你用你的软件向串口调试软件发送,能够得到你发送的HEX字串,比较一下差别就可以了
多数情况是计算机的字符编码和显示屏的字符编码不一致的问题
你的发送程序没什么问题
 
用c是这么写的没问题,但我改用delphi就不行。大家看看这用delphi写的什么地方不对
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <io.h>
#include <bios.h>
#define COM1 0
#define COM2 1
#define COM3 2
#define COM4 3
#define SETTINGS ( 0xa0 | 0x00 | 0x00 | 0x03)
int main(int argc,char * argv[])
{
int status,i,j;
int c=0,ph=1;
if(argc==3)
{
c=atoi(argv[1]);
ph=atoi(argv[2]);
}
bioscom(0,SETTINGS,c);
status=bioscom(1,0x10+ph,c);
if(0x8000&amp;status)
{
printf(&quot;send no succeed!&quot;);
return(1);
}
for(j=0;j<12;j++)
{
status=bioscom(1,0x30+j,c);
}
status=bioscom(1,ph,c);
for(i=1;i<=3;i++)
{
sound(300+i*50);
delay(150);
}
nosound();
return(0);
}
 
用串口监视程序对比一下你用你的程序发送和用串口调试程序发送的内容是不是一样不就什么都明白了吗,可以确定的是肯定是你的软件发送的数据不正确。
 
没错,在串口上用串口监视程序看你程序发的码与C有什么不一样,这样是最好解决问题的方法,我也是大部分用这种方法的.
 
从C的代码来看,好像是你的显示屏的开始地址码错了,1号屏:11H,2号屏:22H,3号屏:33H 应为1号屏:11H,2号屏:12H,3号屏:13H
 
我试了,就是厂家提供的说明写错了。按siow说的就可以了。1号屏:11H,2号屏:22H,3号屏:33H 应为1号屏:11H,2号屏:12H,3号屏:13H。

谢谢。
分分。
 
后退
顶部