本人最近在尝试在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