❶ 剛開始學習keil c51編程是個菜鳥級的,想請教一下在KEIL C51中全局變數和局部變數的設定方法
C51採用的是C89標准,不支持在函數體開始後又聲明變數。你定義指針變數的語句必須保持在函數體的最前端。
網路嫌我字數不夠
❷ 單片機Keil C51 C語言多文件如何使用全局位變數跪拜!!
不管你引用再多的文件
main函數只有一個吧!!
如果引用的c文件需要使用全局變數。就把變數寫在引用文件前面
比如
int
i;
//全局變數
#include
"1.h"
#include
"2.h"
#include
"3.h"
不知道能不能幫到你
反正我是這么理解的
❸ 51單片機訪問片內數據存儲器某單元的內容用c語言怎麼寫
方法1:
char data *p; //定義一個指向片內RAM地址的指針
p = 0x30; //片內RAM地址為0x30
*p = 0x12; //向0x30內寫入立即數0x12
方法2:
#include <absacc.h>
char x;
x = DBYTE[0x30]; //將片內RANM地址0x30的內容賦給變數x
DBYTE[0x30] = 0x12; //向0x30內寫入立即數0x12
方法3:採用 _at_ 直接聲明變數所處地址,但該變數必須是全局變數。
char data x _at_ 0x30 ; //x為char型全局變數,地址位於data區地址0x30
。。。。。
x = 0x12; //向0x30內寫入立即數0x12
❹ static在51單片機中幾種用法
static(靜態) 是一種數據變數的存儲方式而已,不存在什麼用法之說,但了解它的特性,能幫你寫出好程序。
靜態變數的特性:
1、變數只定義一次(含定義時的初始化值);
2、只在定義范圍內有效(其他地方、函數並不認識這個變數);
3、函數結束,變數值不丟失。
變數有 全局變數、局部變數之分;
全局變數在程序中,分配有固定物理存儲空間,程序運行過程中,數據不丟失(就是自己有個房子)。
局部變數在程序中,沒有固定物理存儲空間。一般出現在子函數中,調用子函數,隨機分配存儲空間,子函數結束後,該空間回收,隨機分配給其他函數使用。(就是租屋,你不租了,就租給別人)
有些時候,你又希望這個局部變數能保持,這樣你下次回來還能接著算,於是就需要static 這個「靜態」功能了。它能讓這個分配的空間,一直給你保留著。
也許你會說,用全局變數就好了。是的,沒錯,它的功能幾乎與全局等價了。但為什麼不用全局,可能原因有以下2種:
1、全局變數對所有子函數都有效,誰都可以修改,可能會超出你的預計范圍(就是說,房子雖然是你的,但大家都有鑰匙,可以隨便進來換換裝修,你掌握並不了)
2、移植性高,子函數內的靜態局部變數,只需要輸出子函數即可。但全局變數,要麼需要主文件為你定義這個全局變數,要麼就會在多個C文件包含你的頭文件時,發生重復定義全局變數問題。
當然,除了靜態局部變數,還有靜態全局變數,這個用於模塊化程序設計里,為了避免其他模塊出現同名全局變數問題,就使用了只針對本模塊程序有效的 靜態全局變數
❺ 51單片機變數 51的單片機變數是怎麼個定義法。全局變數,局部變數都放在什麼存儲器里的
不能這樣定義,這樣定義是錯的。你這個是賦值,不是定義在0x22單元格里。
unsigned char bdata SS _at_ 0x22;
只有在Keil編譯環境下才可以這樣使用。還有,這種語法不適合用C語言,我說的是不適合,不是不能用。C語言裡面的指針就是針對這個的,不建議使用 _at_ 進行變數在RAM中固定,這樣對程序編譯優化時,帶來很多麻煩,也得不到充分的優化。
其實用C語言指針的方法是可行的。
bdata區雖然有自己獨立的位地址,但你用的是char型 ,是一個位元組的,所以你說的0x22隻是bdata區的位元組地址,而不是位地址,那麽用C語言的方式實現 就是這樣:
unsigned char *p;
p=0x22;
*p=50;
*p 表示指向0x22所在的單元格,就是將50賦值到0x22地址所指向的單元格里。
再從另一個角度講,如果你沒於傳參或改變實參的情況下,不建議使用這類,即使有,也不是很建議。因為單片機高手是不會用_at_這類關鍵字進行變數定位的。
有什麼疑問可以一起探討。
希望我的回答對你有幫助,謝謝。
❻ 51單片機中,全局變數和全程變數是一回事嗎
沒聽過全程變數,只聽說過全局變數和局部變數2
種,全局變數是在這個函數中都可以使用,局部變數只在聲明的函數內有效。
❼ 單片機C語言中的全局變數和中斷問題,大神進
簡單點:在需要使用a的文件裡面,在最前面加一行:
extern char a;
在那個文件裡面就可以直接用了。
如果多個文件會用到,就多個文件都寫這么一行。
也可以了解一下頭文件。
新建main.h, 內容如下:
#ifndef _MAIN_H_
#define _MAIN_H_
extern char a;
#endif _MAIN_H_
之後在需要用到a變數的文件內在最前面
#include "main.h"