历史上的今天
今天是:2024年12月19日(星期四)
2018年12月19日 | 51单片机中断处理函数能否影响全局变量
2018-12-19 来源:eefocus
在用keil4.60写51的定时器中断处理函数的时候,遇到了这么一个纠结的问题,就是我定义了一个全局变量temp,一旦触发定时器中断进入处理函数时将temp=123,在开中断前temp=888,我本用keil调试看看里边的变量变化情况的,无意中发现keil竟然显示不了全局变量,只能显示当前调用函数的局部变量,这样一来靠调试我是完全不知道全局变量的值变成了什么。上网查了一下,竟然有人说中断处理函数不能改变全局变量的值,决定不相信,做个测试就知道了。昨天实验室没有51开发板来做测试,就只好先画了个proteus的仿真电路图,把程序下载进去看看运行的结果。
如果处理函数可以改变全局变量,led2亮,否则led1亮
#include
#define uchar unsigned char
#define uint unsigned int
sbit led1=P0^0;
sbit led2=P0^1;
uint temp0;
void main(void)
{
temp0=888;
/******** 定时器0初始化 *******/
TMOD=0X01; //定时器0 : 工作方式1--16位定时器
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1; //允许定时器0中断
TR0=1; //允许定时器0开始计时
EA=1; //开cpu总中断源
/******** 进入正式工作 *******/
P0=0xFF;
while(1)
{
if(temp0==888)
{
led1=0;
led2=1;
}
else if(temp0==123)//最终响应这一个
{
led1=1;
led2=0;
}
else
{
P0=0xFF;
}
}
}
void timer0(void) interrupt 1 //定时器0中断服务子程序
{
TR0=0;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
temp0=123;
TR0=1;
}
仿真图片显示

今天把开发板带来了,下载进去效果一样。
结论,中断处理函数可以改变全局变量的值。
上一篇:C51中的中断服务程序
史海拾趣
|
射频(RF)技术简介RF(Radio Frequency)技术被广泛应用于多种领域,如:电视、广播、移动电话、雷达、自动识别系统等。专用词RFID(射频识别)即指应用射频识别信号对目标物进行识别。RFID的应用包括: ● ETC(电子收费) ● 铁路机车车辆识别与 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 今年清单出来了,与往年相比,小车还是有的,用光电传感器,最大的不同是“无线收发模块”,可以猜想是通信方面的问题,或者是两车,或者是遥控操作,或是上位机。 … 查看全部问答> |
|
现在公司准备用c#开发一个项目 运行在wince平台上。 我现在还没搞清楚 这个环境应该怎么搭建。 有没有乐于助人的? 帮帮我这个可怜的人吧。 感谢 万分感谢。 Q:252847391 非诚勿 ...… 查看全部问答> |
|
这次eeworld发力团购 DK-KM3S9B96开发板,确实是给了大家一个认识TI新产品的机会,TI的产品我用的非常多了,其优点就是稳定、可靠。 DK-LM3S9B96开发板是支持10/100M以太网、USB OTG、3.5寸触摸屏、SD卡、I2S音频,扩 ...… 查看全部问答> |




