單片機c語言教程:C51變量
void main(void)
{
unsigned int a;
unsigned char b;
do{
for (a=0;a50000;a++)
P1_0 = 0; //點亮P1_0
for (a=0;a50000;a++)
P1_7 = 0; //點亮P1_7
for (b=0;b255;b++)
{
for (a=0;a10000;a++)
P1 = b; //用b的值來做跑馬燈的花樣
}
P1 = 255; //熄滅P1上的LED
for (b=0;b255;b++)
{
for (a=0;a10000;a++) //P1_1閃爍
P1_1 = 0;
for (a=0;a10000;a++)
P1_1 = 1;
}
}while(1);
}
. Keil c51指針變量
單片機c語言支持一般指針(Generic Pointer)和存儲器指針(Memory_Specific Pointer).
1. 1. 一般指針
一般指針的聲明和使用均與標準C相同,不過同時還能說明指針的存儲類型,例如:
long * state;為一個指向long型整數(shù)的指針,而state本身則依存儲模式存放。
char * xdata ptr;ptr為一個指向char數(shù)據(jù)的指針,而ptr本身放于外部RAM區(qū),以上的long,char等指針指向的數(shù)據(jù)可存放于任何存儲器中。
一般指針本身用3個字節(jié)存放,分別為存儲器類型,高位偏移,低位偏移量。
2. 2. 存儲器指針
基于存儲器的指針說明時即指定了存貯類型,例如:
char data * str;str指向data區(qū)中char型數(shù)據(jù)
int xdata * pow; pow指向外部RAM的int型整數(shù)。
這種指針存放時,只需一個字節(jié)或2個字節(jié)就夠了,因為只需存放偏移量。
3. 3. 指針轉(zhuǎn)換
即指針在上兩種類型之間轉(zhuǎn)化:
l 當基于存儲器的指針作為一個實參傳遞給需要一般指針的函數(shù)時,指針自動轉(zhuǎn)化。
l 如果不說明外部函數(shù)原形,基于存儲器的指針自動轉(zhuǎn)化為一般指針,導致錯誤,因而請用“#include”說明所有函數(shù)原形。
l 能強行改變指針類型。
變量的存儲類別
一、static(靜態(tài)局部)變量。
1、靜態(tài)局部變量在程序整個運行期間都不會釋放內(nèi)存。
2、對于靜態(tài)局部變量,是在編譯的時候賦初值的,即只賦值一次。如果在程序運行時已經(jīng)有初值,則以后每次調(diào)用的時候不再重新賦值。
3、如果定義局部變量的時候不賦值,則編譯的時候自動賦值為0。而對于自動變量而言,定義的時候不賦值,則是一個不確定的值。
4、雖然靜態(tài)變量在函數(shù)調(diào)用結(jié)束后仍然存在,但是其他函數(shù)不能引用。
二、用extern聲明外部變量。
用extern聲明外部變量,是為了擴展外部變量的作用范圍。比如一個程序能由多個源程序文件組成。如果一個程序中需要引用另外一個文件中已經(jīng)定義的外部變量,就需要使用extern來聲明。
正確的做法是在一個文件中定義外部變量,而在另外一個文件中使用extern對該變量作外部變量聲明。
c語言相關(guān)文章:c語言教程
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
存儲器相關(guān)文章:存儲器原理
塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理 激光器相關(guān)文章:激光器原理
評論