6649|13

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于KEIL C51库函数的gets函数的问题? [复制链接]

各位好,我想问一个关于KEIL C51库函数的gets函数的问题:
源代码如下:
void main(void)
{char array[20];
SCON = 0x50;
  PCON = 0x00;   
  TMOD = 0x20;        
  TL1 = 0xfd;
  TH1 = 0xfd;
  TR1 = 1;
  TI = 1;
  gets(array,sizeof(array));
  puts(array);
}

我要问的问题是:为什么我的单片机中的程序接收不到数据?请各位指教~~这是我毕业设计,很快就要答辩了,现在很急,希望各位伸出援手~谢谢

最新回复

// crt_gets.c // compile with: /W1 #include int main( void ) {    char line[21]; // room for 20 chars + '\0'    gets( line );  // C4996    // Danger: No way to limit input to 20 chars.    // Consider using gets_s instead.    printf( "The line entered was: %s\n", line ); } Note that input longer than 20 characters will overrun the line buffer and almost certainly cause the program to crash. 是不是你的gets用错了?? Input    Hello there! Output    The line entered was: Hello there!   详情 回复 发表于 2008-4-29 09:57
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
gets函数是干吗的?  串口?
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是的
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
检查PC端串口选择是否正确、波特率设置是否正确。
检查51工作是否正常、相关寄存器设置是否正确、串口中断是否关闭(应该关闭)。
最后,检查232芯片引脚方向是否正确、串口线是直通线还是交叉线。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
这种方法最好不要试,毕竟这个不像简单C程序设计,必须和硬件紧密结合起来。 代码这里有参考:


  1. //*****************************************
  2. //串口中断处理
  3. serial () interrupt 4
  4. {
  5.         if (TI )
  6.         {  
  7.                 TI = 0;
  8.                 if (outbufsign)            
  9.                         //if (putlast==outlast) outbufsign=0;
  10.                         //else
  11.                 {
  12.                         SBUF=*outlast; //未发送完继续发送
  13.                         outlast++;            //最后传出去的字节位置加一
  14.                         if (outlast==outbuf+OLEN) outlast=outbuf;//地址到顶部回到底部
  15.                         if (putlast==outlast) outbufsign=0;   //数据发送完置发送缓冲区空标志                  
  16.                 }
  17.                 else outbufsign0=0;
  18.         }
  19.         if (RI)
  20.         {
  21.                 RI = 0;
  22.                 if(!inbufful)
  23.                 {
  24.                         *inlast= SBUF;            //放入数据           
  25.                         inlast++;                    //最后放入的位置加一
  26.                         inbufsign=1;
  27.                         if (inlast==inbuf+ILEN) inlast=inbuf;//地址到顶部回到底部
  28.                         if (inlast==getlast) inbufful=1;  //接收缓冲区满置满标志
  29.                        
  30.                 }
  31.         }
  32. }
  33. //*****************************
  34. //串口初始化                0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
  35. serial_init ()  {
  36.         SCON  = 0x50;                      /* mode 1: 8-bit UART, enable receiver   */
  37.         TMOD |= 0x20;                      /* timer 1 mode 2: 8-Bit reload          */
  38.         PCON |= 0x80; TH1 = 0xfA;//fa,          //baud*2    /* reload value 19200 baud       */
  39.         TR1   = 1;                         /* timer 1 run                           */
  40.         ES    = 1; REN=1; EA=1; SM2=1;          //SM2=1时收到的第9位为1才置位RI标志
  41.         TMOD |=0x01;  //th1 auto load 2X8,th0 1X16
  42.         TH0=31; TL0=0; //X 32 =1S
  43.         TR0=1; //ET0=1;
  44.        
  45. }

复制代码
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
只要读懂了上面的程序,和一些细节问题。相信你就知道怎么做了。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
这里也有一些参考:

看看这里
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
51里gets, printf不太可靠,直接读写SBUF才可靠。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

9
 
一定要包含库
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
51里面的gets, printf等都不那么可靠,应该直接读写SBUF。

上面写错了。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

11
 
用getchar函数。这个要使用中断的。可以直接取SBUF的数
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
上网和用计算机不方便

我怎么觉得是STRING的结束符问题

呵呵
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
串口通信不要发送gets,只要送入sbuf就可以了
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
// crt_gets.c
// compile with: /W1

#include

int main( void )
{
   char line[21]; // room for 20 chars + '\0'
   gets( line );  // C4996
   // Danger: No way to limit input to 20 chars.
   // Consider using gets_s instead.
   printf( "The line entered was: %s\n", line );
}


Note that input longer than 20 characters will overrun the line buffer and almost certainly cause the program to crash.
是不是你的gets用错了??

Input
  
Hello there!


Output
  
The line entered was: Hello there!

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表