单片机中,我的两个子程序中都有死循环。如何编写使得按按键可以从这

作者&投稿:帅败 (若有异议请与网页底部的电邮联系)
求教单片机一键多功能的问题,简单来说是:在已经进入子程序中,当按键按下,又再次进入另一个子程序~

问题主要有两个:
1,“CHULI”这段指令只能执行一次
原因:也就是说,程序上电复位后,执行到ZERO循环,之后一直在这里循环,无法执行CHULI;
解决:将所有跳转到数字(如:ZERO、ONE、...、NINE)的跳转指令改为跳转到CHULI;保证中断之后CHULI能被执行到;

2,中断中散转表指针R1递增方式错误
虽然你的程序中还感觉不到这个错误,但是存在的,而且这个错误还有两点:

一是R1的初始值是0,这样无论你怎么移位,R1永远是0;

二是,这里你不应该使用移位(我想您的意图应该是从ZERO到ONE、...、NINE的顺次执行,否则只能执行ONE、TWO、FOUR、EIGHT等几条跳转),而应该使用ADD指令,每次加2个字节(我很长时间不编程了,忘记AJMP+地址有几个字节了,反正有几个字节加几)。

改改试试吧,应该没什么大问题!

另外,这个程序就算改后能执行,也尽量不要这样写。你这种写法接近使用操作系统的多任务方式编程方法,但又没有操作系统支持,所以显得怪怪的,可读性差,你可以参考Keil C51中TINY OS的原理改写下。如果觉得太难,可以使用常规方法,不要用死循环,比如:对每种输出(ZERO、ONE、...、NINE)编写子程序,在你的散转进行子程序调用,但调用后记得跳出。
方法很多,好好思考,不要“先后试了查询方式,中断方式”一定要知道为什么不行才行,祝好运!

加上一条语句,while(1)

程序构架:
主函数→调用子函数1→退出子函数1,返回主函数→调用子函数2→退出子函数2,返回主函数。
看懂没,程序不能卡死在子函数里面,必须是循环执行各个子函数。
作为子函数,你可以不动作,但不能占着茅坑不拉屎!


...还有数码相机和单反相机是不是两个对立的定义啊?
单镜头反光相机还有一个很大的特点就是可以交换不同规格的镜头。我们常常听人说“单反相机”,单反究竟是什么呢?单反就是指单镜头反光,即SLR(Single Lens Reflex),这是当今最流行的取景系统,大多数35mm照相机都采用这种取景器。在这种系统中,反光镜和棱镜的独到设计使得摄影者可以从取景器中直接观察...

我的老师布置了一个作文,题目叫:《难忘的第一次》。希望大家给我解决一...
”我急忙摇摇头,妈妈见状皱起了眉头:“不敢吗?那你只有再等一两个小时后同我一起回去了。”我一贯很爱面子,自然受不了妈妈的奚落:“走……走就走!”走出办公楼,风像锋利的刀刃,刺得我的脸直生疼,看着黑黢黢的大路,我又心虚了。我蹑手蹑脚地窜进了黑暗之中,忐忑不安地走着。突然,...

观察生活中的某个场景,写一段人物之间的完整的对话
30、记得儿时,每到“六一”儿童节,妈妈就会在我的两个梳得高高的朝天辫上,系上个大蝴蝶结,在给我穿上崭新合体的连衣裙,把我打扮得漂漂了亮亮的。我踏着小板凳,站在大衣橱的镜子前,抿着嘴,晃着小脑袋,欣赏着自己的“光辉现象”,内心充满了一种女孩子的自豪感。 1、只有二十个月的乔治特,是三个孩子中最...

找一部日本动画片 是讲两个警视厅女警察的
我的 找一部日本动画片 是讲两个警视厅女警察的 开一部改装小警车,里面还有一部摩托车。其中一女警是汽车改装高手... 开一部改装小警车,里面还有一部摩托车。其中一女警是汽车改装高手 展开  我来答 11个回答 #热议# 意大利和韩国运动员对立的原因是什么? 永远的13班 2008-05-20 · TA获得超过...

感应遥控玩具飞机写作文
我想遥控直升飞机是一个大家都喜欢的玩具吧,其实我也挺喜欢它的,那么下面我就给大家介绍介绍吧。 遥控直升飞机是一个类似直升飞机的小型模型。它的外形酷似五角形,“头顶”上有四片呈圆形的扇片,“尾巴”后面有两片小扇叶,像两片小叶子似的。 它的“身体”有两个外露出的齿轮,上方有两个比较明显的“笼型动力...

法国有哪些浪漫的爱情片?
《天使爱美丽》、《两小无猜》、《巴黎,我爱你》等等。谈到法国,大家能想到的第一个词就是“浪漫”了吧,无论是法国的情景、法国的思想,还是法国的人,都是充满浪漫,这样一个欧洲国家似乎一直都处于一个浪漫的境地中,这样一个浪漫的国家怎么能不拍出一些带有国家浪漫风格的爱情片呢?《天使爱...

这是一位会说一口地道上海话的犹太妈妈,她一生结过3次婚,育有两子...
我也去答题访问个人页 关注 展开全部 这是一位会说一口地道上海话的犹太妈妈——沙拉·伊马斯。她一生结过3次婚,育有两子一女,2个儿子都不到30岁就成了亿万富翁,女儿也就读名校。沙拉出生在上海,有着1\/2犹太人血统,精通8门语言,被万千女人称之为“亿万富豪的伟大母亲”,沙拉的出名不仅仅是因为她神秘的...

我想问下单反相机下面都会插一个根它机身等宽的一个条是什么东西?
4,多了竖拍快门、功能拨轮等小东西,竖拍的时候手持的感觉还不错。5,相机多了一个保护座,摔一下的时候多数情况是它先啃地,但是对于高昂的价格来说还是很心疼的。6,胶片机上的手柄有的是用来装多余的电池,有的则是多了一个高速卷片马达,安装后的连拍速度有质的飞跃。缺点 1,太贵 2,...

前边两个字是死亡的一个电影,美国片,挺恐怖的。我忘记是什么名了,谁...
第二个是被公交车撞死(最无聊的死),第三个死在家里,先是杯漏水,水导电,电脑碎片刺中勃子,又不小心被刀子插中,椅子砸中刀子,死了,然后房间爆炸 第四个是一个躲过死神的人的车子碎片让火车弹飞,然后被削掉脑袋。第五个(三号主角) 救了艾力士 艾力士跳过 自己被广告牌砸死 第六个(男主角)...

描写思念的句子:一个人的思念,两个人的画面
我也去答题访问个人页 关注 展开全部 1,思念一个人,不需要语言,却需要的勇气。 2,躲避一切的...也会感知生活在同一片蓝天下的幸福。 20,谁也无法知道我们是怎样相识的,谁也无法知道我们怎样相爱的...6、能看到你笑容背后的忧伤,感受到你愤怒背后的爱意,这种人,才能执子之手,直到永久。 7、如果你还...

崇州市13189816207: 单片机编程程序中出现了死循环,是什么情况,怎么解决?急,谢谢 -
訾逃培古: 程序跑飞, 原因有好几种: 1程序结构不严密,堆栈溢出 2中断中调用太多子程序 3受强的电池干扰解决方法: 1,加软件或者硬件看门狗 2 做好电路的EMC设计 3 程序尽量规范点

崇州市13189816207: 单片机独立按键按下其中一个执行程序,再按下另一个执行另一个程序,怎么跳出死循环 -
訾逃培古: 看你这程序是一个子程序,并带有形参的,不是主程序,怎么可以用while循环呢?那怎么跳出这子程序? 把这个子程序写成一个主程序就行了吗,那while循环也统一,别用do while. 都写在while(1) 主循环里就行了. 这四段程序是因为分成四个程序,分别来做的吧,现在要统一到一个程序中来了,对吧.其实,这四段程序中只有一行不同,就是P0 = ~(0x01<<i); 这一行,有四种写法. 其这,这种程序合并成一个程序很简单的,其它行只写一遍,然后用switch(key)语句,只选择这一行就成了.就统一成一个主程序了.

崇州市13189816207: 单片机程序,死循环却只能循环几次就没了,只能重新烧程序或者关掉再开启才能继续输出数据,怎么回事? -
訾逃培古: 楼上的老兄 每个单片机的程序都需要一个死循环 一般都在死循环中做各种程序处理或者等待,就像楼主说的一样,是死循环,那么怎么可能跳出来,不可能说每次程序都跑飞,除非你在中断里面写了一个长程序或者用了GO TO这类破坏程序结构的语句.

崇州市13189816207: 51单片机,C8051F310,在使用中,程序总是死在延时循环中,这是为什么? -
訾逃培古: 要看到你程序的原貌才可以知道问题所在,这局部的一点点程序是看不出问题的,死机不一定就在这个循环里面,可能在其他地方.

崇州市13189816207: 单片机C语言中的的死循环即while(1)有什么作用?详...??? -
訾逃培古: 一般而言,单片机程序中至少是有一个“死循环”的,这是为了保证单片机运行程序不“跑飞”,始终在“可控”之下.

崇州市13189816207: 程序中确实没有循环语句,但单片机显示的程序运行结果出现自动循环?什么原因?谢谢 -
訾逃培古: 单片机程序本身是按PC指针执行的,如果程序中没有循环语句,当PC指针到FFFF后就会自动回到0000从新开始.所以,没有不循环的程序,要么大循环,要么小循环,要么让它中断.所以,我感觉你的程序本身有问题,应该好好检查一下,如果实在看不出来,就借助仿真软件调试一下,设置不同的断点,看看问题出在哪里了.

崇州市13189816207: 单片机C51语言中的中断程序最后面的死循环什么作用怎么理解?没有会什么样呢? -
訾逃培古: 那个东西我一般称为主循环,程序运行过程中时钟在你规定的区域内循环执行,不会超出,如果没有这个循环,程序执行完最后一句后,单片机继续向下寻址,就会进入空白的存储区域,这种情况就是程序“跑飞了”

崇州市13189816207: 我在430单片机中用了个延时程序,老是进去后程序就出不来了,好像进入了死循环,求高手看看, -
訾逃培古: 这种问题我也见过,根本不是延时的问题,建议你看下伪代码,是程序执行时的sp指针溢出(很有可能就是程序其他部分的错误造成)而导致执行完延迟后,程序不知道跳到哪里去的!!!!!!!

崇州市13189816207: 单片机主程序中必须要用到死循环吗
訾逃培古: 所有的单片机程序都是一个死循环!只是循环体大小的问题.1:“是不是如果没有死循环,程序运行一次就不运行了” 没见过任何一款单片机有STOP指令.所以只要你给单片机上电了,它就一直在执行.不过你可以用:跳转至本条指令 的指令...

崇州市13189816207: 单片机的程序跑飞是不是程序进入了死循环? -
訾逃培古: 死循环只是其中一种,只要是程序没有按照预想的结果运行都属于跑飞了,比如你采集某个数据,运行了3小时一直正常,再持续往后,发现采集到的数据出现极大地偏差,这也属于跑飞.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网