最近一直在做一个信息采集系统,做了很多实验,都不怎么理想,但我还是选择了用51
单片机作为信息采集端,通过串口,51单片机会将采集到的信息发送给EVB_335,硬件连接如图
首先,做一块带串口的51单片机的最小系统板。
将最小系统板与EVB-335用交叉线连接。
将以下代码编译后下载到51单片机,该程序功能为:将51单片机各个IO口采集到的信息通过串口发送出去
- #include <reg52.h>
- void uart_init()
- {
- ET1 = 0;
- TMOD = TMOD & 0X0F;
- TMOD = TMOD | 0X20;
- TH1=TL1=0XFd;
- PCON = 0;
- SCON = 0X40;
- TR1 = 1;
- }
- uart_delay(int us)
- {
- while(us--);
- }
- void uart_txdat(char dat)
- {
- SBUF = dat;
- while(ti==0);
- TI = 0;
- // uart_delay(50);
- }
- void main()
- { int j=100;
- uart_init();
- while(1)
- {
- uart_txdat('s');
- uart_txdat(((P0&0xf0)>>4)+48);
- uart_txdat((P0&0x0f)+48);
- uart_txdat(((P1&0xf0)>>4)+48);
- uart_txdat((P1&0x0f)+48);
- uart_txdat(((P2&0xf0)>>4)+48);
- uart_txdat((P2&0x0f)+48);
- uart_txdat(((P3&0xf0)>>4)+48);
- uart_txdat((P3&0x0f)+48);
- for(j=5;j>0;j--)
- uart_delay(30000);
- }
- }
复制代码同时,编译一下程序下载到EVB-335,该程序的功能为:接收51单片机传来的信息,并将它通过其他串口发送给另外的终端,同时,将接收到的信息写入对应文件,方便使用。
- #include<stdio.h>
- #include<string.h>
- #include<malloc.h>
- #include<sys/types.h>
- #include<sys/stat.h>
- #include<fcntl.h>
- #include<unistd.h>
- #include<termios.h>
- #define max_buffer_size 9
- int main()
- {
- char fd=-1,ffd=-1,fdt=-1;
- volatile char j=0,ret=0;
- char buff[max_buffer_size];
- struct termios opt,opt_tem;
-
- while(1)
- {
- fd=-1,ffd=-1,fdt=-1;
- opt = opt_tem;
- fd=open("/dev/ttySAC3",O_RDWR); //´ò¿ªµÚÒ»¸ö´®¿Ú
- if(fd<0)
- {
- printf("dev1 open error!!!");
- return 0;
- }
- fdt=open("/dev/ttySAC0",O_RDWR); //´ò¿ªµÚ¶þ¸ö´®¿Ú
- if(fdt<0)
- {
- printf("dev2 open error!!!");
- close(fd);
- return 0;
- }
- ffd=open("/file/info.txt",O_RDWR,0664);//´ò¿ªÎļþ
- if(ffd<0)
- {
- printf("info.txt file open failed!!!");
- close(fd);
- close(fdt);
- return 0;
- }
- tcgetattr(fd,&opt);
- tcgetattr(fdt,&opt);
- cfmakeraw(&opt);
- cfsetispeed(&opt,B9600);
- cfsetospeed(&opt,B9600);
- tcsetattr(fd,TCSANOW,&opt);
-
- printf("reday receiving data####
");
-
- for(j=0;j<max_buffer_size;j++)
- {
- *(buff+j) = '
'; //Ϊȷ±£³É¹¦½ÓÊÕÊý¾Ý£¬½ÓÊÕ֮ǰ£¬ÏȽ«ÏàÓ¦»º´æÇå
- }
- read(fd,buff,sizeof(char)); //²éѯÏÂλ»ú״̬£¬½ÓÊÕµ½¿ªÊ¼ÃüÁîºó¿ªÊ¼½ÓÊպʹ¦ÀíÊý¾Ý
- if(buff[0] == 's')
- {
- for(j=1;j<max_buffer_size;j++)
- {
- *(buff+j) = '
'; //Ϊȷ±£³É¹¦½ÓÊÕÊý¾Ý£¬½ÓÊÕ֮ǰ£¬ÏȽ«ÏàÓ¦»º´æÇå¿Õ
- read(fd,buff+j,sizeof(char));//½ÓÊÕÊý¾Ý
- printf("receiv success,char is %c,j value %d
",buff[j],j);
- }
-
- if(*(buff+j-1) != '
')
- {
- //printf("receiv success,string is %s
",buff);
- for(j=0;j<max_buffer_size;j++)
- write(fdt,buff+j,sizeof(char));//½«½ÓÊÕµ½µÄÊý¾Ý·¢Ë͸ø¿Í»§»ú
- lseek(ffd,0,SEEK_SET); //Îļþ¶¨Î»
- ret = write(ffd,buff+1,strlen(buff)-1);//½«½ÓÊÕµ½µÄÊý¾Ý±£´æµ½Ö÷»úÎļþ¶ÔӦλÖÃ
- close(fd);
- close(fdt);
- close(ffd);
- sleep(1);
- // if(ret)
- //break;
- }
-
- }
-
- }
- return 0;
-
- }
复制代码值得注意的是,如果要使用51单片机的P0口,是需要接上拉电阻的,我的这次实验是没有接上拉电阻,所以P0口也是不能作为输入口使用的。
一周热门 更多>