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