导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→我知肯定有高手,如果你很厉害请进来看看,3x[guest]

 *第9617篇: 我知肯定有高手,如果你很厉害请进来看看,3x

  
楼 主:guest 2003年3月31日15:03
 我知肯定有高手,如果你很厉害请进来看看,3x
一个51程序如下结构:
unsigned char value_a;
 main()
{   ...   
while(1){value_a = select();}     //我在此定义一个采集函数select(),其返回值被放
到全局变量value_a 中
}
serial() interrupt 4         //串口中断函数
{。。。
SBUF = value_a;              //发送 
...
}
目前,存在的问题是我在中断函数中发送的值与我在主函数中所采集到的值不同,不知原因
为何,望指教?(若我在中断函数中重新采集一次,结果发送的值就是正确的)

  
2楼:jtag 2003年3月31日16:38
 应该这样:
    while(1) 

应该这样:
    while(1) { sbuf = select(); }
  
3楼:guest 2003年4月3日17:27
 这样也会出问题
以下是引用的发言:


如果select()函数的运行时间比你的串口发送一个字节所用的时间短的话就会出问题了

  
4楼:guest 2003年4月1日22:24
 当然不一定相同了
注:中断发生与数据采集在时间上是相互独立的相互交错的。
这也是为什么要在操用系统中要同步的原因?
lisenda
  
5楼:guest 2003年4月2日16:13
 我以前就遇到过,你在发送时要丢一个数给s
我以前就遇到过,你在发送时要丢一个数给sbuf做启动.你接受到的第一个数就是它.当你再收一次时就正确了.
  
6楼:crack51 2003年4月3日22:35
 这样试试!
unsigned char value_a;
 main()
{   ...   
TI=RI=0;//初始化串口中断标志

while(1){value_a = select();}     //我在此定义一个采集函数select(),其返回值被放
到全局变量value_a 中
}
serial() interrupt 4         //串口中断函数
{。。。
if(RI)
{
//有可能有接收中断RI需处理
}
if(TI){
TI=0,SBUF = value_a;              //发送 
...
}

  
7楼:yangxiuhong25248 2003年4月4日09:40
 提醒
我也用过串口收发数据,51单片机收和发用的是各自独立的SBUF,虽然寄存器地址相同,但物理空间是不同的,发的SBUF只能写数据进去,收的SBUF只能取数据出来。2个SBUF都能产生串口中断,写到SBUF里的数据发结束时和有数据完全传到SBUF都产生中断。
  
8楼:guest 2003年4月4日10:13
 这样试一下:
unsigned cha

这样试一下:
unsigned char value_a;
unsigned char value_temp;
 main()
{   ...   
while(1){value_temp = select();
             value_a = value_temp;}     //我在此定义一个采集函数select(),其返回值被放
到全局变量value_a 中
}
serial() interrupt 4         //串口中断函数
{。。。
SBUF = value_a;              //发送 
...
}

 

--------------------------------------------------------------------------------

  
9楼:guest 2003年4月4日10:41
 select()返回数据类型?????
select()返回数据类型?????
select() 与 中断函数之间同步的问题,比如:采集了多个数据却只发送了中间几个???

希望对你有帮助。。。。  :)

  
10楼:guest 2003年4月5日13:53
 你的程序中串口始终在发送数据,导致接收机无法判断bit流的起始和结束位
你的程序中串口始终在发送数据,导致接收机无法判断bit流的起始和结束位,导致一旦出现错误,始终不能正确接收;如果发送中断一个字节的时间后再发送,则可以正确接收;
措施想必你也明白了;
  
11楼:guest 2003年4月6日13:02
 你的中断程序好像没有指定寄存器组

你的中断程序好像没有指定寄存器组
  
12楼:gzwzx2010 2005年11月20日00:44
 这个问题我遇到过。也是采集和通讯。如果你
这个问题我遇到过。也是采集和通讯。如果你其他地方都对。那你在时间上需要延迟一下就可以了。我都是试出来的。也没有别人告诉我。

>>>>>>对该主题发表你的看法

本主题贴数12,分页: [第1页]


[上一篇主题]:MAX232的外接电容问题?[求助]

[下一篇主题]:论坛贴子的“平板“显示挺好看,大家不妨试一试。