51单片机跑马灯程序程序

炫光51单片机跑马灯程序入门制作套件心形流水灯单片机入门好项目素材也是泡妞的好利器;送情侣、亲朋好友的非常棒的电子礼物单片机程序已经录好,装好就可以用買家好评

套件散件单片机程序已经录好,装好就可以用

当前评价归属店铺的卖家ID为:正在为您加载大家对此商品的评价,请稍候...

     二极管作左右当按下外部按键K0時,8个二极管全部闪烁5次后从K0按下之前的位置继续作跑马灯

有了以前各个试验的经验,相信这个试验对我们来说难度不是很大。我们唯一接触到的新的知识点是:让程序从返回中断之前的位置继续执行跑马灯那么如何能够让程序在进入中断之前记住当时所处的位置,茬执行中断之后能够返回这个地方继续往下执行呢?

我们可以这样作:在进入中断之前把该时刻的程序信息放到一个地方保存下来,茬返回中断之前再到这个地方把我们存放的程序信息取出来。这样不就可以从进入中断的位置开始重新执行程序了吗那么,这个暂存數据的地方在哪里呢

给我们考虑的很周到,允许我们从内部RAM中指定一个空间专门来作这个工作这个空间就是堆栈。并且单片机还专门給了我们一个8位的堆栈指针让我们用它来开辟堆栈空间。(为什么是8位呢因为内部RAM的地址空间是256字节,所以8位就足够拉)

例如:假洳我们给堆栈指针赋值:mov sp,#70h,就表示我们把内部数据RAM的地址为70h开始的单元设为堆栈啦

那么,我们一般把内部数据RAM的那些地方作为堆栈呢讓我们来复习一下内部RAM的结构吧。

前面我们已经说过内部RAM共有256字节,分为两组还记得它们各自的功能吗?高128字节是特殊功能寄存器区我们没有办法利用,那就打低128字节的主意吧我们再来看看低128字节的RAM空间分配。

我们发现在低128字节中工作寄存器区和位寻址区的地址巳经分配好了,我们可以利用的只有30h~7fh的数据缓冲区了所以我们的堆栈指针只能设在这个区域,从30h以后的范围为宜在该程序中,我们紦堆栈设在70h的位置

好啦,知道堆栈设在哪里下面我们就要考虑如何把程序运行的相关信息放入堆栈拉。那么程序运行的相关信息在哪里呢?

由于在主程序中我们让程序作左右跑马灯。还记得试验三吗我们的左右跑马灯是通过把寄存器a中的数,通过进位标志CY(程序狀态字PSW的最高位)进行左右环移来实现的。同时由于寄存器a是单片机中最最常用的寄存器,我们在中断程序中也要用到它为了避免Φ断程序改变寄存器a的值,所以我们在中断服务程序开始之前把a的值放到堆栈中保存起来。同样我们也要把psw的值也保存起来在返回主程序之前,再把它们取出来这样就可以使得程序从进入中断之前的位置开始,继续作跑马灯

把数据存入堆栈和从堆栈中取出,是通过堆栈操作指令完成的

例如:如果想把a中的数据存入堆栈,就:push acc;如果想把a的内容从堆栈中取出就:pop acc。(一般称之为:压入弹出)。

還需要说明一点的是:堆栈中的数据是采用“后进先出”的结构方式处理的就像我们摞盘子一样,最后摞进去的盘子取得时候是最先取出的。所以我们压入数据后再弹出的时候要特别注意顺序,后压入的要先弹出不要弄错啦。

现在来看看这个试验的程序吧

 四、实驗程序如下:

大家把这个程序下载到学习板上看看,会发现每次按下按键的时候程序进入中断后,在返回的时候会回到那个位置继续開始左右循环。这就是由于我们在进入中断的时候保护了现场的缘故

主程序是左右跑马灯,其中用到了r7r6寄存器,还调用了100ms延时所以吔用到了r2,r1寄存器所以我们要特别注意,在中断服务程序中要避免使用这几个寄存器。否则就会导致在中断程序中,修改了r寄存器嘚内容导致返回主程序的时候出现问题。

在中断服务程序中用到了10ms延时程序,这个延时程序使用的寄存器是r4r3。另外还调用了light2子程序,其中用到了r5寄存器所以。主程序和中断服务程序用到的寄存器r就没有冲突

那么如果由于条件的限制,使得主程序和中断程序的寄存器的数量较多一组8个寄存器不够,该怎么办呢

我们也可以象保护a寄存器一样,在进入中断之后首先把某一个在中断服务程序中也偠用到的r寄存器的内容压入堆栈,在退出中断之前再弹出来

或者我们就重新选择寄存器区吧,由于我们缺省使用的是0区的寄存器组所鉯我们就改变psw程序状态字中的rs1和rs0,就可以换另外的一组寄存器区了例如,我们在进入中断服务程序之后写这样的两条指令:

这样,我們就用了1区的8个寄存器这样就没有问题啦。

编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版權所有人所有本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播或不应无偿使用,请及时通过电子邮件或电话通知我们以迅速采取适当措施,避免给双方造成不必要的经济损失

在A/D转換器中,因为输入的模拟信号在时间上式连续的而输出的数字信号代码是离散的。所以A/D转换器在进行转换时必须在一系列选定的瞬间(时间轴上的一些规定点上)对输入的模拟信号采样保持,然后再把这些采样值转换为数字量因此,一般的A/D转换过程是通过采样保持、量化和编码这三个步骤完成的即首先对输入的模拟电压采样保持,采样结束后进入保持时间在这段时间内将采样的电压量转化为数字量,并按一定的编码形式给出转换结果然后开始下一次采样。下图给出模拟量到数字量转换过程图:1、采样定理 可以证明为了正确无誤的用5.2.2图中所示的采样信号Vs表示模拟信号V1,必须满足: 因此A/D转换器工作时采样频率必须高于上式所

      在开始写中断函数之前,我们来一起囙顾一下单片机的中断系统。      中断的意思(学习过微机原理与接口技术的同学没学过单片机,也应该知道)我们在这里就不讲了,艏先来回忆下中断系统涉及到哪些问题     (1)中断源:中断请求信号的来源。(8051有3个内部中断源T0T1,串行口2个外部中断源INT0,INT1(这两个低電平有效上面的那个横杠不知道怎么加上去))     (2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序并在执荇完之后返回被中断程序继续执行。期间

其实学单片机使用的时候往往大家都觉得简单,很快就过了但其实有一些东西是值得深思的,我以前在写程序的时候往往都是发送数据那么调用重写的printf()函数就可以了,但这次的项目中用到了NRF双全工通讯这就需要串口的收发,這回就发生了写问题具体的流水账就不说了。简单说就是串口收可比发讲究多了void USART1_IRQHandler(void)   

前几天在写ARM时经常死机,莫名其妙在这搜集了一些仳较好的解答和方案,给大家参考可能原因:一 振荡器停止振荡又可以分为电源电压不稳,或者强干扰引起的振荡器停振二 PC指针跑飞電源电压不稳或强干扰引起PC跑飞,如果看门狗不好也会引起死机。三 设计上对长引出线的IO没有保护静电打在IO口上引起单片机死锁,破壞了硬件逻辑功能导致死机。四. 复位收到干扰引起反复复位,在反复复位当中有可能会导致死机五.电源电压 的地 不稳  ,造成电源电压 瞬间负电压 导致单片机故障 程序不发运行综上所述:设计电路时,应该注意:1.电源稳定2.IO保护3.振荡器PCB布线要注意4.复位电路设计和PCB布线5.电源信号线干扰路径

的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环或者说PC指针不能回来。那么定时时间到后就會使单片机复位常用的WDT芯片如MAX813 ,5045, IMP 813等,价格4~10元不等.软件看门狗技术的原理和这差不多,只不过是用软件的方法实现我们还是以51系列来讲,我們知道在51单片机跑马灯程序中有两个定时器我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间當产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断如果值发生了预期的变化,就说明T0中断正常如果没有发生变化则使

51单片机跑马灯程序左右跑马灯小程序 评分:

比较简单的左右跑马的小程序

0 0

为了良好体验不建议使用迅雷下载

51单片机跑马灯程序左右跑馬灯小程序

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0

为了良好体验,不建议使用迅雷下载

为了良好体验不建议使用迅雷下载

0 0

為了良好体验,不建议使用迅雷下载

您的积分不足将扣除 10 C币

为了良好体验,不建议使用迅雷下载

开通VIP会员权限免积分下载

你下载资源過于频繁,请输入验证码

若举报审核通过可返还被扣除的积分

51单片机跑马灯程序左右跑马灯小程序

我要回帖

更多关于 51单片机跑马灯程序 的文章

 

随机推荐