求51单片机51程序程序

51单片机外部中断不能返回主程序问题,求解决==
热门型号:
&&&当前位置:
51单片机外部中断不能返回主程序问题,求解决
用户名:l背靠背l
注册时间:
51单片机外部中断不能返回主程序问题,求解决
/*************************************/下面是我的初始化程序,请教高手帮忙分析一下,如果没问题还可以把外部中断服务程序发上来,急求,谢谢/*************************************/sbit IRIN = P3^2;& && && &//红外接收器数据线sbit BEEP = P2^0;& & //嗡鸣器void system_init() //系统初始化,{ TMOD = 0x01;//定时器1工作方式1 TH0 = ()/256; TL0 = ()%256;& &&& ET0 = 1; TR0 = 1; PT0 = 1; PX0 = 0; EA = 1;//定时器主要是定时,扫描读其他数据}void IR_init(){& & & && &&&IRIN=1;& && && && && &//P3^2,I/O口初始化 BEEP=1; EX0=1;& && && && && & //允许总中断中断,使能 INT0 外部中断 IT0 = 1;& && && && & //触发方式为脉冲负边沿触发 } void main(){
system_init(); delay_ms(20); IR_init();& & while(1) { temp_shi=temp/100;&&temp_ge=temp%100/10;& && &display(temp_shi,temp_ge);//显示温度&&bell=0;//用来测试能否返回主程序,经测试不能 }}&&//经测试在没有外部中断情况下,显示温度,响铃都正常。一旦进入外部中断,就不能显示温度和响铃了。
用户名:原野之狼
注册时间:
在ISR里delay了这么多。。。还有while等待建议重新设计软件结构
用户名:l背靠背l
注册时间:
可是我前面的程序都正常,就是不能退出去
用户名:原野之狼
注册时间:
ISR在哪里呢 有没有进入?
用户名:l背靠背l
注册时间:
ISR是什么?
用户名:ayb_ice
注册时间:
把两个中断程序都帖上来吧
用户名:yan2005
注册时间:
ISR - Interrupt Service Routine, 就是你说要发的中断服务程序
用户名:原野之狼
注册时间:
3# l背靠背l Interrupt&&Service Routing中断服务处理
用户名:l背靠背l
注册时间:
/*****************************************/这是上面程序的外部中断服务子程序/******************************************/void IR_IN() interrupt 0 {&&unsigned char j,k,N=0;& &&&EX0 = 0;& && & & &&&delay(15);& & & &&&if (IRIN==1)& &&&{ EX0 =1;& & & && && & & && &} & && && && && && && && && &//确认IR信号出现&&while (!IRIN)& && && && &//等IR变为高电平,跳过9ms的前导低电平信号。& & {delay(1);} for (j=0;j&4;j++)& && && &//收集四组数据 { &&for (k=0;k&8;k++)& && &&&//每组数据有8位&&{& &while (IRIN)& && && && &//等 IR 变为低电平,跳过4.5ms的前导高电平信号。& &&&{delay(1);}& & while (!IRIN)& && && & //等 IR 变为高电平& &&&{delay(1);}& &&&while (IRIN)& && && &&&//计算IR高电平时长& && &{& & & && &&&delay(1);& & & && &&&N++;& && && &&&& & & && &&&if (N&=30)& & & & & & & &&&{ EX0=1;& & & & & & & &&&}& &&&//0.14ms计数过长自动离开。& && &}& && && && && && && && &//高电平计数完毕& && && && && & & &&&IRCOM[j]=IRCOM[j] && 1;& && && && && && &//数据最高位补“0”& &&&if (N&=8) {IRCOM[j] = IRCOM[j] | 0x80;}&&//数据最高位补“1”& &&&N=0;&&} }& && &if (IRCOM[2]!=~IRCOM[3])& &{ EX0=1;& &&& }& & & & & & & & & & & && & //如果8位数据码和8为数据反码不匹配,则返回& & & & if(IRCOM[2]==0x44 || IRCOM[2]==0x40)temp_set();& & & & if(IRCOM[2]==0x07 || IRCOM[2]==0x15)time_set();& & & && &//判断是哪个按键按下,进入选择& &&&beep();& &&&EX0 = 1;& &&&BEEP=0;& &//判断外部中断能不能跳出& & & & & & & & & & & & & & & & & & & & & & & & & & & && &}
用户名:ayb_ice
注册时间:
本帖最后由 ayb_ice 于
17:08 编辑 LZ果然程序高手中断程序中居然有:& & 1: delay程序& &2: while (!IRIN)等待某个PIN的状态这样的程序不出问题才怪啊,程序100%在外部中断中出不来了,MAIN程序又怎么会有时间显示呢你这是典型的天马行空,想怎么来就怎么来强烈建议先去搞点基本的程序架构概念吧
用户名:l背靠背l
注册时间:
用户名:l背靠背l
注册时间:
/icview--1.html#pid1603561请教9楼,我只是在最后的时候出不去啊
用户名:jacky-cheung
注册时间:
中断里加个标识变量,出来以后,主程序根据变量的值来进行判断,下一步就
用户名:王利110
注册时间:
中断里面东西太强悍了......顶楼上!!!!!
用户名:goldenriver
注册时间:
我是来学习的
用户名:zhanghuilong
注册时间:
哥,这个是红外接收程序吧!!!中断里面太乱了!!
用户名:刘前辈
注册时间:
本帖最后由 刘前辈 于
09:04 编辑 太好办了。如果外部中断里这么多东西运行没有问题的话,把这些东西转化为后台程序就行了。――也即把前台的优先权及早释放,允许另一个中断触发运行。而里面的东西转化为软实时程序F1()在后台执行。――不需要重写程序,修改一下堆栈,装入后台程序地址F1(),IRET 返回到这些后台程序的地址F1就行了(函数名即地址)。
用户名:joyme
注册时间:
LS不要教坏人了,这么简单的程序重写也就不到半小时时间,开始学的时候要养成好一点的习惯,这样编程可不行?
用户名:123jj
注册时间:
用户名:abin0415
注册时间:
刘前辈讲的太深奥了,听不懂。看来得加班学习了。
热门型号:求大神指点。基于51单片机的电子表程序。
[问题点数:40分]
求大神指点。基于51单片机的电子表程序。
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。查看: 781|回复: 11
求51单片机蜂鸣器和流水灯同时工作的程序。
求51单片机蜂鸣器和流水灯同时工作的程序。
 原理图都没有 让别人怎么给你程序
看你的是有源蜂鸣器还是无源的。假设是无源的
1.蜂鸣器导通几个到几十个毫秒,再关断&&再导通&&再关断 轮流运行&&写个函数&&叫BEEP()
2.流水灯& &依次点亮单个LED&&LED1ON() delay()&&LED2ON()&&delay()&&LED3ON()&&delay()............
函数叫 flow_led()
3.蜂鸣器和LED同时工作&&在while(1)里面调用 上面的两个函数&&BEEP()&&和flow_led()
回帖助人的奖励!
 原理图都没有 让别人怎么给你程序 思路: 看你的是有源蜂鸣器还是无源的。假设是无源的 1.蜂鸣器导通几个到几十个毫秒,再关断&&再导通&&再关断 轮流运行&&写个函数&&叫BEEP() 2.流水灯& &依次点亮单个LED&&LED1ON() delay()&&LED2ON()&&delay()&&LED3ON()&&delay()............ 函数叫 flow_led() 3.蜂鸣器和LED同时工作&&在while(1)里面调用 上面的两个函数&&BEEP()&&和flow_led()
回帖助人的奖励!
工作的时候,调用蜂鸣器程序后,再调用点灯即可
回帖助人的奖励!
这类很简单的吧,一般单片机的书上都会有类似程序的
回帖助人的奖励!
同& && && & 问
蜂鸣器,就是某个io口的持续震荡。流水灯就是秒级延时以后的io电平变化。要这样的程序,必须明确单片机型号,以及晶振频率,否则有快有慢效果不一定好
回帖助人的奖励!
本帖最后由 yanjibao 于
08:58 编辑
这个用定时器好一些,定时125us,定时器函数直接翻转io蜂鸣器就会响。累计80次就是10毫秒,在累计100次就是一秒钟了
回帖助人的奖励!
无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
同问,楼主知道了要告诉我
同时工作其实也有个先后顺序的
liuxianbin2015 发表于
同问,楼主知道了要告诉我
同问的还有吗,要不要我发布一个。就定在今天晚上吧
回帖助人的奖励!
分别写蜂鸣器和流水灯的程序,然后在while(1)里调用。。。。
回帖助人的奖励!
Powered by求一个51单片机的简单程序?_百度知道
求一个51单片机的简单程序?
(备注://c?问题2.com/zhidao/pic/item/b0ba61ef243a9ae598c程序的逻辑要求是这样的,LED灯还是亮1秒熄灭,当再次按下按钮1后://c?这个亮的一下时间应该很短人眼应该看不到把?程序的最开头是不是应该先给P1^1赋值0.com/zhidao/wh%3D600%2C800/sign=df4bfb8cc8/b0ba61ef243a9ae598c.jpg" esrc="http。问题3:这样的一个程序用C语言如何写.baidu.baidu,这样赋值后开机上电的瞬间led会亮一下么:如果图片中有错误请指出?
其他类似问题
为您推荐:
其他1条回答
电阻的大小取决于LED的最大电流,阴极串一限流电阻后到P1P1。程序自己琢磨吧.0加一个上拉10K电阻,这样开机就不会有你所担心的亮一下, LED灯的阳极接+5V电源。不难.1, LED是电流器件,不加电阻很容易被干坏的
程序实在是写不出来,帮个忙把
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 单片机51蜂鸣器程序 的文章

更多推荐

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

点击添加站长微信