linux串口通讯简单问题 5

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sy... #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
int main()
{
int fd,speed;
char buff[100];
char c[]="hello";
//open port
if ( (fd =open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY)) <0 )
perror("open port err\n");
if( fcntl(fd,F_SETFL,0)<0 )
perror("fcntl f_setfl\n");
if(isatty(fd)==0)
perror("standar input is not a terminal device");
printf("1\n");
//set port
struct termios new_cfg,old_cfg;
if(tcgetattr(fd,&old_cfg) !=0)
perror("tcgetattr");
new_cfg=old_cfg;
cfmakeraw(&new_cfg);
new_cfg.c_cflag &=~CSIZE;
speed = B115200;
cfsetispeed(&new_cfg,speed);
cfsetospeed(&new_cfg,speed);
new_cfg.c_cflag|=CS8;
new_cfg.c_cflag &=~PARENB;
new_cfg.c_cflag &=~INPCK;
new_cfg.c_cflag &=~CSTOPB;
new_cfg.c_cc[VTIME]=0;
new_cfg.c_cc[VMIN]=1;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&new_cfg))!=0)
{
perror("tcsetattr");
}
printf("2\n");
//start write
do{
printf("input some word 'quit' out\n");
if(fgets(buff,100,stdin) == NULL){
perror("fgest");
break;
}
write(fd,buff,strlen(buff));
}while(strncmp(buff,"quit",4));
// close(fd);

return 0;
}
结果:编译没我问题,就是执行的时候
显示:usage: write user [tty]
请问怎么回事?怎么就不能接受我输入的内容呢
我换成超级用户后执行write
write:write:you have weite permission turned off
usage:write user [tty]
展开
 我来答
百度网友9b702d8
2011-04-13 · 知道合伙人IT服务行家
百度网友9b702d8
知道合伙人IT服务行家
采纳数:254 获赞数:1568
计算机技术与软件资格嵌入式系统设计师

向TA提问 私信TA
展开全部
这个write程序向串口(/dev/ttyS0)写入数据,由于这个文件取名与系统自带的write命令重名,因此执行时键入:
./write
再试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-15
展开全部
,简单实用。
没用中断,
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar idata w[]="I Like You! "; //数据定义
void delay(uchar);
void main(void)
{
uchar count;
TMOD=0X20; //工作在方式2
TL1=0xfd; //T1波特率9600bps
TH1=0xfd; //串行工作在方式3
SCON=0xd8;
TR1=1; //启动T1
while(1)
{
count=0;
while(*(w+count)) //判断一串数据是否结束
{
SBUF=*(w+count); //发送数据
while(TI==0); //查询发送是否结束
TI=0; //清除发送一标志位
count++; //准备发送一个数据
}
delay(100);
}
}
void delay(uchar times) //延时子程序
{
uchar i;
while(times--);
for(i=0;i<120;i++){}
}
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-20
展开全部
,简单实用。
没用中断,
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar idata w[]="I Like You! "; //数据定义
void delay(uchar);
void main(void)
{
uchar count;
TMOD=0X20; //工作在方式2
TL1=0xfd; //T1波特率9600bps
TH1=0xfd; //串行工作在方式3
SCON=0xd8;
TR1=1; //启动T1
while(1)
{
count=0;
while(*(w+count)) //判断一串数据是否结束
{
SBUF=*(w+count); //发送数据
while(TI==0); //查询发送是否结束
TI=0; //清除发送一标志位
count++; //准备发送一个数据
}
delay(100);
}
}
void delay(uchar times) //延时子程序
{
uchar i;
while(times--);
for(i=0;i<120;i++){}
}
另外,站长团上有产品团购,便宜有保证
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式