VM7.1 下Ubuntu10.10 与 51单片机的串口通信实验
来源:互联网 发布:中国网络经纪人头像 编辑:程序博客网 时间:2024/05/22 10:58
在VM7.1下给虚拟机增加一个串口(使用物理串口),注意此时在虚拟机中是串口1。
linux端程序(接收):
#include <stdio.h> /*标准输入输出定义*/#include <stdlib.h> /*标准函数库定义*/#include <unistd.h> /*Unix 标准函数定义*/#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> /*文件控制定义*/#include <termios.h> /*PPSIX 终端控制定义*/#include <errno.h> /*错误号定义*/#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<reg52.h>#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; //串口工作方式为1 TMOD = 0x20; //定时器1 工作在方式2 //PCON = 0x80; //SMOD = 1; 波特率加倍 TH1 = 0xfd; //波特率 9600bps fosc="11".0592MHz TL1 = 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端要多出一个中断处理程序。
(以前弄过的一个测试,现在发出来。。没啥技术含量,高手勿笑)
- VM7.1 下Ubuntu10.10 与 51单片机的串口通信实验
- arm与51单片机之间串口通信实验
- arm与51单片机之间串口通信实验
- 单片机串口通信实验
- 51 单片机的串口通信与控制
- STC 51 单片机 串口通信实验
- 51单片机的串口通信
- 51单片机串口通信的发送与接收(转)
- 51单片机串口通信的发送与接收(转)
- 51单片机串口通信的发送与接收(转)
- 51单片机串口通信的发送与接收(转)
- 51单片机串口通信的发送与接收(转)
- 51单片机串口通信的发送与接收(转)
- 51单片机串口通信的发送与接收
- 51单片机与PC进行串口通信
- 51单片机与PC串口通信
- C#与51单片机串口通信
- 51 单片机串口实验
- 为什么要设计出反码补码?
- Win32汇编--图形操作--GDI原理
- 利用UT的RSS第一时间自动下载TTG种子(转载)
- 手把手教你cuda5.5与VS2010的编译环境搭建
- Spring 3.0 注解注入详解
- VM7.1 下Ubuntu10.10 与 51单片机的串口通信实验
- Bob喜欢Alice很久了,他对Alice的一点一滴都非常在意,这不今天有同学提到有一篇文章里提到了Alice,这下Bob着急了, 赶紧找来了那篇文章,焦急找寻着Alice这个名字,他想知道Alice
- SQL server 认证考试
- arc使用
- Tomcat:IOException while loading persisted sessions: java.io.EOFException解决方案
- 守护进程编写
- lpc2378的hid
- 段1
- android fragment 使用百度定位