导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→兄弟们,麻烦你们看一下这个问题,我真的有太多的疑惑!

* 70922: 兄弟们,麻烦你们看一下这个问题,我真的有太多的疑惑!

   yydnwt 
yydnwt发表的帖子 

 兄弟们,麻烦你们看一下这个问题,我真的有太多的疑惑!
刚刚开始学习单片机的C51编程,老师跟我出了一个串口编程的题目:把PC键盘上输入的字符通过串口传给单片机去处理,处理的方式很简单,就是把你原先输入的顺序倒过来,把它的逆序通过串口再传给PC。
我做了几个程序,用keil uvision2 编译仿真后都出现同样的结果(能够逆序输出、但是之后又不停的输出其它字符),百思不得其解,希望广大同仁能助我一臂之力,下面我把我写的两个程序贴出来,麻烦大家帮我分析一下错误,谢谢大家!
(1)
#include   <reg51.h>  

unsigned char xdata i=0,j=0;
unsigned char xdata input[50];  //把输入的字符存在这个数组里
bit read_flag=0;  //为了控制输出的次数

serial() interrupt 4 using 1
{
 if (RI)
 {
  while (RI==0) ;
  RI=0;
  input[i]=SBUF;
  if (input[i]==0x20) //遇到空格键就开始向PC发送输入字符的逆  序
  {
   j=i-1;  //发送的时候不把最后输入的那个字符算在内
   i=0;
   read_flag=1;
  }
  else
  {
   i++;
  }
 }
}

void send(unsigned char *tserial,unsigned int number)
{
 unsigned int n;
 for (n=number;n>  =0;n--)
 {
  SBUF=*(tserial+n);
  while (TI==0) ;
  TI=0;
 }
}

void main(void)
{
 SCON=0xd8;
 TMOD=0x20;
 TH1=0xfd;
 IE=0x90;
 TR1=1;
 TI=1;
 while (1) 
 {
  if (read_flag)
  {
   read_flag=0;
   send(&input,j);
  }
 }
}

(2)
#include   <reg51.h>  
unsigned int xdata i=0,j=0,k=0;
unsigned char xdata input[50];

serial() interrupt 4 using 1
{
 if (RI)
 {
  while (RI==0) ;
  RI=0;
  input[i]=SBUF;
  if (input[i]==0x20)
  {
   j=i-1;
   k=j;
   i=0;
  }
  else
  {
   i++;
  }
 }
 if (TI)
 {
  if ((j!=0)&&(input[j+1]==0x20)&&(k>  =0))
  {
   for (k=j;k>  =0;k--)
   {
    while (TI==0) ;
    TI=0;
    SBUF=input[k];
   }
  }
 }
}

void main(void)
{
 SCON=0xd8;
 TMOD=0x20;
 TH1=0xfd;
 IE=0x90;
 TR1=1;
 TI=1;
 for (;;) {}
}

发表时间:2005年1月10日16:26:57

  
回复该帖

本主题共有 3 帖,分页:>>>>>该主题的所有内容[3]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  70923.[详细]在线等候大家的答复[em12]
摘要:在线等候大家的答复[em12]......(24字)
- [yydnwt][813次] 2005年1月10日

  71031.[详细][建议]
摘要:你在做函数值传递的时候将数组的地址传递给发送子函数,但是好象有点问题,数组名就是地址,不需要在加上寻址标志"&",这样就变成了地址的地址!!!......(132字)
- [guest][1006次] 2005年1月12日

[上一篇帖子]:在线等候大家的答复[em12]
[下一篇帖子]:请问各位大虾,以下的C语句能够捕捉到其他程序的入口地址吗???void TaskA() B