OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4696|回复: 6

60s2串口原本想收到17个字节,可是只收到3个字节是怎么回事

[复制链接]

7

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-18
在线时间
0 小时
发表于 2015-5-23 21:46:37 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void main(void) {unchar buf[10]; P4SW=0x70; AUXR = 0x8E; AUXR = AUXR|0x40; // T1, 1T Mode // EA=0; //ES=0; UART_init(); //???????®?? orderflag=0; LCD_Init(); LCD_Clear();//???? LCD_Write_Char(1,0,'k'); //LCD_Write_String(1,1,"www.doflye.net"); do { delay(); delay(); delay(); delay(); delay(); if(Key1==0) //????°??ü°??????÷?ú?????????ú?¨?? { unchar point; delay(); delay(); delay(); delay(); delay(); delay(); while(!Key1); delay(); delay(); delay(); delay(); //for(point=0;point<1;point++) send_COM(); Key1=1; name.buf[0]=Dis_Data_buffer[3]; name.buf[1]=Dis_Data_buffer[4]; name.buf[2]=Dis_Data_buffer[5]; name.buf[3]=Dis_Data_buffer[6]; sprintf(buf,"%x",Dis_Data_buffer[2]); // sprintf(buf,"%.2f",name.f); LCD_Write_String(0,1,buf); } } while(1); EA=0; ES=0; } //es??????±????á?°?ì??·???????×???·??? ???????±???á?°?ì ????????????±????±????????·????ò???????????? //-------------------------------------------------------------------------------------------------- // ?????????? serial()?®?????????????í???? // ?????????? ?????®?????????????????? //-------------------------------------------------------------------------------------------------- void SerialInt(void) interrupt 4 { //L0=0; //unchar FIFO; ES=0; if(RI) //???í???????? { RI=0; //????????±ê???? //FIFO=SBUF; //?????®?????? L7=0; overflag=1; for(n=0;n<17;n++) {//Dis_Data_buffer[17]=0; Dis_Data_buffer[n] = SBUF; }//??????????×?·??®?????????? if(Dis_Data_buffer[0]==0x01) LCD_Write_Char(8,0,'6'); //?????????ò?ó???? /*if(n>18) //?????????ú,?????????????ò???????×???· { n = 0; orderflag=0; overflag=1; } */ } else TI=0; ES = 1; }[/mw_shl_code]

我的目的是发送命令到仪表,然后从仪表接收返回来的数据,可是只收到3个字节就没了,之前我用51单片机试过可以实现,但是换成stc5a60s2,串口接收返回的数据不全,希望大家帮帮我,怎么回事

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6292

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11410
金钱
11410
注册时间
2014-4-1
在线时间
1283 小时
发表于 2015-5-23 22:22:22 | 显示全部楼层
第 91 行循环,什么目的?

想一次中断就收 17 个字节?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-23 22:55:16 | 显示全部楼层
帮顶.....
回复

使用道具 举报

7

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-18
在线时间
0 小时
 楼主| 发表于 2015-5-24 09:39:59 | 显示全部楼层
回复【2楼】xuande:
---------------------------------是的,之前在51单片机试过,可是不知道为啥换成60s2就接收不全
回复

使用道具 举报

58

主题

6292

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11410
金钱
11410
注册时间
2014-4-1
在线时间
1283 小时
发表于 2015-5-24 11:29:49 | 显示全部楼层
回复【4楼】canao:
---------------------------------

这思路本身就有问题,能成功纯属巧合。
回复

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-2-12
在线时间
0 小时
发表于 2015-5-25 08:18:09 | 显示全部楼层
楼主需要明确,一次中断仅代表一个8位数据接收完成,所以不可能一个中断就能读17个数。51和60s2的速度相差不少,可能是因为这个吧。楼主可以把循环去掉,直接在中断里累加i,最后做个防止溢出的判断就好。
不做浮躁的嵌入式攻城狮。。。。
回复

使用道具 举报

1

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-5-23
在线时间
3 小时
发表于 2015-5-26 15:25:17 | 显示全部楼层
做一个表,接收到一位数据就缓存。
然后程序结束串口接收后从缓冲区读出数据。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 23:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表