导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[camaii]单片机程序该如何写-基础篇



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,堆栈初始化,由编译器自动生成相应代码) -------->   跳转到用户的主程序-------->  主程序执行完毕---->  再次跳转到初始化处,重新执行。

上面这个流程是我们不想要的。因为初始化是只需要在开机的时候(系统上电)时候初始化一次的时候。想想看如果你的手机每次开机完成之后如果没有按键按下去或者收到短信电话什么的,就会重新初始化一次,是什么后果:) 估计你肯定会扔了那手机,骂道这是谁写的程序呀。

我们希望初始化完成之后,程序就会跳入到主程序( ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:7276毫秒 查询6次