急!51单片机。单片机的定时器中断断里语句多了点,好像影响了其他函数us级的时序,仿真就老是出错。该怎么解决?

51单片机中断函数可以有返回值吗_百度知道
51单片机中断函数可以有返回值吗
51单片机中断函数可以有返回值吗?
我有更好的答案
中断函数不会返回 中断使用interrupt 关键字和终端编号0-4来实现:返回值 函数名
interrupt nn对应中断源的编号,中断编号告诉中断器中断程序的入口地址,它对应着IE寄存器中的使能位,即IE寄存器中的0位对应着外部中断0。8051单片机的中断源以及终端编号如下: 中断编号
定时器/计数器0 溢出
定时器/计数器1 溢出
串行口中断
在51系列单片机中,有的单片机多达32哥中断源,所以终端编号是0-31.当正在执行一个特定的任务时,可能有更紧急的事情需要CPU处理,这就涉及到了中断优先级。高优先级中断可以中断正在处理的低优先级中断程序,因而最好给每种优先级程序分配不同的寄存器组。在C51中可使用using指定寄存器组,using后的变量为0-3的常整数,分别表示51单片机内的4哥寄存器组。中断函数的完整语法如下: 返回值
函数名([参数])[模式][重入]interrupt n[usingn]unsigvoid timer0(void) interrupt 1 using 2if(++interruptcnt==4000)
// 计数到4000second++;
//另一个计数器interruptcnt=0;
//计数器清零
采纳率:95%
来自团队:
这样恐怕编译不通过吧。你想想,中断函数是硬件调用的,你想返回什么给硬件?如果你想返回什么信息给主程序的话就只能使用全局变量了。暂时我都没想到其他好的方法。通常像你这种情况我是使用队列表的,由中断函数把读到的数据写入队列,然后在主程序读数的时候就可以逐个字节读出了。当然,51就不要用链表做队列表了。通过指针求余就好了。
本回答被提问者采纳
中断函数不会返回 中断函数是一个特殊的函数,没有参数,也没有返回值;但是程序中允不允许使用return呢?答案是允许的,不过只能用&&,不能用&return(z);&;用在一些需要快速返回的地方,对应的汇编会有多个ret语句,相对效率会高一些。
把tempchar定义为一个全局变量不就行了,中断函数不能有返回值
你想返回什么?
其他3条回答
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。拒绝访问 | www.renrendoc.com | 百度云加速
请打开cookies.
此网站 (www.renrendoc.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(41a39f-ua98).
重新安装浏览器,或使用别的浏览器51单片机:为什么在定时器中断里面改变的全局变量值没能传回主函数?在线等,急啊!!_百度知道
51单片机:为什么在定时器中断里面改变的全局变量值没能传回主函数?在线等,急啊!!
#include&reg52.h&
#define uchar unsigned char
#define uint unsigned int
#define Wei
#define Duan P0
//数码管位选和段选
#define T0_M1 50000 //T0(Mode 1)计数0.05s,用于1s计时
#define TH0_M1 (6)/256
#define TL0_M1 (65...
我有更好的答案
进中断了么,中断标志清零了么
采纳率:33%
#include&reg52.h&#define uchar unsigned char#define uint unsigned int#define Wei
P2#define Duan P0
//数码管位选和段选#define T0_M1 50000 //T0(Mode 1)计数0.05s,用于1s计时#define TH0_M1 (6)/256#define TL0_M1 (6)%256 uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//数字0-9,'-',共阳数码管uchar flag=0;
//设计一个状态标志位标志定时1s完成 uchar T0count=0;void main(void){
TMOD=0x01;
//定时器0模式1
TH0=TH0_M1;
TL0=TL0_M1;
if(flag==1)//为什么在定时器中断里面改变的flag值没能传回
Duan=tab[10];
}}void T0_1s(void) interrupt 1{
TH0=TH0_M1;
TL0=TL0_M1;
if(++T0count==20)
T0count=0;
非常感谢,同样感谢其他热心网友~~
这个有个问题。。。 while(1)
TMOD=0x01;
//定时器0模式1
TH0=TH0_M1;
TL0=TL0_M1;
//启动T0设置好定时器之后,如果还没有到1S,也就是下面的if语句不成立,那么就会循环的执行while(1)里面的程序。这样就会重复的设置定时器。。。然后再判断if语句不成立,在循环。。。。。。if(flag==1)//为什么在定时器中断里面改变的flag值没能传回
Duan=tab[10];
重复设置。。。设置一次定时器进入一次中断,T0count的值仍然加1,加到20后flag仍然可以置1,然后数码管显示。。为什么不对?
你这个根本就不会进中断。
总在执行这一段程序
TMOD=0x01;
//定时器0模式1
TH0=TH0_M1;
TL0=TL0_M1;
//总中断
//T0中断
//启动T0怎么可能进中断呢
和法撒旦个就是有酒有肉
其他1条回答
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。一个单片机系统要用到多个定时器怎么办?_单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:148,666贴子:
一个单片机系统要用到多个定时器怎么办?收藏
一个51单片机做的系统需要用到多个定时器,计数器,串口中断,程序该怎么写。。。小白求助
别沉,求助
写一个特别小的定时器中断 计时用 不过有别的中断就不太准了 这个是绕不过去的坎
一般有其他中断时 暂停计时 这样 或者用个外部表的元件
是定时器只有很少需要的很多吗
是定时器不够用吗可以用loop:inc r0 loop1:inc r1 djnz r1 ajmp loop1 djnz r0 ajmp loop类似程序再实现几个定时器软件
定时器中断只要做的事情不很多,就不会发生定时的偏差。定时器硬件可以保证溢出后继续按标准的时序继续计时。软件只要保证各个中断别过长占CPU就行。编程时注意经常发生的中断排在响应队列的前边。
一般不需要用到两个定时器来做,多路中断肯定会发生冲突,只要用到一个定时器计算核心参数变量就行了,中断里的代码不会很长的,比如做电子钟,还想做秒表,两个同时运行只要一个定时器就可以,既准确又不冲突,如果用多路定时器的话最好在一个定时器中断里关闭另外一个的中断允许,不然一定会发生冲突。
我做的东西需要三个定时器
中人教育设备有限公司专业生产单片机实验台实训设备,优秀的售后服务体系.咨询是生产单片机实验台实训设备的20年老企业,让客户对中人公司生产的单片机实验台实训设备放心.
用c吧,51单片机,定时器管够。
一般来说,所有的定时需求,用一个定时器,就足够了。
会不会影响准确性?
谢谢各位吧友的热心帮助,我差不多有头绪了。小弟在此谢了!
你看这个翻译嘛,不好意思我误解了,我的错
渣渣,不管有多少定时的任务,只要一个定时器就够了。详情请百度 时间片轮询架构。
stc12和15的定时器够你用了,你是做什么需要那么多个定时器
你好,我也在使用C,我想问一下,你的串口1的配置与中断程序,是怎么写的?
一个硬件定时器做多个软件定时器!给你点线索,后续的自己百度了解
外加芯片啊,比如时间,你可以加个时钟芯片,走时还比单片机定时器准。
登录百度帐号}

我要回帖

更多关于 单片机定时器中断 的文章

更多推荐

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

点击添加站长微信