您现在所在的是:

单片机论坛

回帖:9个,阅读:1654 [上一页] [1] [下一页]
1057
iciad
文章数:76
年度积分:50
历史总积分:1057
注册时间:2008/11/14
发站内信
发表于:2008/11/14 15:59:00
#0楼
Tx_Char(Comand_Setled);
   TR0=1;
while(1)
{
recive[i]=Rx_OneChar();                                                      
i++;
if(TF0==1)
break;
}
TF0=0;
P2=recive[1];
   while(1);
 }
void Init_RS232(void)                                                      
 {
   TMOD=0x21;                                                                //定时器1工作模式2,自动装载
   SCON=0x50;                                                                //串口工作方式1,允许接收
   TH1=0xFD;
   TL1=0XFD;                                                                 //晶振频率11.0592mhz,波特率为11.0592误差为0%
TH0=0X19;                                                                 //定时为0.25ms
TL0=0X19;
PCON=0x80;                                                                //波特率倍增
   TR1=1;                                                                    //开始定时器                        
}

void Tx_Char(uchar *str)                                                      //发送子程序
{
   uint i=0;
   while(str[i]!=0xEE)
   {
   while(!TI);
SBUF=str[i];
   TI=0;
   i++;
   }
}

uchar Rx_OneChar(void)                                                         //接收子程序          
{
    while(!RI);
RI=0;
return SBUF;    
}
这个程序只能发送,不能接收,不知怎么的?
常胜者,既不过份悲观,也不过份乐观。他的危机意识是用来化除危机;他的希望源自于知道未来永远有好转的可能。
1441
moonstarstar
文章数:150
年度积分:50
历史总积分:1441
注册时间:2006/3/11
发站内信
发表于:2008/11/14 21:18:00
#1楼
好难啊
痞痞牛
匿名用户
文章数:N/A
年度积分:0
历史总积分:0
注册时间:2008/11/14
发站内信
发表于:2008/11/14 22:34:00
#2楼
该用户被锁定,回复内容不予显示!
7478
zlx12345
文章数:4426
年度积分:50
历史总积分:7478
注册时间:2006/6/9
发站内信
发表于:2008/11/15 14:18:00
#3楼
同样的疑问:你用什么编程啊?
女人荣耻:以饭后洗碗为荣,以不做家务为耻;以按时回家为荣,以彻夜不归为耻;以和睦婆媳为荣,以刁难他人为耻;以照顾小孩为荣,以整天去玩为耻;以听老公话为荣,以指挥老公为耻;以温柔体贴为荣,以泼辣刁蛮为耻;以精打细算为荣,以铺张浪费为耻;以科学保养为荣,以乱吃零食为耻!
1057
iciad
文章数:76
年度积分:50
历史总积分:1057
注册时间:2008/11/14
发站内信
发表于:2008/11/15 14:19:00
#4楼
怎么这里面很多大侠都做其他的,还没有解答············就是c语言了
常胜者,既不过份悲观,也不过份乐观。他的危机意识是用来化除危机;他的希望源自于知道未来永远有好转的可能。
934
downdown
文章数:9
年度积分:50
历史总积分:934
注册时间:2004/10/15
发站内信
发表于:2008/11/16 16:22:00
#5楼
while(1)
{
recive[i]=Rx_OneChar();                                                      
i++;
if(TF0==1)
break;
}
在Tx_Char(Comand_Setled);
后定时0.25ms
TH0=0X19;                                                                 //定时为0.25ms
TL0=0X19;
如果定时到就停止接收串口数据了
可能是你发送数据后还没接收到数据就定时时间到了
所以收不到数据,可以吧定时时间延长,试下
934
downdown
文章数:9
年度积分:50
历史总积分:934
注册时间:2004/10/15
发站内信
发表于:2008/11/16 16:25:00
#6楼
不好意思,看漏了一点,是收到第一个数据后,如果定时到了,就退出接收了
因为P2=recive[1];
所以P2可能就没有输出了,你可以改成P2=recive[0];
或延长定时时间
1078
asshole2008
文章数:72
年度积分:50
历史总积分:1078
注册时间:2008/9/17
发站内信
发表于:2008/11/17 9:49:00
#7楼
发个汇编的吧。这个是C语言啊
1057
iciad
文章数:76
年度积分:50
历史总积分:1057
注册时间:2008/11/14
发站内信
发表于:2008/11/17 10:05:00
#8楼
不好意思啊,我习惯用c语言编,还有 downdown的朋友,接收数据时间长短不影响,因为数据命令一发送完毕,在几十个us内,就有数据发送,而且已经完毕,现在也不知道怎么办才通?
常胜者,既不过份悲观,也不过份乐观。他的危机意识是用来化除危机;他的希望源自于知道未来永远有好转的可能。
934
downdown
文章数:9
年度积分:50
历史总积分:934
注册时间:2004/10/15
发站内信
发表于:2008/11/20 13:49:00
#9楼
程序设置的波特率是9600,那么接收1个字节需要1ms,
而你延时是250us,所以最多只能收到一个字节后,就会退出接收程序。
你可以P2=recive[0];
这样就可以看到是不是可以收到数据。
要么就延长延时时间!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

93.6006