单片机左移函数缺少原函数要咋办

2051人阅读
在单片机的主程序中,我们在写程序的时候,总是写一个while(1)的语句,以此达到让程序进入一个无限死循环中,其目的是让程序一直保持在我所需要的运行情况下,例如:流水灯的程序让LED灯一直在交替闪烁,LCD显示不停地在刷新。
该循环并不是阻止程序的跑飞(程序的跑飞我会在下一篇博客中学习一番),而是防止main()返回。因为在嵌入式中,main函数是不能返回的,而虽然我们所编写的单片机程序是用的是C语言,可最终下载到单片机里运行的程序包含两个部分:一是我们编写的程序代码,另一部分是编译器自动生成的代码,例如在keil里,观察我们所写的C语言程序在转换成汇编语言后,单片机的代码区,没有写程序的部分,例如全1或全0区域,程序运行到该区域后就会造成意料不到的结果,在没有while(1)的去情况下运行到最后一行的时候,会自动跳转到main函数的第一行,就造成了main()函数的返回。不同的C语言实现的单片机初始化代码会有不同的表现,例如:在cal_main后jmp,或者是在call_main后jmp
0,这些将会导致不可预料的结果。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:76797次
积分:1960
积分:1960
排名:千里之外
原创:111篇
转载:87篇
(7)(24)(31)(31)(30)(31)(22)(1)(21)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'一个关于单片机库函数编写的问题(原创)
当你调用一些函数时,为了避免反复复制和粘贴(在这个过程中经常还会导致拷贝错误,并且难以发现错误所在)的问题,我们最好是将经常用的一些函数或者协议编写成库函数,然后在主函数声明一下,就可以随便提取运用了。
但是,当你用的时候,却频频提示错误,为什么?
&首先,你的库函数中肯定要用一些其他的库函数,然后在主程序中,你又调用了这些库函数。KEIL
51编辑器,只允许调用一次库函数,这样你当然会遇到提示错误
另外,我们知道库函数的一些参数对于我们能够灵活运用单片机开发,具有很深远的意义。
比如,我们可能会在打开的库函数文件里看到如下的定义
它的意思是,RSM它的操作地址是0014,当我们用C语言编程时,不用去知道RSM这个引脚或者寄存器的地址0014,只需对RSM就可以直接操作了。
(说明,上面的例子,原理的确是这样的,不过具体上的操作是有错误的
现看这个例子:如果有一款新的单片机,除了指令内核于51兼容外,多了T3MOD,T3CON,T3L和T3H四个寄存器空间来控制T3,其地址分别是0xC0,0xC1,0xC2和0xC3。如果厂商不提供起存起定义头文件,改写REG52.H使之能用于该单片机
& 我们可以这么写
&sfr T3MOD=0xc0;
&sfr T3CON=0xc1;
&sfr T3H=0xc3;
&sfr T3L=0xc2;
&从上面的定义方法来说,我们最上面的定义方法是错了
应该改为:sfr RSM=0x0014;
理解这个原理,我们可以自己动手将库函数升级,用于不同型号单片机的开发。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。51单片机-中断函数基础
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
51单片机-中断函数基础
单片机中断按照中断源类型的不同主要分为:外部中断、定时器中断、串口中断
而因为电路板上可能存在多个定时器或多个引起外部中断的位置,所以产生多个中断源,也因此单片机有多个中断函数
以51单片机为例:
====================================
中断编号&&&&中断源
0&&&&&&&&&&&&&&&&外部中断0
1&&&&&&&&&&&&&&&&T0定时器溢出中断
2&&&&&&&&&&&&&&&&外部中断1
3&&&&&&&&&&&&&&&&T1定时器溢出中断
4&&&&&&&&&&&&&&&&串口中断
====================================
C程序中使用中断的方法
EA=1;&&&&//打开中断总开关
ET0=1;&&&&//打开T0定时器中断
&&&&//your code
//定义中断处理函数(程序会自动调用)
void InterruptTimer0() interrupt 1
&&&&//关键词interrupt后面的1表示中断函数编号
&&&&//your code
&&&&//当T0定时器溢出(即截获中断)时,执行InterruptTimer0中断处理函数,执行完毕后程序将从while中发生中断的位置继续往下执行
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved}

我要回帖

更多关于 单片机延迟函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信