版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2025/1/15110.1單片機(jī)C語(yǔ)言概述10.1.1C51程序開(kāi)發(fā)過(guò)程編譯器能自動(dòng)完成變量的存儲(chǔ)單元的分配對(duì)常用功能模塊和算法編制相應(yīng)的函數(shù),方便移植采用C51的優(yōu)點(diǎn)C語(yǔ)言具有良好的可讀性、可移植性和基本的硬件操作能力。
C51程序開(kāi)發(fā)過(guò)程編寫(xiě)源程序建立工程,加入源程序編譯生產(chǎn)目標(biāo)程序仿真調(diào)試、寫(xiě)存儲(chǔ)器2025/1/1522025/1/15310.1.2C51的HEX文件的生成#include<reg52.h>#include<stdio.h>voiddelayms(unsigned);voidmain(void){unsignedchari;
P1=0x01;
do{ for(i=0;i<=7;i++){
delayms(5000);
P1=P1<<1;
if(P1==0x0){P1=0x01;}}}while(1);}voiddelayms(unsignedx){unsignedcharj;
while(x--){for(j=0;j<123;j++){;}}}選取芯片編譯程序把文件加入到項(xiàng)目文件組中C51的HEX文件的生成調(diào)試運(yùn)行程序項(xiàng)目選項(xiàng)窗口編譯信息窗口2025/1/15910.2.1C51的數(shù)據(jù)類(lèi)型10.2
C51的數(shù)據(jù)類(lèi)型與運(yùn)算數(shù)據(jù)類(lèi)型決定其取值范圍、占用存儲(chǔ)器的大小及可參與哪種運(yùn)算。
數(shù)據(jù)類(lèi)型長(zhǎng)度(位)取值范圍字符型signedchar8-128~127unsignedchar80~255整型signedint16-32768~32767unsignedint160~65535長(zhǎng)整型signedlong32-21474883648~21474883647unsignedlong320~4294967295浮點(diǎn)型float32±1.75494E-38~±3.402823E+38位型bit10,1sbit10,1訪(fǎng)問(wèn)SFRsfr80~255sfr16160~655352025/1/1510盡可能采用無(wú)符號(hào)格式bit用于定義位變量的名字,編譯器會(huì)對(duì)其分配地址(RAM的20H~
2FH區(qū)域)sbit用于定義位變量的名字和地址,地址是確定的且不用編譯器分配(SFR及RAM的20H~2FH區(qū)域)C51編譯器在編譯時(shí)會(huì)自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換幾點(diǎn)說(shuō)明:2025/1/151110.2.2C51數(shù)據(jù)的存儲(chǔ)類(lèi)型C51的存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型長(zhǎng)度(位)對(duì)應(yīng)單片機(jī)存儲(chǔ)器bdata1片內(nèi)RAM位尋址區(qū),共128位。(亦能字節(jié)訪(fǎng)問(wèn))data8直接尋址,共128字節(jié)。idata8間接尋址,共256字節(jié)。pdata8片外RAM分頁(yè)間址,共256字節(jié)。(MOVX@Ri)xdata16間接尋址,共64k字節(jié)。(MOVX@DPTR)code16ROM間接尋址,共64k字節(jié)。(MOVCA,@A+DPTR)2025/1/1512經(jīng)常使用的變量應(yīng)該置于片內(nèi)RAM中,要用bdata、data、idata來(lái)定義。不經(jīng)常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAM中,要用pdata、xdata來(lái)定義。默認(rèn)存儲(chǔ)器類(lèi)型由編譯控制命令的存儲(chǔ)模式指令限制。
存儲(chǔ)模式默認(rèn)存儲(chǔ)類(lèi)型特點(diǎn)SMALLdata小模式。變量默認(rèn)在片內(nèi)RAM??臻g小,速度塊。COMPACTpdata緊湊模式。變量默認(rèn)在片外RAM的頁(yè)(256字節(jié),頁(yè)號(hào)由P2口決定)。LARGExdata大模式。變量默認(rèn)在片外RAM的64KB范圍??臻g大,速度慢。2025/1/151310.2.380C51硬件結(jié)構(gòu)的C51定義特殊功能寄存器的聲明sfr
特殊功能寄存器名=地址常數(shù);格式:例如:sfrSCON=0x98;sfrP0=0x80;2025/1/1514特殊功能寄存器中特定位的聲明sbit位變量名=特殊功能寄存器名^位的位置(0~7)例如:
sfrPSW
=
0xD0;sbitOV
=
PSW^2;
sbit位變量名=字節(jié)地址^位的位置(0~7)例如:
sbitOV
=
0xD0^2;sbitCY
=
0xD0^7;
sbit位變量名=位地址
例如:
sbitOV
=
0xD2;sbitCY
=
0xD7;
2025/1/1515內(nèi)部RAM中可位尋址對(duì)象的定義先定義變量的數(shù)據(jù)類(lèi)型和存儲(chǔ)類(lèi)型例如:
intbdataibase;charbdataarray[4];
再利用sbit進(jìn)行聲明
例如:
sbitmybit0=ibase^0;
sbitmybit15=ibase^15;
sbitary07=array[0]^7;
sbitary37=array[3]^7;
訪(fǎng)問(wèn)示例:ibase=-1;array[2]=‘a(chǎn)’;array[2]=
02025/1/1516算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本算術(shù)運(yùn)算符例如:
+加法運(yùn)算符;
-減法(取負(fù))運(yùn)算符;*乘法運(yùn)算符;/除法運(yùn)算符;%取余數(shù)運(yùn)算符。
示例:25.0/20.0
=
1.2525/20
=
125%20
=
5
取負(fù)運(yùn)算優(yōu)先級(jí)最高。10.3C51的運(yùn)算符和表達(dá)式2025/1/1517自增、自減運(yùn)算符(僅能用于變量)例如:
++自增運(yùn)算符;
--自減運(yùn)算符;類(lèi)型轉(zhuǎn)換運(yùn)算符自動(dòng)轉(zhuǎn)換,順序:bit→char→int→long→float
強(qiáng)制類(lèi)型轉(zhuǎn)換,如:(double)a
2025/1/1518關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符
<小于;<=小于等于;>大于;>=大于等于;==等于;!=不等于。關(guān)系表達(dá)式關(guān)系表達(dá)式的值為邏輯值:真(1)和假(0)2025/1/1519邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符
&&邏輯與||邏輯或!邏輯非邏輯表達(dá)式邏輯表達(dá)式的值為邏輯值:真(1)和假(0)例:5||0結(jié)果為1,2&&0結(jié)果為0。2025/1/1520位運(yùn)算符&按位與|按位或^按位異或~按位取反<<左移>>右移例:P1=P1<<1表示對(duì)P1口的所有位左移1位
2025/1/1521賦值和復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符+=加法賦值;-=減法賦值;*=乘法賦值;/=除法賦值;%=取模賦值;符號(hào)“=”稱(chēng)為賦值運(yùn)算符
<<=左移位賦值;>>=右移位賦值;&=邏輯與賦值;|=邏輯或賦值;^=邏輯異或賦值;~=邏輯非賦值;
例:a*
=
5相當(dāng)于a
=
a*5;b&
=
0x80相當(dāng)于b
=
b&0x80。條件運(yùn)算符C51中有一個(gè)三目運(yùn)算符,它就是條件運(yùn)算符"?"。
邏輯表達(dá)式?表達(dá)式1:表達(dá)式2;
當(dāng)邏輯表達(dá)式的值為真時(shí)(1)時(shí),整個(gè)表達(dá)式的值為表達(dá)式1的值;當(dāng)邏輯表達(dá)式的值為假(0)時(shí),整個(gè)表達(dá)式的值為表達(dá)式2的值。min=a<b?a:b2025/1/152310.4
C51流程控制語(yǔ)句10.4.1C51選擇語(yǔ)句
條件語(yǔ)句if(條件表達(dá)式)語(yǔ)句
例如:if(p1!=0){c
=
20;}
if(條件表達(dá)式)語(yǔ)句1else語(yǔ)句2例如:if(p1!=0){c
=
20;}else{c
=
0;}
2025/1/1524if(條件表達(dá)式1)語(yǔ)句1elseif(條件表達(dá)式2)語(yǔ)句2elseif(條件表達(dá)式3)語(yǔ)句3
…
…elseif(條件表達(dá)式n)語(yǔ)句nelse語(yǔ)句n+1
2025/1/1525開(kāi)關(guān)語(yǔ)句switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;break;case常量表達(dá)式2:語(yǔ)句2;break;
…
…case常量表達(dá)式n:語(yǔ)句n;break;default:語(yǔ)句n+1;}2025/1/152610.4.2C51循環(huán)語(yǔ)句while語(yǔ)句一般形式為:
while(條件表達(dá)式)語(yǔ)句;如果條件表達(dá)式的結(jié)果一開(kāi)始就為假,則后面的語(yǔ)句一次也不能執(zhí)行。Do-while語(yǔ)句一般形式為:
do語(yǔ)句
while(條件表達(dá)式);任何條件下,循環(huán)體語(yǔ)句至少會(huì)被執(zhí)行一次。2025/1/1527for語(yǔ)句一般形式為:for([初值表達(dá)式];[條件表達(dá)式];[更新表達(dá)式])語(yǔ)句if語(yǔ)句與goto語(yǔ)句結(jié)合
當(dāng)型循環(huán)
形式為:
loop:if(表達(dá)式)
{語(yǔ)句
gotoloop;
}2025/1/1528直到型循環(huán)
形式為:
loop:{語(yǔ)句
if(表達(dá)式)gotoloop;
}continue是一種循環(huán)中斷語(yǔ)句,它并不跳出循環(huán)體;break語(yǔ)句只能跳出它所處的那一層循環(huán);goto語(yǔ)句可以用于跳出多重循環(huán)(從內(nèi)層到外層)。注意:2025/1/152910.5
C51的指針類(lèi)型有一個(gè)變量a,利用&a表示變量a的地址。則語(yǔ)句p
=
&a;把a(bǔ)的地址賦給了指針變量p,則“p指向了變量a”。
*P表示變量a的內(nèi)容指針變量的定義chardata*p/*定義指針變量*/p
=
30H/*為指針變量賦值,30H為片內(nèi)RAM地址*/x
=*p/*30H單元的內(nèi)容送給變量x*/2025/1/1530定義時(shí)未指定它所指向的對(duì)象的存儲(chǔ)器類(lèi)型
10.5.1一般指針一般指針占3個(gè)字節(jié)第一字節(jié)存放該指針的默認(rèn)存儲(chǔ)器類(lèi)型編碼(見(jiàn)表)第二字節(jié)存放該指針的高位地址偏移量第三字節(jié)存放該指針的低位地址偏移量
存儲(chǔ)器類(lèi)型編碼
存儲(chǔ)器類(lèi)型bdata/data/idataxdatapdatacode編碼0x000x010xfe0xff2025/1/1531一般指針定義示例:char*xdatastrptr;
/*指針本身存于xdata空間,它指向char型數(shù)據(jù)*/int*datanumber;/*指針本身存于data空間,它指向int型數(shù)據(jù)*/
由于指向?qū)ο蟮拇鎯?chǔ)空間在編譯時(shí)無(wú)法確定(運(yùn)行時(shí)確定),因此必須生成一般代碼以保證對(duì)任意空間的對(duì)象進(jìn)行存取。所以一般指針?biāo)a(chǎn)生的代碼速度較慢。2025/1/153210.5.2基于存儲(chǔ)器的指針定義時(shí)就指定它所指向的對(duì)象的存儲(chǔ)器類(lèi)型
指針占1個(gè)字節(jié)(idata*,data*,pdata*)或2個(gè)字節(jié)(code*,xdata*)
基于存儲(chǔ)器指針定義示例:chardata*str;
/*指針指向的char型數(shù)據(jù)存于data空間
*/intxdata*num;/*指針指向的int型數(shù)據(jù)存于xdata空間
*/
基于存儲(chǔ)器的指針長(zhǎng)度比一般指針短,可以節(jié)省存儲(chǔ)器空間,運(yùn)行速度快,但它所指對(duì)象具有確定的存儲(chǔ)器空間,兼容性不好。2025/1/153310.6
C51的函數(shù)10.6.1C51函數(shù)的定義一般形式:返回值類(lèi)型函數(shù)名(形式參數(shù)列表)[編譯模式][reentrant][interruptn][usingn]{
函數(shù)體}編譯模式為SMALL、COPACT或LARGEreentrant用于定義可重入函數(shù)interruptn用于定義中斷函數(shù),n為中斷號(hào),可以為0~31usingn確定工作寄存器組,取值為0~3
2025/1/153410.6.2C51函數(shù)的調(diào)用與參數(shù)傳遞主調(diào)函數(shù)要向被調(diào)函數(shù)傳遞所需的參數(shù)傳遞給被調(diào)函數(shù)的數(shù)據(jù)稱(chēng)為實(shí)際參數(shù),即實(shí)參實(shí)參向形參的傳遞是單向的參數(shù)傳遞可以采用寄存器、固定存儲(chǔ)器位置方式
參數(shù)傳遞寄存器參數(shù)傳遞傳遞的參數(shù)char、1字節(jié)指針int、2字節(jié)指針long、float一般指針參數(shù)1R7R6、R7R4~R7R1、R2、R3參數(shù)2R5R4、R5R4~R7R1、R2、R3參數(shù)3R3R2、R3R1、R2、R3C51中斷服務(wù)函數(shù)定義:void函數(shù)名(void)interruptn[usingm]{函數(shù)體}interrupt表示該函數(shù)是中斷服務(wù)函數(shù),n表示對(duì)應(yīng)的中斷源的編號(hào),范圍是0~31。關(guān)鍵字using用于指定使用的工作寄存器組,m的范圍是0~3.2025/1/1536SMALL模式下,在內(nèi)部RAM中完成COMPACT模式下,在外部RAM中完成LARGER模式下,在外部RAM中完成固定存儲(chǔ)器位置參數(shù)傳遞80C51單片機(jī)不采用堆棧傳遞參數(shù)。但C51提供一種模擬堆棧,從而支持可重入函數(shù)的遞歸調(diào)用。
10.6.3C51的庫(kù)函數(shù)常用的C51庫(kù)函數(shù)參見(jiàn)相關(guān)資料C51庫(kù)函數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)按功能不同寫(xiě)在各種頭文件中,使用時(shí)只要在程序最前面用#include預(yù)處理語(yǔ)句予以說(shuō)明相應(yīng)的頭文件即可。C51常用頭文件簡(jiǎn)介頭文件名說(shuō)明reg51.h51單片機(jī)的特殊寄存器reg52.h52單片機(jī)的特殊寄存器stdio.h標(biāo)準(zhǔn)輸入和輸出程序math.h數(shù)學(xué)程序absacc.h允許直接訪(fǎng)問(wèn)8051不同存儲(chǔ)區(qū)的宏定義string.h字符串操作程序、緩沖區(qū)操作程序2025/1/153810.7
C51編程實(shí)例10.7.180C51內(nèi)部資源的編程
中斷服務(wù)函數(shù)示例中斷函數(shù)的定義形式void函數(shù)名(void)interruptn[usingm]{
函數(shù)體}
中斷源外中斷0定時(shí)器0外中斷1定時(shí)器1串行口中斷號(hào)012342025/1/1539【例】單片機(jī)應(yīng)用系統(tǒng)中,外中斷0引腳接一個(gè)開(kāi)關(guān),并行口線(xiàn)P1.0接一個(gè)發(fā)光二級(jí)管。要求:開(kāi)關(guān)閉合一次,發(fā)光二極管的狀態(tài)改變一次。#include“reg51.h”#include“intrins.h”
sbitP10
=
P1^0;voiddelay(void){inta
=
5000;
while(a--)_nop_();}2025/1/1540voidint_srv(void)interrupt0{delay();if(INT0
=
=
0){P10
=
!P10;while(INT0
=
=
0);}}voidmain(){P10
=
0;
EA
=
1;
EX0
=
1;while(1);}2025/1/1541定時(shí)計(jì)數(shù)器編程示例【例】利用定時(shí)/計(jì)數(shù)器T0的方式1,產(chǎn)生10ms的定時(shí),并使P1.0引腳上輸出周期為20ms的方波,采用中斷方式,設(shè)系統(tǒng)時(shí)鐘頻率為12MHz。1、計(jì)算計(jì)數(shù)初值X:N=t/Tcy=10×10-3/1×10-6=10000計(jì)數(shù)器初值應(yīng)為-10000。即應(yīng)將-(10000/256)送入TH0中,-(10000%256)送入TL0中。
2、求T0的方式控制字TMOD:M1M0
=
01,GATE
=
0,C/T
=
0,可取方式控制字為01H。
2025/1/1542#include“reg51.h”sbitP10=P1^0;voidtimer0(void)interrupt1{P10=!P10;
TH0=-(10000/256);
TL0=-(10000%256);}2025/1/1543voidmain(void){TMOD=0x01;P10=0;TH0=
-(10000
/
256);TL0=
-(10000
%
256);EA
=
1;ET0
=
1;TR0
=
1;while(1);}2025/1/154410.7.280C51擴(kuò)展資源的編程
通用并行口編程示例
【例】用81C55作為微型打印機(jī)與單片機(jī)間的接口電路。
2025/1/1545#include“reg51.h”#include“absacc.h”
/*含有對(duì)XBYTE等絕對(duì)地址訪(fǎng)問(wèn)宏的定義*/#defineucharunsignedchar#defineCOMD8155XBYTE[0x7f00]#definePA8155XBYTE[0x7f01]#definePB8155XBYTE[0x7f02]#definePC8155XBYTE[0x7f03]sbitBUSY=P3^3;2025/1/1546ucharcodetab[17]={0xb8,0xdf,0xbd,0xcc,0x20,
0xb3,0xf6,0xb0,0xe6,0xc9,0xe7,0x20,
0x32,0x30,0x30,0x38,0x0a};/*定義代碼表*/
uchart1=17;voidptr(uchard)/*打印字符函數(shù)*/{PA8155=d;
PC8155=0x00;/*產(chǎn)生選通脈沖*/PC8
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《生物防治學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年貴州省安全員《C證》考試題庫(kù)及答案
- 2025湖北建筑安全員《C證》考試題庫(kù)
- 2025山西建筑安全員《A證》考試題庫(kù)及答案
- 硅湖職業(yè)技術(shù)學(xué)院《唐詩(shī)宋詞賞析》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽(yáng)學(xué)院《物流英語(yǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年河北建筑安全員C證(專(zhuān)職安全員)考試題庫(kù)
- 2025海南省安全員考試題庫(kù)及答案
- 2025年-黑龍江省安全員《A證》考試題庫(kù)及答案
- 2025海南建筑安全員-B證考試題庫(kù)及答案
- 駕駛員三年內(nèi)工作總結(jié)
- 廣東省深圳市羅湖區(qū)2023-2024學(xué)年二年級(jí)下學(xué)期期末考試數(shù)學(xué)試題
- 2023年第八屆“鵬程杯”六年級(jí)語(yǔ)文邀請(qǐng)賽試卷(初賽)
- 2023-2024學(xué)年成都市金牛區(qū)八年級(jí)上英語(yǔ)期末考試題(含答案)
- 更年期婦女健康管理專(zhuān)家共識(shí)1
- 青年你為什么要入團(tuán)-團(tuán)員教育主題班會(huì)-熱點(diǎn)主題班會(huì)課件
- MOOC 隧道工程-中南大學(xué) 中國(guó)大學(xué)慕課答案
- 司法鑒定工作應(yīng)急預(yù)案
- 《竹結(jié)構(gòu)建筑技術(shù)規(guī)程》
- 煤礦綜采工作面安全檢查
- 汽修廠消防培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論