欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機(jī)C語言知識(shí)點(diǎn)大全

      時(shí)間:2019-05-15 10:35:10下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《單片機(jī)C語言知識(shí)點(diǎn)大全》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《單片機(jī)C語言知識(shí)點(diǎn)大全》。

      第一篇:單片機(jī)C語言知識(shí)點(diǎn)大全

      【C語言】 【數(shù)據(jù)類型】

      【轉(zhuǎn)義字符】 【語句】 【#define】 #define 新名 原名 【typedef】

      typedef 原類型名 新類型名;【sbit】 sbit P1_0=P1^0;在reg52.h或reg51.h的頭文件下,要使用P0.0~7….一定要事先位定義?!緄f】

      (1)if(表達(dá)式)語句; 表達(dá)式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句,繼續(xù)執(zhí)行

      這條語句的下一條。(2)if(表達(dá)式)語句1; else 語句2;

      表達(dá)式的值為真,則執(zhí)行語句 1,否則執(zhí)行語句2。(3)if(表達(dá)式1)語句1; else if(表達(dá)式2)語句2; else if(表達(dá)式3)語句3; …

      else if(表達(dá)式m)語句m; else 語句n;

      依次判斷表達(dá)式的值,只要出現(xiàn)某個(gè)表達(dá)式的值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語

      句。然后跳到整個(gè)if 語句之外繼續(xù)執(zhí)行程序?!緎witch】(1)switch(表達(dá)式){ case常量表達(dá)式1: 語句1;case常量表達(dá)式2: 語句2;------------------------case常量表達(dá)式n: 語句n;default : 語句n+1;} 計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與

      某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有 case 后的語句。(2)

      switch(表達(dá)式){ case 常量表達(dá)式1:語句1;Break;case 常量表達(dá)式2:語句2;Break;case 常量表達(dá)式3:語句3;Break;------------------------case 常量表達(dá)式n:語句n;Break;default : 語句n+1;} 計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與

      某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語句?!緂oto】 goto 語句標(biāo)號(hào);

      goto 語句標(biāo)號(hào); 其中語句標(biāo)號(hào)是按標(biāo)識(shí)符規(guī)定書寫的符號(hào),放在某一語句行的前面,標(biāo)號(hào)后加冒號(hào)(:)。語句標(biāo)號(hào)起標(biāo)識(shí)語句的作用,與goto 語句配合使用?!緒hile】(1)

      while(表達(dá)式)語句;

      只要這個(gè)表達(dá)式所表描述的事情成立或該表達(dá)式經(jīng)過計(jì)算后的值是非0 值,就一直循環(huán)執(zhí)行其后

      面的語句;當(dāng)表達(dá)式所描述的事情不成立或經(jīng)過計(jì)算后表達(dá)式的值為0 時(shí),就不再執(zhí)行其后 面的語句,并跳出while 循環(huán)。(2)do 語句; while(表達(dá)式);

      先執(zhí)行循環(huán)中的語句,然后再判斷表達(dá)式是

      否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)?!緁or】

      for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量)語句 1)先求解表達(dá)式1。

      2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行語句,然后執(zhí)行下面第3)步;若其值為

      假(0),則結(jié)束循環(huán),轉(zhuǎn)到第5)步。3)求解表達(dá)式3。4)轉(zhuǎn)回上面第2)步繼續(xù)執(zhí)行。

      5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句?!緮?shù)組】(一維數(shù)組)

      類型說明符數(shù) 組名

      [常量]; unsigned char a[10];(二維數(shù)組)

      類型說明符 數(shù)組名 [常量] [常量]; unsigned char b[3][3];int display[2][3]={{1},{3}};

      *unsigned char code table[] 定義在code區(qū),為常量

      第二篇:單片機(jī)C語言學(xué)習(xí)心得

      8、指針的使用

      8.1 在定義的時(shí)候,*ap中的‘*’是指針類型說明符;

      在進(jìn)行指針預(yù)算時(shí),x = *ap 中的‘*’是指針運(yùn)算符。8.2 如果在已定義好的指針變量,并引用,即

      int *ap, int a;ap = &a;則在進(jìn)行指針運(yùn)算的時(shí)候:

      (1)*ap與a是等價(jià)的,即 *ap就是a;

      (2)&*ap:由于*ap與a等價(jià),則&*ap與&a等價(jià)(地址);

      (3)*&a:由于&a = ap,則*&a與*ap等價(jià),即*&a與a等價(jià)(變量);(4)*ap++相當(dāng)于a++。

      8.3 指向數(shù)組的指針變量的定義,應(yīng)用,賦值:

      int a[10];int *app;則有兩種方法:app = &a[0];或 app = &a;(1)app+I 或a+i就是數(shù)組元素a[i]的地址;(2)*(app+i)或 *(a+i)就是元素a[i]中的內(nèi)容;

      (3)指針變量也可以帶下表,即app[i]與*(app+i)等價(jià)。8.4 數(shù)組和指針可以互換,但在代碼執(zhí)行的效率上卻大不相同。用數(shù)組找元素必須每次計(jì)算元素的地址,效率不高;而用指針則直接指向某個(gè)元素,不必每次計(jì)算地址,可以大大的提高運(yùn)算效率。8.5 關(guān)于指針的運(yùn)算:

      (1)p++(或p+=1):使指針p指向下一個(gè)數(shù)組元素,地址加1;

      (2)*p++:先得到p指向的變量值,再執(zhí)行p加1,指向下一個(gè)數(shù)組元素;(3)*++p:先使p加1,指向下一個(gè)數(shù)組元素,再去p指向的變量值;(4)(*p)++:表示p指向的變量值加1;

      (5)若p指向當(dāng)前數(shù)組中的第i個(gè)元素,則:

      (p--)與a[i--] 等價(jià):先執(zhí)行*p,然后p自減;(++p)與a[++i] 等價(jià):先執(zhí)行p自加,再執(zhí)行*p;(--p)與a[--p] 等價(jià):先執(zhí)行p自減,再執(zhí)行*p。

      8.6 指向多維數(shù)組:

      定義一個(gè)二維數(shù)組:a[3][4];定義一個(gè)指針變量:(*p)[4];(注意:列數(shù)相同(第二維相同))使指針變量指向數(shù)組:p = a;此時(shí): p與a等價(jià):指向數(shù)組a[3][4]的第0行首地址;

      p+1與a+1等價(jià):指向數(shù)組a[3][4]的第1行首地址; p+2與a+2等價(jià):指向數(shù)組a[3][4]的第2行首地址;

      而:

      *(p+1)+3與& a[1][3]等價(jià),指向a[1][3]的地址;

      *(*(p+1)+3)與a[1][3]等價(jià),表示a[1][3]的值; 一般的:對(duì)于數(shù)組a[i][j]來講,有

      *(p+i)+j相當(dāng)于&a[i][j],表示第i行第j列元素的地址; *(*(p+i)+j)相當(dāng)于a[i][j],表示第i行第j列元素的值。

      8.7 指向結(jié)構(gòu)體:

      如果指針p指向結(jié)構(gòu)體數(shù)組msg1[0]的首地址,則:

      (1)(*p).flg與p->flg和msg1[0].flg三者完全等價(jià),即(*p).成員名 與p->成員名 以及 結(jié)構(gòu)體數(shù)組元素成員名三種形式是等價(jià)的;

      (2)p+1:使指針指向結(jié)構(gòu)數(shù)組msg1[0]的下一個(gè)元素msg1[1]的首地址;(3)由于指向運(yùn)算符->的優(yōu)先級(jí)高于自加運(yùn)算符++,則:

      (++p)->flg:先使p自加1指向msg1[1]的地址,再指向msg1[1]的flg成員值;(p++)->flg:先得到msg1[0].flg的值,再使p自加1指向msg1[1]的首地址;

      p->flg++:先得到msg1[0].flg的值,使用完后再使msg1[0].flg的值加1; ++p->flg:先將msg1[0].flg的值加1,再使用。

      第三篇:單片機(jī)C語言學(xué)習(xí)心得

      8、指針的使用

      8.1 在定義的時(shí)候,*ap中的‘*’是指針類型說明符;

      在進(jìn)行指針預(yù)算時(shí),x = *ap 中的‘*’是指針運(yùn)算符。

      8.2 如果在已定義好的指針變量,并引用,即

      int *ap, int a;

      ap = &a;

      則在進(jìn)行指針運(yùn)算的時(shí)候:

      (1)*ap與a是等價(jià)的,即 *ap就是a;

      (2)&*ap:由于*ap與a等價(jià),則&*ap與&a等價(jià)(地址);

      (3)*&a:由于&a = ap,則*&a與*ap等價(jià),即*&a與a等價(jià)(變量);

      (4)*ap++相當(dāng)于a++。

      8.3 指向數(shù)組的指針變量的定義,應(yīng)用,賦值:

      int a[10];int *app;

      則有兩種方法:app = &a[0];或 app = &a;

      (1)app+I 或a+i就是數(shù)組元素a[i]的地址;

      (2)*(app+i)或 *(a+i)就是元素a[i]中的內(nèi)容;

      (3)指針變量也可以帶下表,即app[i]與*(app+i)等價(jià)。

      8.4 數(shù)組和指針可以互換,但在代碼執(zhí)行的效率上卻大不相同。用數(shù)組找元素必須每次計(jì)算

      元素的地址,效率不高;而用指針則直接指向某個(gè)元素,不必每次計(jì)算地址,可以大大的提高運(yùn)算效率。

      8.5 關(guān)于指針的運(yùn)算:

      (1)p++(或p+=1):使指針p指向下一個(gè)數(shù)組元素,地址加1;

      (2)*p++:先得到p指向的變量值,再執(zhí)行p加1,指向下一個(gè)數(shù)組元素;

      (3)*++p:先使p加1,指向下一個(gè)數(shù)組元素,再去p指向的變量值;

      (4)(*p)++:表示p指向的變量值加1;

      (5)若p指向當(dāng)前數(shù)組中的第i個(gè)元素,則:

      (p--)與a[i--] 等價(jià):先執(zhí)行*p,然后p自減;

      (++p)與a[++i] 等價(jià):先執(zhí)行p自加,再執(zhí)行*p;

      (--p)與a[--p] 等價(jià):先執(zhí)行p自減,再執(zhí)行*p。

      8.6 指向多維數(shù)組:

      定義一個(gè)二維數(shù)組:a[3][4];定義一個(gè)指針變量:(*p)[4];(注意:列數(shù)相同(第二維相同))

      使指針變量指向數(shù)組:p = a;

      此時(shí): p與a等價(jià):指向數(shù)組a[3][4]的第0行首地址;

      p+1與a+1等價(jià):指向數(shù)組a[3][4]的第1行首地址;

      p+2與a+2等價(jià):指向數(shù)組a[3][4]的第2行首地址;

      而:*(p+1)+3與& a[1][3]等價(jià),指向a[1][3]的地址;*(*(p+1)+3)與a[1][3]等價(jià),表示a[1][3]的值; 一般的:對(duì)于數(shù)組a[i][j]來講,有*(p+i)+j相當(dāng)于&a[i][j],表示第i行第j列元素的地址; *(*(p+i)+j)相當(dāng)于a[i][j],表示第i行第j列元素的值。

      8.7 指向結(jié)構(gòu)體:

      如果指針p指向結(jié)構(gòu)體數(shù)組msg1[0]的首地址,則:

      (1)(*p).flg與p->flg和msg1[0].flg三者完全等價(jià),即(*p).成員名 與p->成員名 以及 結(jié)

      構(gòu)體數(shù)組元素成員名三種形式是等價(jià)的;

      (2)p+1:使指針指向結(jié)構(gòu)數(shù)組msg1[0]的下一個(gè)元素msg1[1]的首地址;

      (3)由于指向運(yùn)算符->的優(yōu)先級(jí)高于自加運(yùn)算符++,則:

      (++p)->flg:先使p自加1指向msg1[1]的地址,再指向msg1[1]的flg成員值;(p++)->flg:先得到msg1[0].flg的值,再使p自加1指向msg1[1]的首地址; p->flg++:先得到msg1[0].flg的值,使用完后再使msg1[0].flg的值加1; ++p->flg:先將msg1[0].flg的值加1,再使用。

      第四篇:單片機(jī)C語言學(xué)習(xí)

      單片機(jī)C語言之一___________________________________________________________________ _____________________ 預(yù)處理 一》宏定義:

      1、不帶參數(shù):

      #define 標(biāo)識(shí)符 常量表達(dá)式

      /*#define是宏定義命令,宏名(標(biāo)識(shí)符)好習(xí)慣用大寫*/ #define NIL 0x80

      2、帶參數(shù):/*相當(dāng)于小函數(shù)*/ #define 宏名(參數(shù)表)字符串

      /*不僅要時(shí)行字任串替換還要進(jìn)行參數(shù)的替換,在宏定義時(shí),宏名與帶參數(shù)的括弧之間不應(yīng)該加空格,否則將空格以后的字符串都作為替代字符串的一部分,這可是很容易出錯(cuò)的*/ 如:#define SQ(a,b)a*b 使用:x=12;y=10;area=SQ(x,y);/*則area=12*10=120*/ 二》文件包含:

      #include <文件名>或#include “文件名” /*在C中用雙引用形式更保險(xiǎn),在C51中常用物是尖括弧形式*/ 三》條件編譯:

      /*一般源程序中的所有程序行都參加編譯,但有時(shí)希望對(duì)其中一部分內(nèi)容只在滿足一定條件下才進(jìn)行編譯,也就是對(duì)一部分內(nèi)容指定編譯的條件。*/ #if、#elif、#else、#endif、#ifdef、#ifndef /*選擇不同的編譯范圍,產(chǎn)生不同的代碼,提供通用性。*/ /*如對(duì)8051在6MHZ與12MHZ下有*/ #ifdef cpu==8051 #define FREQ 6 /*程序段*/ #else #define FREQ 12/*程序段*/ #endif /*這樣下面的原程序不用做任何修改便可以使用于兩種時(shí)鐘頻率的單片機(jī)系統(tǒng)*/ 四》其他:

      1、#error:捕捉不可預(yù)料的編譯條件

      #if(myv!=0&&myv!=1)/*假定其值必為0或1*/ #error myv must be 1 or 0/*出錯(cuò)時(shí)顯示*/ #endif

      2、#pragma:用于在程序中向編譯器傳送各種編譯控制命令 #pragma 編譯命令序列

      /*例:想按如下命令編譯ex.c c51 ex.c debug cod large可用:*/

      #pragma DB CD LA #pragma disable /*禁止中斷*/

      單片機(jī)C語言之二_____________________________________________________________________________________ 一》數(shù)據(jù)類型:

      char int long 1:unsinged 0~255 0~65535 0~4294967295 2:signed-128~127-32768~32767-2147483648~2147483647 指針:* 3字節(jié) 位標(biāo)量: sbit 特殊功能寄存器:sfr 16位特殊功能寄存器:sfr16 占2個(gè)內(nèi)存單元,0~65535 可尋址位:sbit利用他可訪問51單片機(jī)的內(nèi)部RAM中的可尋址位或特殊功能寄存器中的可尋址位 sfr P0=0x80;sbit P0_1=P0^1;/*將P0口的口地址定義為80H,將P0.1位定義為P1_1*/ 二》數(shù)據(jù)存貯類型

      表1.C51數(shù)據(jù)存貯類型

      ━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━ 數(shù)據(jù)存貯類型 ┃ 與存貯空間的對(duì)應(yīng)關(guān)系

      ━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━ data ┃ 直接尋址片內(nèi)數(shù)據(jù)存貯區(qū),訪速度快 bdata ┃ 可位尋址片內(nèi)數(shù)據(jù)存貯區(qū),允許位與字節(jié)混合訪問 idata ┃ 間接尋址片內(nèi)數(shù)據(jù)存貯區(qū),可訪問片內(nèi)全部RAM地址空間

      pdata ┃ 分頁尋址片外數(shù)據(jù)存貯區(qū)(256字節(jié))由MOVX @R0訪問 xdata ┃ 片外數(shù)據(jù)存貯區(qū)(64K),由MOVX @DPTR訪問 code ┃ 代碼存貯區(qū)(64K),由MOVC @DPTR訪問

      ━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━ 變量的存貯類型定義: char data var /*字符變量var被定義為data存貯類型,C51編譯器將把該變量定位在51單片機(jī)片內(nèi)數(shù)據(jù)區(qū)存貯區(qū)中*/ bit bdata flag /*位變量flag被定義為bdata存貯類型,C51編譯器將把該變量定位在51單片機(jī)片內(nèi)數(shù)據(jù)區(qū)存貯區(qū)(RAM)中的位尋址區(qū):20H--2FH*/

      三》typedef:重新定義數(shù)據(jù)類型

      typedef 已有數(shù)據(jù)類型 新的數(shù)據(jù)類型 typedef int word;/*將word定義為整型*/ word i,j;/*將i,j定義為整型*/ 四》位運(yùn)算符:

      ━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━━━┳━━━━━━ ~ ┃ & ┃ | ┃ ^ ┃ << ┃ >> ━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━━━━╋━━━━━━

      按位取反┃ 按位與 ┃ 按位或 ┃ 按位異或 ┃ 左移 ┃ 右移

      ━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━━━━┻━━━━━━

      對(duì)移位:如<< ,a<<2,即為將二進(jìn)制的a左移兩位,若a=0x8f,即10001111,a=a<<2,將導(dǎo)致a=0x3c(00111100),右邊補(bǔ)零。五》條件運(yùn)算符:

      邏輯表達(dá)式? 表達(dá)式1:表達(dá)式2 六》指針與地址運(yùn)算符: *取內(nèi)容 &取地址

      七》強(qiáng)制類型轉(zhuǎn)換:(類型)=表達(dá)式(char *)0xb000 八》sizeof 取數(shù)據(jù)類型、變量以及表達(dá)式的字節(jié)數(shù)的運(yùn)算符; 九》continue:中斷語句:結(jié)束本次循環(huán)。

      單片機(jī)C語言之三_____________________________________________________________________________________ 函數(shù):

      一》中斷服務(wù)函數(shù)與寄存器組定義:

      函數(shù)類型 函數(shù)名(形式參數(shù)表)[interrupt n][using n] n為中斷號(hào),0~31:

      ━━━━┳━━━━━┳━━━━━ 中斷編號(hào)┃ 中斷向量┃ 入口地址 ━━━━╋━━━━━╋━━━━━ 0 ┃ 外中斷0 ┃ 0003H ━━━━╋━━━━━╋━━━━━ 1 ┃ 定時(shí)器0 ┃ 000BH ━━━━╋━━━━━╋━━━━━ 2 ┃ 外中斷1 ┃ 0013H

      ━━━━╋━━━━━╋━━━━━ 3 ┃ 定時(shí)器1 ┃ 001BH ━━━━╋━━━━━╋━━━━━ 4 ┃ 串行口 ┃ 0023H ━━━━┻━━━━━┻━━━━━

      后面的n指的是四個(gè)工作寄存器組的一個(gè):0~3 對(duì)函數(shù)目標(biāo)代碼影響如下:

      在函數(shù)入口處將當(dāng)前工作寄存器組保護(hù)到堆棧中;指定的工作寄存器內(nèi)容不會(huì)改變,函數(shù)返回前將被保護(hù)的工作寄存器組從堆棧中恢復(fù)!例(定時(shí)1ms):

      #include sbit P1_0=P1^0;void timer0(void)interrupt 1 using 1{ P1_0=!P1_0;TH0=-(1000/256);TL0=-(1000%256);} main(){ SP=0x60;P1_0=0;TMOD=0X01;TH0=-(1000/256);TL0=-(1000%256);EA=1;ET0=1;TR0=1;do{}while(1);} /* 注意:

      1、如果中斷函數(shù)中用到浮點(diǎn)運(yùn)算,必須保存浮點(diǎn)寄存器的狀態(tài)。(在math.h中保存浮點(diǎn)寄存器函數(shù)為pfsave, 恢復(fù)浮點(diǎn)寄存器的狀態(tài)函數(shù)為fprestore)

      2、如果在中斷函數(shù)中調(diào)用了其他函數(shù),則被調(diào)函數(shù)所使用的工作寄存器組與中斷函數(shù)的一致!*/

      單片機(jī)C語言之四_____________________________________________________________________________________

      一、局部變量與全局變量(外部變量):

      1、全局變量若不在開頭定義則加extern

      2、全局變量會(huì)使代碼長,占用內(nèi)存多

      二、存儲(chǔ)方式:

      自動(dòng)變量(auto):缺省,函數(shù)調(diào)用存在,退出消失。

      內(nèi)部變量 靜態(tài)變量(static):static int a=5;始終存在,退出不消失,但不能訪問。寄存器變量(register):速度最快。通常只給編譯器一個(gè)建議,由編譯器根 據(jù)實(shí)際情況確定。(見下)變量 全局變量(global): 外部變量

      靜態(tài)變量(static): 寄存器變量例: #include int_power(m,e)int m;register int e;{ register int temp;temp=1;for(;e;e--)temp*=m;return(temp);} main(){ ?? }

      三、函數(shù)的參數(shù)和局部變量的存儲(chǔ)器模式: 三種存儲(chǔ)器模式:small,compact,large.一個(gè)函數(shù)的存儲(chǔ)器模式確定了函數(shù)的參數(shù)和局部變量在內(nèi)存中的地址空間 small:內(nèi)部ram compact, large:外部RAM 函數(shù)類型 函數(shù)名(形式參數(shù)表)[存儲(chǔ)器模式] 例:

      #pragma large /*默認(rèn)存儲(chǔ)器模式為large*/ extern int calc(char I,int b)small;/*指定small模式*/ extern int func(int I,float f)large;/*指定large模式*/ int large_te(int I,int k)/*未指定,按默認(rèn)的large模式處理*/ { return(mtest(I,k)+2);}

      利用存儲(chǔ)器混合模式編程,充分利用有限的存儲(chǔ)空間,還可加快程序的執(zhí)行速度!

      單片機(jī)C語言之五_____________________________________________________________________________________ 數(shù)組 1>初始化數(shù)組: unsigned char a[5]={0x11,0x22,0x33,0x44,0x55} 或

      unsigned char a[ ] ={0x11,0x22,0x33,0x44,0x55,0x66} 3>數(shù)組作為函數(shù)的參數(shù):不但可以由變量作為函數(shù)的參數(shù)外,還可以用數(shù)組名作為函數(shù)的參數(shù)。一個(gè)數(shù)組數(shù)組名表示該數(shù)組的首地址。用一個(gè)數(shù)組名作為函數(shù)的參數(shù)時(shí),在執(zhí)行函數(shù)調(diào)用的過程中參數(shù)傳遞方式采用的是地址傳遞。將實(shí)際參數(shù)數(shù)組首地址傳遞給被調(diào)函數(shù)中的形式參數(shù)數(shù)組,這樣一來兩個(gè)數(shù)組就占有同一段內(nèi)存單元。見下圖:

      a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 起始地址1000 b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8] b[9] 用數(shù)組名作為函數(shù)的參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)函數(shù)中分別進(jìn)行數(shù)組定義而不能只在一方定義數(shù)組。而且在兩個(gè)函數(shù)中定義的數(shù)組類型必須一致,如果類型不一致將導(dǎo)致編譯出錯(cuò)。實(shí)參數(shù)組和型參數(shù)組的長度可以一致可以不一致,編譯器對(duì)形參數(shù)組的長度不做檢查,直只是將實(shí)參數(shù)組的首地址傳遞給行參數(shù)組。如果希望行參數(shù)組能得到實(shí)參數(shù)組的全部元素,則應(yīng)使兩個(gè)數(shù)組的長度一致。定義型參數(shù)組時(shí)可以不指定長度,只在數(shù)組名后面跟一個(gè)方括號(hào)[]。這時(shí)為了在被調(diào)函數(shù)中處理數(shù)組元素的需要,應(yīng)另外設(shè)置一個(gè)參數(shù)來傳遞數(shù)組元素的個(gè)數(shù)。

      例:用數(shù)組作為函數(shù)的參數(shù),計(jì)算兩個(gè)不同長度的數(shù)組中所有元素的平均值 #include float average(array,n)int n;float array[ ];{ int I;float aver,sum=array[0];for(I=1;I

      float pot_1[2]={99.9,88.8};float pot_2[3]={11,22,33.3};average(pot_1,2);average(pot_1,3);}

      單片機(jī)C語言之六_____________________________________________________________________________________ 軟件法去干擾:

      工程上我們?cè)诓杉瘮?shù)據(jù)時(shí)一般要求精度達(dá)到5%%,大于這個(gè)值將認(rèn)為無效。我在實(shí)際應(yīng)用中采用8535對(duì)32路數(shù)據(jù)進(jìn)行采集(8535帶10位AD,帶看門狗),發(fā)現(xiàn)數(shù)據(jù)跳動(dòng)有時(shí)達(dá)7%%,這是由于各種干擾造成的。主要來自于隨機(jī)干擾,下面就各種干擾的方法給出簡單的去除方法:

      1、白噪聲:最重要的統(tǒng)計(jì)特性為平均值為0,可采取每路數(shù)據(jù)采集幾次求平均的方法;

      2、隨機(jī)干擾:該點(diǎn)明顯高于或低于附近正常采樣值,故采取中值濾波法,即對(duì)被測信號(hào)連續(xù)采樣M次,進(jìn)行大小排序,取大小居中的1/3個(gè)采樣值進(jìn)行算術(shù)平均;

      3、電源干擾:特點(diǎn)是有固定周期,故可采用定時(shí)采樣求平均的方法。

      由于各種排序與求平均算法用C易于實(shí)現(xiàn),故C常常用于采集系統(tǒng)中軟件去干擾。至于排序算法可參考上一篇文章,有一個(gè)經(jīng)典的程序。

      在實(shí)際中我們采用每路猜9個(gè)值,排序,取中間3個(gè),求平均。然后。,每路數(shù)據(jù)幾乎不動(dòng)!

      單片機(jī)C語言之七_(dá)____________________________________________________________________________________ 指針:可對(duì)內(nèi)存地址直接操作

      基于存貯器的指以貯器類為參量,它在編譯時(shí)才被確定。因此為指針選擇存貯器的方法可以省掉,以這些指針的長度可為1個(gè)字節(jié)(idata *,data *,pdata *)或2個(gè)這節(jié)(code *,xdata *)。char xdata *address;ADC0809具有8個(gè)模擬量輸入通道,采用中斷方式,在中斷函數(shù)中讀取8個(gè)通道的A/D轉(zhuǎn)換值,分別存儲(chǔ)在外部RAM的1000H~1007H單元。ADC0809端口地址為00F0H。

      程序定義了兩個(gè)指針變量* ADC和* ADCdata,分別指向ADC0809端口地址(00F0H)和外部RAM單元地址(1000H~1007H)

      由*ADC=I送入通道數(shù),啟動(dòng)ADC0809進(jìn)行A/D轉(zhuǎn)換,轉(zhuǎn)換結(jié)束時(shí)產(chǎn)生INT1中斷。在中斷服務(wù)函數(shù)int1()中通過temp=*ADC和*ADCdata=temp;讀取A/D轉(zhuǎn)換結(jié)果并存到外部RAM中。#include unsigned int xdata *ADC;/*定義ADC0809端口指針*/ unsigned int xdata *ADCdata;/*定義ADC0809數(shù)據(jù)緩沖器指針*/ unsigned char I;

      void main(){ ADC=0x00f0;/*定義端口地址和數(shù)據(jù)緩沖器地址*/ ADCdata=0x1000;I=8;/* ADC0809有8個(gè)模擬輸入通道*/ EA=1;EX1=1;IT1=1;/*開中斷*/ *ADC=I;/*啟動(dòng)ADC0809*/ WHILE(I);/*等待8個(gè)通道A/D轉(zhuǎn)換完*/ } void int1()interrupt 2 { unsigned char tmp;temp=*ADC;/*讀取A/D轉(zhuǎn)換結(jié)果*/ *ADCdata=temp;/*結(jié)果值存到數(shù)據(jù)緩沖區(qū)*/ ADCdata++;/*數(shù)據(jù)緩沖區(qū)地址加1*/ i—;*ADC=I;/*啟動(dòng)下一個(gè)模擬輸入通道A/D轉(zhuǎn)換*/ } 除了用指針變量來實(shí)現(xiàn)對(duì)內(nèi)存地址的直接操作外,c51編譯器還提供一組宏,該宏定義文件為:“absacc.h”,利用它可十分方便地實(shí)現(xiàn)對(duì)任何內(nèi)存空間的直接操作,改寫上面的程序: #include #include /*包含絕對(duì)地址操作預(yù)定義頭文件*/ #define ADC 0x00f0;/*定義ADC0809端口地址*/ #define ADCdata 0X1000 /*定義數(shù)據(jù)緩沖器地址*/ unsigned char I;void main(){ I=8;/ *ADC0809有8個(gè)模擬輸入通道*/ EA=1;ex1=1;it1=1;/ *開中斷*/ XBYTE[ADC]=I;/*啟動(dòng)0809 */ While(i);/*等待8個(gè)通道轉(zhuǎn)換完畢*/ } void int1()interrupt2 { unsigned char tmp;tmp=XBYTE[ADC];/*讀取A/D轉(zhuǎn)換結(jié)果*/ i--;XBYTE[ADCdata+I]=tmp;/**結(jié)果值存儲(chǔ)到數(shù)據(jù)緩沖器*/ XBYTE[ADC]=I;/*啟動(dòng)下一個(gè)模擬輸入通道A/D轉(zhuǎn)換*/ } 兩指針相減-----計(jì)算字符串的長度 #include main(){

      char *s=”abcdef”;int strlen(char *s);printf(“n length of ‘%%s’=%%dn”,s,strlen(s));} int strlen(char *s){ char *p=s;while(*p!=’