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()函數之前聲明及定義就可以了。即全局變數。
而且刪除中斷中重復聲明變數的語句(如果不刪除,將被理解為局部變數)。
了解局部變數、全局變數的作用域概念、定義的方法。