51单片机中断处理函数能否影响全局变量

51 单片机 专栏收录该内容
9 篇文章 0 订阅

在用keil4.60写51的定时器中断处理函数的时候,遇到了这么一个纠结的问题,就是我定义了一个全局变量temp,一旦触发定时器中断进入处理函数时将temp=123,在开中断前temp=888,我本用keil调试看看里边的变量变化情况的,无意中发现keil竟然显示不了全局变量,只能显示当前调用函数的局部变量,这样一来靠调试我是完全不知道全局变量的值变成了什么。上网查了一下,竟然有人说中断处理函数不能改变全局变量的值,决定不相信,做个测试就知道了。昨天实验室没有51开发板来做测试,就只好先画了个proteus的仿真电路图,把程序下载进去看看运行的结果。

如果处理函数可以改变全局变量,led2亮,否则led1亮

#include <reg52.h>
#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;
}
仿真图片显示


今天把开发板带来了,下载进去效果一样。

结论,中断处理函数可以改变全局变量的值。


  • 0
    点赞
  • 3
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值