各位大神,请问你们有做过51
单片机串口
通信把多位数发送给电脑的操作吗? 我把num的数据分拆开六个数然后转换成ascii码保存到数组里面,但是输送到电脑却是完全不一样的六个数。当我把num的位数减到三位,例如让num=345时[img=0,1]file:///C:Users浩恩DocumentsTencent Files754766991ImageC2C1O6PU$92Z@HK0WODS0DZ[Y0.jpg[/img]它却可以正常输出345,超过三位他就变了,请问你知道这是怎么回事吗?波特率选取9600,选其他会乱码
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define N 6 //可一次接收数据量
- void rs232_init();
- uchar flag,i,d,num;
- uint n; //删除无用变量
- uchar table[6];
- uchar table1[N]; //接收缓存数组
- uchar j=0; //接收计数器
- //sbit led=P1^0;
- main()
- {
- rs232_init();
- while(1)
- {
- // num++;
- n=100000;num=348965;
- for(i=0;i<6;i++)
- {
- d=(int)(num/n);
- num=(int)(num-n*d);
- d=(char)(d+0x30);
-
- n=n/10;
- table[i]=d;
- }
- if(flag==1)
- {
- ES=0;
- for(i=0;i<6;i++)
- {
- SBUF=table[i];
- while(!ti);
- TI=0;
- }
- for(j=0;j<N;j++) //发送接收数组
- {
- SBUF=table1[j];
- while(!TI);
- TI=0;
- }
- j=0; //清零接收计数器
- ES=1;
- flag=0;
- }
- }
- }
- void rs232_init()
- {
- TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- SM0=0;
- SM1=1;
- REN=1; //先设定号工作方式,在打开允许接收
- EA=1;
- ES=1;
- }
- void ser()interrupt 4
- {
- RI=0;
- table1[j++]=SBUF; //存数据到接收缓存
- if(j==N) //数组满时,允许发送
- flag=1;
- }
复制代码
-
num=(int)(num-n*d);//好好看看 最佳答案
uint型的n好像最大65535,你赋了n=100000
uchar型的num最大255,你赋了num=348965
你好,我把num和n设置成long型了,发现他的结果与改之前的确实不一样,但还是乱码,换成int型又会出现另外一组数
换成固定值得时候是可以成功发出去的
一周热门 更多>