linux 与 单片机 串口通信

本文作者在尝试使用Linux与ST90C516RD+单片机进行串口通信时遇到乱码问题。在Windows环境下及Linux的minicom中通信正常,但在运行自编C代码后,接收数据出现特殊字符和时序错误。作者寻求解决方案并计划后续跟进问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  本人最近在尝试在linux下用串口与单片机通信,虽然说网上资料例程五花八门,但是缺乏严格的注释或者完整的实例,或许本人能力有限,某些问题无法理解,在实际过程中遇到不少问题,无从下手,特此写篇文章请求各位大神的斧正。初次写帖,不足处希望指出。

  实验目的:单片机通过串口向linux发送数据。

  环境:单片机 ST90C516RD+,使用USB转串口(驱动PL2303);linux(ubuntu11.10)装载在VM8。

  单片机发送程序如下

/********************************************************************
* 文件名  : 串口发送试验.c
* 描述    :  该文件实现通过串口把数据从单片机发送到电脑,通过串口调试助手显示出来。
			 晶振需要用11.0592的。
***********************************************************************/
#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int 

/********************************************************************
* 名称 : Com_Init()
* 功能 : 初始化串口程序,晶振11.0592, 波特率9600
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
     TMOD = 0x20;
     PCON = 0x00;
     SCON = 0x50;			
     TH1 = 0xFd;
     TL1 = 0xFd;
     TR1 = 1;			
}

void delay_ms(unsigned int n)            //延时10×n毫秒程序
{
	unsigned int i,j;
	for(i=0;i<n;i++)
		for(j=0;j<2000;j++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
	char i = 0;
	char code Buffer[] = "abcdef 123456 ABCDEF";
	char *p;
	Com_Init();
	P2 = 0x00;
	while(1)
	{
		p = Buffer;
		while(1)
		{
			SBUF = *p;
			while(!TI)                   	//如果发送完毕,硬件会置位TI = 1
			{
				_nop_();		//延时一个指令周期
			}
			p++;
			if(*p == '\0')
			 break;				//在每个字符串的最后,会有一个'\0'
			TI = 0;		                //TI清零
		}
		TI = 0;		                	//TI清零
		delay_ms(100);
	}
}

linux C代码如下

#include     <stdio.h>
#include     <stdlib.h
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值