A. 51单片机程序跳出中断变量保持不住
如果是全局变量,那么Error_flag就会一直保持下去,直到你再次赋值。
如果是引脚,那就要看你的硬件电路了,如果外围电路合适的话,引脚上的电平就是高,如果外围强行拉低了,那么你就算赋1,引脚上也是低电平。
B. 单片机定时器中断改变全局变量
int h1,m1,s1; //时分秒全局变量
int tt; //定时器0进入中断的次数
void main()
{
init(); //初始化
while(1)
{
display(h1,m1,s1);
}
}
void dingshi0() interrupt 1 //定时器0中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{
tt=0;
s1++; //秒数+1
if(s1==60){ s1=0; m1++;}//计满60秒分位进1,秒位清0
if(m1==60){ m1=0; h1++; }//计满60分时位进1
if(h1==24){ h1=0; }//计满24小时时位清0
}
}
在中断内,你可以直接写成这样
只用全局变量更方便
再有,你苦恼的问题是因为函数每次调用的时候
都是以0为数据传递的,错误在串口初始化部分以及你调用函数的时候
你的变量S,没有全局变量声明,切也没有局部变量声明
所以每次调用函数的时候,S都是以0开始,最多加到1,之后又从0开始递增
C. 单片机C语言中的全局变量和中断问题,大神进
简单点:在需要使用a的文件里面,在最前面加一行:
extern char a;
在那个文件里面就可以直接用了。
如果多个文件会用到,就多个文件都写这么一行。
也可以了解一下头文件。
新建main.h, 内容如下:
#ifndef _MAIN_H_
#define _MAIN_H_
extern char a;
#endif _MAIN_H_
之后在需要用到a变量的文件内在最前面
#include "main.h"
D. 51单片机中,怎样使中断程序中的变量和主函数中的变量同步变化
把需要同步变化的变量,放在main()函数之前声明及定义就可以了。即全局变量。
而且删除中断中重复声明变量的语句(如果不删除,将被理解为局部变量)。
了解局部变量、全局变量的作用域概念、定义的方法。