C语言 串口通信 出现的都是乱码 在线等

#include <dos.h>
#include <bios.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define COM1 0x3f8
unsigned char *buffer;
void interrupt (*Vect1)();
void Sender(unsigned char ch);
void Sendbuffer();
void Send();
void interrupt far ReceiveInt();
void ClosePort() ;
int OpenPort();
void InitCom();
void InitCom()
{ outportbortb(COM1+3,0x80);
outportbortb(COM1,0x0c);
outportbortb(COM1+1,0x00); //拨特率9600
outportbortb(COM1+3,0x03); //线路传输无校验8位数据位
outportbortb(COM1+1,0x01); //允许接收数据就绪中断 可以接受数据
}
int OpenPort()
{
/*8259的内部中断控制寄存器的端口地址为0X21,
COM1产生的硬件终端号为IQR4,对应的中断向量为0CH
打开COM1*/
unsigned char Temp;
InitCom();
Vect1=getvect(0x0c);
disable(); //取得中断向量入口
setvect(0x0c,ReceiveInt); //设置中断向量入口
Temp=inportb(0x21)&0xef; //支持4号中断 COM1中断
outportbortb(0x21,Temp);
enable();
/*开中断*/
return(1);
}
void ClosePort()
{
disable();
setvect(0x0c,Vect1);
outportbortb(COM1+1,0x00);
outportbortb(0x21,inportb(0x21)|0x10);
enable();}
void interrupt far ReceiveInt()
{

unsigned char uchar;
uchar=inportb(COM1); //uchar 为接受的字符
putch(uchar);
outportbortb(0x20, 0x20); //通知CPU 8259中断结束

}
void Sendbuffer()
{
unsigned char uchar;
int i=0;
while(1){
if (kbhit())
{
uchar=getch();
if (uchar!=0x1B) {
if(uchar!=0x0D){
if(uchar!=0x08){
putch(uchar);
*(buffer+i)=uchar;
i=i+1;
}
else{
i=i-1;
*(buffer+i)='\0';
putch(uchar);
putch(' ');
putch(uchar);
}
}else{
*(buffer+i)='\0';
printf("\n\r");
for(i=0;*(buffer+i)!='\0';i++){
printf("%c",*(buffer+i));

}
goto aa;
}
}
else{
ClosePort();
exit(1);}
}
}
aa:;
}
void Send()
{ void Sender(unsigned char uchar);
unsigned char uchar;
int i=0;
while(1)
{
uchar=*(buffer+i);
if (uchar!='\0'){
Sender(uchar);
i=i+1;}
else{goto quit1;}

}
quit1:;
}

void Sender(unsigned char ch){
while(!(inportb(COM1+5)&0x20)){}
outportbortb(COM1,ch);
}
void main(){
int a;
a=OpenPort();
if (!a){
printf("接口打开失败");
exit(1);}
while(1){
Sendbuffer();
Send();
}
}
用助手测试 发送了后助手接受的是正常的 可是如果要是用我的程序接受发送的字符的时候就是乱码.我实在找不出错在那里
哪个 outportbortb 是 outportb 多写下了 程序可以编译通过

看下COM口是否配置正确,如波特率不对的话收到的都是乱码。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-12-31
应该是接收部分的问题

建议你 参考 龚建伟 的 书

Visual C++_Turbo C串口通信编程实践
第2个回答  2010-01-09
降低波特率试试

C语言 串口通信 出现的都是乱码 在线等
看下COM口是否配置正确,如波特率不对的话收到的都是乱码。

串口显示乱码怎么办?串口乱码的解决办法-搜狗输入法
1.USB转串口的问题 解决方法: USB转串口出现乱码,换一个好的就没事了。2.波特率不同步的问题 解决方法: 两边设置的波特率的一样,会导致这样的问题。3.在通信波特率为38400时,通信正常,arm 板上解受到的数据(ascII码)显示正常。但是当波特率为115200时,解受到的数据就出现乱码的现象!解决方法: ...

串口通信程序问题,上位机可以接受到发的东西,但都是乱码?这是怎么回事...
波特率不对并不是不能收到,而是数据错误,发送的数据和接收的不一致。乱码除了波特率不对之外还有可能是数据显示的问题,比如你发十六进制的数据,但是显示用字符显示也有可能出现乱码。

串口通信 出现乱码
串口通讯不正常,我的分析如下:一、能正常的自收自发,只能说明自身的收和发设置正确,需要检查ARM2103的设置和电脑的是否相同。同意4楼的说法,看看校验位,数据位数是否都对应上了。二、波特率需要用示波器测试一下,发送一个0x55,看看,一bit用的时间,计算一下,看看波特率到底对不对。自收自发,...

VSCODE C语言终端输出中文出现乱码解决
在使用VSCode编写C语言时,有时会遇到输出到终端显示乱码的问题。这是由于VSCode默认使用UTF-8编码,而CMD默认编码为GBK,两者编码不同导致乱码现象。经过查询,解决办法主要有修改编码格式、环境变量、注册表等,但修改系统默认编码可能引发蓝屏风险,因此我并未采用。在VSCode设置中,可以通过配置单独语言的...

串口通信接收区出现多余的乱码怎么解决
乱码很正常,因为是通讯嘛,硬件的接收当然要可能出现预料外的数据,比如,有些调制方式的Modem就是会必定产生乱码,足够强的电磁干扰信号也可能让数据出错。乱码是有的,但不存在“多余的”这样的概念,如果你觉得“多余”,那只是你通讯协议没制定好。串口的协议,通常情况下格式是这样的:起始字(多...

C语言strncpy输出结果乱码,问题出在哪里?
str2.3 说明是将str2前三个字符复制到str1中,而用%s输出str1,但字符串没有结束标志'\\0',所以会一直读下去,出现乱码!

c语言编译运行乱码是什么原因?
这种情况多数是由于操作系统的语言选项不正确引起的。建议你查看一下控制面板中的区域和语言选项,特别是有关“非Unicode程序的语言”,一定要选择成“中文(简体,中国)”。然后重启电脑。

c语言的,运行出现乱码
回答:if((str[j][i] != '\\0') & (str[j][i] < '0') || (str[j][i] > '9'))其中的&是否应该是&&呢?

C语言输出中文乱码
追加返回值的判断为好。if(fgets(str,120,fp)!=null){ printf("%s\\n",str);}3)关于出现乱码的问题,估计你的文件中有中文汉字。读取到119位的时候正好是某个汉字的前一半。要解决这个if(fgets(str,121,fp)!=null)这里120 改成读偶数个121。另外文件最好用宽字符的。就可以避免乱码了。

相似回答
大家正在搜