單片機C語言
發(fā)布時間:2007/9/10 0:00:00 訪問次數(shù):533
一》宏定義:
1、不帶參數(shù):
#define 標識符 常量表達式
/*#define是宏定義命令,宏名(標識符)好習慣用大寫*/
#define NIL 0x80
2、帶參數(shù):/*相當于小函數(shù)*/
#define 宏名(參數(shù)表) 字符串
/*不僅要時行字任串替換還要進行參數(shù)的替換,在宏定義時,宏名與帶參數(shù)的括弧之間不應該加空格,否則將空格以后的字符串都作為替代字符串的一部分,這可是很容易出錯的*/
如:#define SQ(a,b) a*b
使用:x=12;y=10;area=SQ(x,y);/*則area=12*10=120*/
二》文件包含:
#include <文件名>或#include "文件名"
/*在C中用雙引用形式更保險,在C51中常用物是尖括弧形式*/
三》條件編譯:
/*一般源程序中的所有程序行都參加編譯,但有時希望對其中一部分內容只在滿足一定條件下才進行編譯,也就是對一部分內容指定編譯的條件。*/
#if、#elif、 #else、#endif、#ifdef、#ifndef
/*選擇不同的編譯范圍,產(chǎn)生不同的代碼,提供通用性。*/
/*如對8051在6MHZ與12MHZ下有*/
#ifdef cpu==8051
#define FREQ 6 /*程序段*/
#else
#define FREQ 12/*程序段*/
#endif
/*這樣下面的原程序不用做任何修改便可以使用于兩種時鐘頻率的單片機系統(tǒng)*/
四》其他:
1、#error:捕捉不可預料的編譯條件
#if (myv!=0&&myv!=1)/*假定其值必為0或1*/
#error myv must be 1 or 0/*出錯時顯示*/
#endif
2、#pragma:用于在程序中向編譯器傳送各種編譯控制命令
#pragma 編譯命令序列
/*例:想按如下命令編譯ex.c c51 ex.c debug cod large可用:*/
#pragma DB CD LA
#pragma disable
/*禁止中斷*/
單片機C語言之二_____________________________________________________________________________________
一》數(shù)據(jù)類型:
char int long
1:unsinged 0~255 0~65535 0~4294967295
2:signed -128~127 -32768~32767 -2147483648~2147483647
指針:* 3字節(jié)
位標量: sbit
特殊功能寄存器:sfr
16位特殊功能寄存器:sfr16 占2個內存單元,0~65535
可尋址位:sbit利用他可訪問51單片機的內部RAM中的可尋址位或特殊功能寄存器中的可尋址位
sfr P0=0x80;
sbit P0_1=P0^1;
/*將P0口的口地址定義為80H,將P0.1位定義為P1_1*/
二》數(shù)據(jù)存貯類型
表1. C51數(shù)據(jù)存貯類型
━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━
數(shù)據(jù)存貯類型 ┃ 與存貯空間的對應關系
━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━
data ┃ 直接尋址片內數(shù)據(jù)存貯區(qū),訪速度快
bdata ┃ 可位尋址片內數(shù)據(jù)存貯區(qū),允許位與字節(jié)混合訪問
idata ┃ 間接尋址片內數(shù)據(jù)存貯區(qū),可訪問片內全部RAM地址空間
pdata ┃ 分頁尋址片外數(shù)據(jù)存貯區(qū)(256字節(jié))由MOVX @R0訪問
xdata ┃ 片外數(shù)據(jù)存貯區(qū)(64K),由MOVX @DPTR訪問
code ┃ 代
一》宏定義:
1、不帶參數(shù):
#define 標識符 常量表達式
/*#define是宏定義命令,宏名(標識符)好習慣用大寫*/
#define NIL 0x80
2、帶參數(shù):/*相當于小函數(shù)*/
#define 宏名(參數(shù)表) 字符串
/*不僅要時行字任串替換還要進行參數(shù)的替換,在宏定義時,宏名與帶參數(shù)的括弧之間不應該加空格,否則將空格以后的字符串都作為替代字符串的一部分,這可是很容易出錯的*/
如:#define SQ(a,b) a*b
使用:x=12;y=10;area=SQ(x,y);/*則area=12*10=120*/
二》文件包含:
#include <文件名>或#include "文件名"
/*在C中用雙引用形式更保險,在C51中常用物是尖括弧形式*/
三》條件編譯:
/*一般源程序中的所有程序行都參加編譯,但有時希望對其中一部分內容只在滿足一定條件下才進行編譯,也就是對一部分內容指定編譯的條件。*/
#if、#elif、 #else、#endif、#ifdef、#ifndef
/*選擇不同的編譯范圍,產(chǎn)生不同的代碼,提供通用性。*/
/*如對8051在6MHZ與12MHZ下有*/
#ifdef cpu==8051
#define FREQ 6 /*程序段*/
#else
#define FREQ 12/*程序段*/
#endif
/*這樣下面的原程序不用做任何修改便可以使用于兩種時鐘頻率的單片機系統(tǒng)*/
四》其他:
1、#error:捕捉不可預料的編譯條件
#if (myv!=0&&myv!=1)/*假定其值必為0或1*/
#error myv must be 1 or 0/*出錯時顯示*/
#endif
2、#pragma:用于在程序中向編譯器傳送各種編譯控制命令
#pragma 編譯命令序列
/*例:想按如下命令編譯ex.c c51 ex.c debug cod large可用:*/
#pragma DB CD LA
#pragma disable
/*禁止中斷*/
單片機C語言之二_____________________________________________________________________________________
一》數(shù)據(jù)類型:
char int long
1:unsinged 0~255 0~65535 0~4294967295
2:signed -128~127 -32768~32767 -2147483648~2147483647
指針:* 3字節(jié)
位標量: sbit
特殊功能寄存器:sfr
16位特殊功能寄存器:sfr16 占2個內存單元,0~65535
可尋址位:sbit利用他可訪問51單片機的內部RAM中的可尋址位或特殊功能寄存器中的可尋址位
sfr P0=0x80;
sbit P0_1=P0^1;
/*將P0口的口地址定義為80H,將P0.1位定義為P1_1*/
二》數(shù)據(jù)存貯類型
表1. C51數(shù)據(jù)存貯類型
━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━
數(shù)據(jù)存貯類型 ┃ 與存貯空間的對應關系
━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━
data ┃ 直接尋址片內數(shù)據(jù)存貯區(qū),訪速度快
bdata ┃ 可位尋址片內數(shù)據(jù)存貯區(qū),允許位與字節(jié)混合訪問
idata ┃ 間接尋址片內數(shù)據(jù)存貯區(qū),可訪問片內全部RAM地址空間
pdata ┃ 分頁尋址片外數(shù)據(jù)存貯區(qū)(256字節(jié))由MOVX @R0訪問
xdata ┃ 片外數(shù)據(jù)存貯區(qū)(64K),由MOVX @DPTR訪問
code ┃ 代