4193|9

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教大侠C51延时查询问题 [复制链接]

本人想在单片机里设一个不需要很高精确延时的查询,就是串口不断的接收信息,如果一定时间内没有接收到信息,就报错。
想用以下方式实现,不知可否,请大侠评点!
最好还能请大侠说说定时器如何用,谢谢!!!
while(1)
{
    for(i=65535;i>=0;--i)
    {
        if(Receive_Flag==1)//Receive_Flag==1时就是串口接收完毕。
        {
           ……;
            command();
           ……;
            i=65535;        //每次接收处理完都重新计数。
         }
        if(i==0)          //如果i到零了仍没有接收到数据,就警告。
        {
           com_alarm();  
        }
    }
}
小弟没什么分现在,只能说谢谢!
   

最新回复

/*我感觉没有必要吧?只要是把它定义为全局变量就好了,用以信息的传递。 在我印象中 volatile类型大多数用在,寄存器的变量,外部器件统一编址 (如编成外部RAM的某一地址)中。在这里好像没有必要吧? */  详情 回复 发表于 2008-8-29 09:15
点赞 关注

回复
举报

96

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
用定时器,结合软件计数,如定时器每50MS中断一次,在中断函数中将软计数(记中断次数的)变量加一,然后在主程序里判断中断的次数.
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
自己顶起,期望大侠
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
1楼主,我这个程序可以么?如果是不需要精确延时的话。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
if(Receive_Flag == 1)
{
    Receive_Flag = 0;  // 如果 Receive_Flag 会在中断里改变, 把它定义成 volatile类型;
    ........


}
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢四楼,受教了!



大侠给说说,这程序是否可行呢?缺点在哪?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
程序应该是可以满足功能的。
个人觉得可以把65535这种数值定义成宏可读性比较好,修改的时候也方便;另外,程序结构可以重新组织一下,主程序里面来这么一个for循环不是很利索。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
个人建议用定时器计数,并且做个标志,在中断函数中每xxMS就标志置1,然后在主程序里判断标志.
虽然你不需要准确,但是你肯定有定时器吧,写程序就不要说什么不要准确的定时,你就要对整个程序的运行把握
在自己的手中,如果你都不知道什么时候他做什么,那还怎么去掌控呢?
所以,建议,这样的延时还是用定时器比较好,这样,你的系统在以后扩展也比较容易.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
软件延时既耗费MCU资源又会导致在延时执行中不能处理其他的事情(中断可能例外),建议如LS所言使用定时器处理
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 4 楼 zyzhang365 的回复:
if(Receive_Flag == 1)
{
    Receive_Flag = 0;  // 如果 Receive_Flag 会在中断里改变, 把它定义成 volatile类型;
    ........


}


/*我感觉没有必要吧?只要是把它定义为全局变量就好了,用以信息的传递。
在我印象中 volatile类型大多数用在,寄存器的变量,外部器件统一编址
(如编成外部RAM的某一地址)中。在这里好像没有必要吧?
<谨代表个人观点,希望大家质疑。>
*/
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表