您的位置 首页 应用

VM7.1 下Ubuntu10.10 与 51单片机的串口通讯试验

在VM7.1下给虚拟机增加一个串口(使用物理串口),注意此时在虚拟机中是串口1。linux端程序(接收):#includestdio.h>…

VM7.1下给虚拟机添加一个串口(运用物理串口),留意此刻在虚拟机中是串口1。

linux端程序(接纳):

#include           /*规范输入输出界说*/#include          /*规范函数库界说*/#include          /*Unix 规范函数界说*/#include       #include       #include           /*文件操控界说*/#include         /*PPSIX 终端操控界说*/#include           /*过错号界说*/#define        BAUDRATE        B9600            #define        MODEMDEVICE    "/dev/ttyS1"int main(){int fd,c=0,res;struct termios oldtio,newtio;int  ch;static char s1[20],buf[19];printf("start ...\n");/*翻开PC的COM1口*/fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);if (fd == -1 ){perror(MODEMDEVICE);exit(1);}printf("open...\n");/*将旧的通讯参数存入oldtio结构*/tcgetattr(fd,&oldtio);/*初始化新的newtio */bzero((char*)&newtio,sizeof(newtio));/*8N1*/newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;newtio.c_iflag = IGNPAR;newtio.c_oflag = 0;/*正常形式*//*newtio.c_lflag = ICANON;*//*非正常形式*/newtio.c_lflag = 0;newtio.c_cc[VTIME] = 0;newtio.c_cc[VMIN] = 10;tcflush(fd,TCIFLUSH);/*新的temios作为通讯端口参数*/tcsetattr(fd,TCSANOW,&newtio);printf("writing...\n");res = read(fd,buf,10);printf("%s\n",buf);printf("close...\n");/*还原旧参数*/tcsetattr(fd,TCSANOW,&oldtio);close(fd);return 0;}

51端(运用keil2)发送:

#include#define uchar unsigned  char#define uint unsigned intuchar  code trdata[]={R,I,C,H,M,C,U,R,Z,-,5,1,V,2,.,0,0x0d,0x0a,0x00};sbit K1=P3^2; //对应开发板K1按键/*-------------------------------------------------------------*///串口初始化void UART_Init(void){SCON = 0x40; //串口作业方法为1TMOD = 0x20; //定时器1 作业在方法2//PCON = 0x80; //SMOD = 1; 波特率加倍TH1 = 0xfd; //波特率 9600bps fosc="11".0592MHzTL1 = 0xfd;TR1 = 1; //答应定时器1作业EA = 1; //开总中止}void delay1ms(uint i){uchar j;while(i--){for(j=0;j<115;j++)      //1ms基准延时程序;}}/*-------------------------------------------------------------*///串口发送一个字符串void Uart_SendString(){    uchar i=0;while(trdata!=0x00){    SBUF=trdata;while(!TI);TI=0;i++;}}/*-------------------------------------------------------------*///主函数void main(void){UART_Init(); //初始化串口while(1){if(K1==0){delay1ms(20);if(K1==0){Uart_SendString(); //发送数据while(!K1);    //等候按键开释}}}}

linux发 51接纳的差不多,仅仅51端要多出一个中止处理程序。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/265355.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部