4561|15

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

为什么这个程序运行完又会重头开始 [复制链接]

不是很明白,下面这个流程,跑到最底,又会自动从新开始跑.为什么呢?
void main()
{
    OSCCON = 01110100 ; // internal 16Mhz osc
    TRISD = 0X00 ;
    PORTD = 0x0000000 ;
    delay(100) ;
    PORTDbits.RD0 = 1;
    delay(100) ;
    PORTDbits.RD1 = 1;
    delay(100) ;
    PORTDbits.RD2 = 1;
    delay(100) ;   
}

[ 本帖最后由 DoEarlyFuc 于 2013-3-29 00:42 编辑 ]

最新回复

for(;;);  详情 回复 发表于 2013-3-30 22:20

点评

仙猫正解,我也想这么回答,加whie(1);就是让单片机原地不许动。如果不加单片机就进入跑飞状态,飞了半天自己觉得不对,就又重新到程序入口再执行了。  详情 回复 发表于 2013-3-29 09:25
点赞 关注
 

回复
举报

3138

帖子

0

TA的资源

裸片初长成(初级)

沙发
 

CPU是不知疲倦的

它可不知道已经跑到底,仍接着做取指→解析→执行继续往前闯,然后…………然后就疯了。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
如果我想让它停下来,要输什么指令?

点评

有些机器具有停机指令,或者进入低功耗模式不再运行。  详情 回复 发表于 2013-3-29 08:38
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

4
 
要想不让程序乱飞,就要把它圈起来跑循环。如:

void main()
{
    while (1)
    {
       程序本体;
    }
}

好比让一个有无限体力的傻瓜沿赤道跑,他永远能不撞墙地跑下去,却永远也跑不出地球,不会闯祸。
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

5
 
若只想让程序跑一次,可以叫它原地踏步:

void main()
{
    程序本体;
    while (1);
}
 
 
 

回复

6040

帖子

195

TA的资源

版主

6
 

回复 板凳 DoEarlyFuc 的帖子

有些机器具有停机指令,或者进入低功耗模式不再运行。
 
 
 

回复

1万

帖子

16

TA的资源

版主

7
 

回复 楼主 DoEarlyFuc 的帖子

仙猫正解,我也想这么回答,加whie(1);就是让单片机原地不许动。如果不加单片机就进入跑飞状态,飞了半天自己觉得不对,就又重新到程序入口再执行了。
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

8
 
继续在这个例子上,修改如下:
将void main() 中的其中一个delay()改成timer0()替换.
timer0()
{
    T0CON = 11000000 ;
    TMR0IE = 1 ;    // enable timer0 interupt
    TMR0L = (65535-1000)%256 ;
    TMR0H = (65535-1000)/256 ;
    PEIE = 1 ;
    GIE = 1 ;
}
其中中断服务子程序以下:
void interrupt ISR(void)
{
    if (TMR0IF = 1)
    {
        TMR0IF = 0 ;  // clear  timer0 interupt
        TMR0L = (65535-1000)%256 ;
        TMR0H = (65535-1000)/256 ;
        temp++ ;
        if (temp >999 )
        {
            temp = 0 ;
            TMR0ON = 0 ;    // stop timer0
        }
    }
}

我本来是想用timer0作计数器,做delay,但是运行结果是,根本就没有delay效果.
很想知道为什么? 这里错在哪里?
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

9
 
以上代码均参考书上例子修改.
1.不知道timer有没有开始计数?
2.然后中断服务子程序里面怎么又还要个temp常量? 不解.
谁能给个timer例子参考一下.

点评

timer0() 似只是个定时器的初始化程序,哪会delay? tmp 应该是个全局变量,每进中断一次就加1,外部程序通过观察该变量实现delay。  详情 回复 发表于 2013-3-30 20:05
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

10
 
timer0() 似只是个定时器的初始化程序,哪会delay?

tmp 应该是个全局变量,每进中断一次就加1,外部程序通过观察该变量实现delay。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

11
 
T0CON第7bit是TMR0ON位,调试发现能进中断服务子程序.
但是主程序和中断服务子程序,各跑各的.我要怎么把主程序停下来?

[ 本帖最后由 DoEarlyFuc 于 2013-3-30 20:48 编辑 ]
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

12
 
“T0CON = 11000000 ;”

这么写法编译不是把它当成10进制了吗?
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

13
 
11000000如果按十进转十六进制等于a7d8c0,无论前面取数,还是后面取数,"a" "d" "c"都超过8.其它位设置也没涉及到模式等问题. 调试时,是可以进中断子程序. 这里的赋值确实是我的马虎.
只是主程序和子程序都各跑各的.能不能设置让主程序停下来的中断?

[ 本帖最后由 DoEarlyFuc 于 2013-3-30 21:22 编辑 ]
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

14
 
for(;;);
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

15
 
能给多点提示吗?
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

16
 
别沉了呀,我至今还没搞定呐!!
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

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