No.48024 作者:camaii 邮件:chiise98@gmail.com ID:129463 登陆:5次 文章数:3篇 最后登陆IP:183.63.197.250 最后登陆:2011/2/28 16:35:01 注册:2010/10/23 17:32:08 财富:118 发帖时间:2011/2/28 16:35:01 发贴者IP:183.63.197.250 标题:camaii:单片机程序该如何写-基础篇 摘要:No.48024单片机程序该如何写-基础篇 单片机的C语言编程是不同于传统的C语言的编程的,这是与它本身的体系结构有关。单片机编程是软硬件结合比较精密的。如果没有一些硬件方面的知识可能大家很难编出正确的程序。 如有的同学的主程序是类似这样的结构 void main(void) { P0 = 0xff ; sleep(1000) ; P0 = 0x00 ; sleep(1000) ; } 仿真的时候可能会看到灯是闪烁的。但事实上这样的程序是不对的。也有同学发现了这个问题,我看到他都把汇编代码贴出来了。 分析下上面的程序的流程 P0口输出高电平----> 延时一会儿-----> P0口输出低电平-----> 延时一会儿。 这样接在P0口上的LED就会亮暗的闪烁。如果要一直这样循环闪烁下去呢?看到这里大家发现问题了没有? 问题就在这里了,我们想让它循环闪烁,但是回过头来看看我们的主程序,有循环的地方吗? 之所以这样的程序仿真的时候还是正确的,那是因为编译器在生成汇编代码的时候已经自动加上了跳转语句,主程序执行完了之后就重新跳转到初始化处重新执行。 所以上面这段程序的流程是这个样子的: 初始化(内部RAM,堆栈初始化,由编译器自动生成相应代码) --------> 跳转到用户的主程序--------> 主程序执行完毕----> 再次跳转到初始化处,重新执行。 上面这个流程是我们不想要的。因为初始化是只需要在开机的时候(系统上电)时候初始化一次的时候。想想看如果你的手机每次开机完成之后如果没有按键按下去或者收到短信电话什么的,就会重新初始化一次,是什么后果:) 估计你肯定会扔了那手机,骂道这是谁写的程序呀。 我们希望初始化完成之后,程序就会跳入到主程序( ......
>>返回讨论的主题
|