第1章單片機的C語言編程_2015要點
1-* 第 1 章 結束!謝 謝! * * 1-* 三、對存儲器和外接I/O口的絕對地址訪問 例: #include #define com XBYTE[0x07ff] 那么后面程序com變量出現的地方,就是對地址為07ffH的外部RAM或I/O口進行訪問。 使用中要注意:程序一定要包含absacc.h; XBYTE 、XWORD 必須大寫。 例: #include XWORD[0x4000]=0x9988; 即將9988H送入外部RAM的4000H和4001H單元。 com =0x56; //(0x07ff) 0x56 或 XBYTE[0x07ff] = 0x56 1-* (2)對外部I/O口的訪問 由于單片機的I/O口和外部RAM統一編址,因此對I/O口地址的字節訪問可用XBYTE (MOVX @DPTR ) 或PBYTE (MOVX @Ri)進行。 #include ----常用 #define AD_PORT XBYTE[0xefff] AD_PORT=0x10; ----------------------------------------------- XBYTE[0xefff]=0x10;-----很少用 指針、絕對地址訪問的使用場合? 例: 將10H輸出到端口地址為EFFFH的A/D芯片。 1-* 1.5 C51的運算符 3. C51的關系運算符有六種: <(小于); >(大于); <= (小于等于); >= (大于等于); ==(相等);!= (不相等) 優先級:前四個高,后二個“==”和“!=”級別低。 1.賦值運算符:= 將“=”的右邊的值賦值給左邊的變量。 如:x=6; 2. C51的算術運算符: +(加或正號);-(減或負號);* (乘號); / (除號); % (求余) 優先級為:先乘除,后加減; 先括號內,再括號外。 1-* &&(邏輯與); ||(邏輯或); !(邏輯非); 邏輯表達式和關系表達式的值相同: 0--假,1--真。 1.5 C51的運算符 例1 a=0xf0; 執行a=~a; 例2 a=0x20;執行a=a<<2; 以上幾種運算的優先級: 4.C51的邏輯運算符 有三種: !(非) 關系運算 &&和|| =(賦值運算) 算術運算 5.C51的按位操作的運算符 有六種 &(按位與); |(按位或); ^ (按位異或); ~ (位取反); <>(位右移 ) (注:補零移位) a=0x0F a=0x80,移位補0 1-* 1.5 C51的運算符 6. ? 自增、自減運算符: ++i,--i (在使用i之前,先使i值加1,減1) i++,i-- (在使用i之后,再使i值加1.,減1) 1-* 1.5 C51的運算符 例 a=&b; 取b變量的地址送變量a c=*a; 將以a為地址的單元的內容送c 7.對指針操作的運算符: &—取地址運算 *—間址運算符 (a) c 1-* 1.6 函數 1、函數的分類 從用戶使用角度劃分,函數分為庫函數和用戶自定義函數。 庫函數是編譯系統提供的一系列標準函數(見本書附錄二),用戶只需調用,而無需自己去編寫這些復雜的函數; 如 頭文件reg51.h、absacc.h、stdio.h、math.h等文件中包括一系列函數; 使用其中的函數,必須先使用#include包含語句,然后才能調用。 標準(ANSI)C中的scanf和printf等變為對串行口操作。 1-* 1.6 函數 如果被調函數出現在主調用函數之后, 那么,在調用函數前 應對被調函數作以說明, 形式為: 返回值類型 被調函數名(形參); 用戶自定義函數是用戶根據任務編寫的函數 2、函數的調用說明 1-* 1.7 C語言編程實例 1、順序程序的設計 例1 編程實現兩個無符號的整數相乘,乘積存放在外部數據存儲器4000H開始的單元。 分析:兩個無符號的整數相乘,其積為4個字節,采用unsigned long類型, 1-* 1.7 C語言編程實例 main() { unsigned int a,b; unsigned long c; unsigned long xdata *p; p=0x4000; c=a*b;