




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2021-8-3 1 第第1010章章 80C5180C51的的C C語言程序設(shè)計語言程序設(shè)計 單片機單片機C語言概述語言概述10.1 C51的的數(shù)據(jù)類型數(shù)據(jù)類型與運算與運算10.2 C51流程流程控制語句控制語句 10.3 C51的的指針類型指針類型10.4 C51的的函數(shù)函數(shù)10.5 C51編程編程實例實例10.6 2021-8-3 2 10.1 單片機單片機C語言概述語言概述 10.1.1 C5110.1.1 C51程序開發(fā)過程程序開發(fā)過程 編譯器能自動完成變量的存儲單元的分配編譯器能自動完成變量的存儲單元的分配 對常用功能模塊和算法編制相應(yīng)的函數(shù),方便移植對常用功能模塊和算法編制相應(yīng)的
2、函數(shù),方便移植 采用采用C51C51的優(yōu)點的優(yōu)點 C C語言具有良好的可讀性、可移植性和基本的硬件操作能力語言具有良好的可讀性、可移植性和基本的硬件操作能力 。 C51C51程序開發(fā)過程程序開發(fā)過程 編寫源程序編寫源程序 建立工程,加入源程序建立工程,加入源程序 編譯生產(chǎn)目標(biāo)程序編譯生產(chǎn)目標(biāo)程序 仿真調(diào)試、寫存儲器仿真調(diào)試、寫存儲器 2021-8-3 3 2021-8-3 4 10.1.2 C5110.1.2 C51程序結(jié)構(gòu)程序結(jié)構(gòu) #include #include #include #include void void delaymsdelayms(unsigned(unsigned) )
3、; void void main(voidmain(void) ) unsigned char i unsigned char i; P1=0 x01P1=0 x01; dodo for (i=0for (i=0;i=7i=7;i+)i+) delaymsdelayms(5000)(5000); P1=P1=P1P111; if(P1=0 x0)P1=0 x01if(P1=0 x0)P1=0 x01; while(1) while(1); void void delaymsdelayms(unsigned(unsigned x) x) unsigned char j unsigned char
4、 j; while(xwhile(x-)-) for(jfor(j=0=0;j123j123;j+)j+); 2021-8-3 5 10.2.1 C5110.2.1 C51的數(shù)據(jù)類型的數(shù)據(jù)類型 10.2 C51的數(shù)據(jù)類型與運算的數(shù)據(jù)類型與運算 數(shù)據(jù)類型決定其數(shù)據(jù)類型決定其取值范圍取值范圍、占用、占用存儲器的大小存儲器的大小及可參與及可參與哪種運算。哪種運算。 數(shù)據(jù)類型數(shù)據(jù)類型長度長度(位位)取值范圍取值范圍 字符型字符型 signed char8-128127 unsigned char80255 整整 型型 signed int16-3276832767 unsigned int160655
5、35 長整型長整型 signed long32-2147488364821474883647 unsigned long3204294967295 浮點型浮點型float321.75494E-383.402823E+38 位位 型型 bit10,1 sbit10,1 訪問訪問SFR sfr80255 sfr1616065535 2021-8-3 6 盡可能采用無符號格式盡可能采用無符號格式 bitbit用于定義位變量的名字,編譯器會對其分用于定義位變量的名字,編譯器會對其分 配地址(配地址(RAMRAM的的20H20H2FH 2FH 區(qū)域區(qū)域) sbitsbit用于定義位變量的名字和地址,地址
6、是確用于定義位變量的名字和地址,地址是確 定的且不用編譯器分配(定的且不用編譯器分配(SFRSFR及及RAMRAM的的20H20H2FH 2FH 區(qū)區(qū) 域域) C51C51編譯器在編譯時會自動進行類型轉(zhuǎn)換編譯器在編譯時會自動進行類型轉(zhuǎn)換 幾點說明:幾點說明: 2021-8-3 7 10.2.2 C5110.2.2 C51數(shù)據(jù)的存儲類型數(shù)據(jù)的存儲類型 C51C51的存儲的存儲器器類型類型 存儲器類型存儲器類型長度(位)長度(位)對應(yīng)單片機存儲器對應(yīng)單片機存儲器 bdata1 片內(nèi)片內(nèi) RAM 位尋址區(qū),共位尋址區(qū),共128位。(亦能字節(jié)訪問)位。(亦能字節(jié)訪問) data8直接尋址,共直接尋址,
7、共128字節(jié)。字節(jié)。 idata8間接尋址,共間接尋址,共256字節(jié)。字節(jié)。 pdata8 片外片外 RAM 分頁間址,共分頁間址,共256字節(jié)。(字節(jié)。(MOVX Ri) xdata16間接尋址,共間接尋址,共64k字節(jié)。(字節(jié)。(MOVX DPTR) code16ROM 間接尋址,共間接尋址,共64k字節(jié)。(字節(jié)。(MOVC A, A+DPTR) 2021-8-3 8 經(jīng)常使用的變量應(yīng)該置于片內(nèi)經(jīng)常使用的變量應(yīng)該置于片內(nèi)RAMRAM中,要用中,要用bdatabdata、datadata、 idataidata來定義來定義 不經(jīng)常使用的變量或規(guī)模較大的變量應(yīng)該置于片外不經(jīng)常使用的變量或規(guī)模較
8、大的變量應(yīng)該置于片外RAMRAM中,中, 要用要用pdatapdata、xdataxdata來定義來定義 默認存儲器類型由編譯控制命令的存儲模式指令限制默認存儲器類型由編譯控制命令的存儲模式指令限制 存儲模式存儲模式 默認默認 存儲類型存儲類型 特特 點點 SMALL data小模式。小模式。 變量默認在片內(nèi)變量默認在片內(nèi)RAM??臻g小,速度塊??臻g小,速度塊。 COMPACTpdata緊湊模式。變量默認在片外緊湊模式。變量默認在片外RAM的頁(的頁(256字節(jié),頁號由字節(jié),頁號由P2口決定)??跊Q定)。 LARGExdata大模式。大模式。 變量默認在片外變量默認在片外RAM的的64KB范圍
9、??臻g大,速度慢。范圍??臻g大,速度慢。 2021-8-3 9 10.2.3 80C5110.2.3 80C51硬件結(jié)構(gòu)的硬件結(jié)構(gòu)的C51C51定義定義 特殊功能寄存器的聲明特殊功能寄存器的聲明 sfrsfr 特殊功能寄存器名特殊功能寄存器名 = = 地址常數(shù);地址常數(shù); 格式:格式: 例如:例如: sfrsfr SCON = 0 x90 SCON = 0 x90; sfrsfr P0 = 0 x80 P0 = 0 x80; 2021-8-3 10 特殊功能寄存器中特殊功能寄存器中特定位特定位的聲明的聲明 sbitsbit 位變量名位變量名= =特殊功能寄存器名特殊功能寄存器名 位的位置(位的
10、位置(0 07 7) 例如:例如: sfrsfr PSW=0 xD0 PSW=0 xD0; sbitsbit OV=PSW2 OV=PSW2; sbitsbit 位變量名位變量名 = = 字節(jié)地址字節(jié)地址 位的位置(位的位置(0 07 7) 例如:例如: sbitsbit OV=0 xD02 OV=0 xD02; sbitsbit CY=0 xD07 CY=0 xD07; sbitsbit 位變量名位變量名 = = 位地址位地址 例如:例如: sbitsbit OV=0 xD2 OV=0 xD2; sbitsbit CY=0 xD7 CY=0 xD7; 2021-8-3 11 內(nèi)部內(nèi)部RAMR
11、AM中可位尋址對象的定義中可位尋址對象的定義 先先定義變量的數(shù)據(jù)類型和存儲類型定義變量的數(shù)據(jù)類型和存儲類型 例如:例如: intint bdatabdata ibaseibase; char char bdatabdata array4 array4; 再再利用利用sbitsbit進行聲明進行聲明 例如:例如: sbitsbit mybit0 = ibase0 mybit0 = ibase0; sbitsbit mybit15 = ibase15 mybit15 = ibase15; sbitsbit ary07 = array07 ary07 = array07; 訪問示例:訪問示例: ib
12、aseibase = -1 = -1; array2 = aarray2 = a; 2021-8-3 12 算術(shù)運算符和算術(shù)表達式算術(shù)運算符和算術(shù)表達式 10.2.4 C5110.2.4 C51的運算符和表達式的運算符和表達式 基本算術(shù)運算符基本算術(shù)運算符 例如:例如: + + 加法運算符;加法運算符; - - 減法(取負)運算符;減法(取負)運算符; * * 乘法運算符;乘法運算符; / / 除法運算符;除法運算符; % % 取余數(shù)運算符取余數(shù)運算符。 示例:示例: 25.0/20.0=1.25 25.0/20.0=1.25 25/20=125/20=1 25%20=5 25%20=5 取負
13、運算優(yōu)先級最高。取負運算優(yōu)先級最高。 2021-8-3 13 自增、自減運算符(自增、自減運算符(僅能用于變量僅能用于變量) 例如:例如: + + 自增運算符;自增運算符; - - 自減運算符;自減運算符; 類型轉(zhuǎn)換運算符類型轉(zhuǎn)換運算符 自動轉(zhuǎn)換,順序:自動轉(zhuǎn)換,順序:bitcharintlongfloatbitcharintlongfloat 強制類型轉(zhuǎn)換,如:(強制類型轉(zhuǎn)換,如:(doubledouble)a a 2021-8-3 14 關(guān)系運算符關(guān)系運算符和和關(guān)系表達式關(guān)系表達式 關(guān)系運算符關(guān)系運算符 小于;小于; = 大于;大于; = = 大于等于;大于等于; = = = = 等于;等
14、于; != = 不等于。不等于。 關(guān)系表達式關(guān)系表達式 關(guān)系表達式的值為邏輯值:真(關(guān)系表達式的值為邏輯值:真(1 1)和假()和假(0 0) 2021-8-3 15 邏輯運算符邏輯運算符和和邏輯表達式邏輯表達式 邏輯運算符邏輯運算符 ;條件表達式條件表達式;更新表達式更新表達式 )語)語 句句 ifif語句與語句與gotogoto語句結(jié)合語句結(jié)合 當(dāng)型循環(huán)當(dāng)型循環(huán) 形式為:形式為: looploop:ifif(表達式)(表達式) 語句語句 gotogoto loop loop; 2021-8-3 23 直到型循環(huán)直到型循環(huán) 形式為:形式為: looploop: 語句語句 ifif(表達式)(
15、表達式) gotogoto loop loop; continuecontinue是一種循環(huán)中斷語句,它并不跳出循環(huán)體;是一種循環(huán)中斷語句,它并不跳出循環(huán)體; breakbreak語句只能跳出它所處的那一層循環(huán);語句只能跳出它所處的那一層循環(huán); gotogoto語句可以用于跳出多重循環(huán)(從內(nèi)層到外層)。語句可以用于跳出多重循環(huán)(從內(nèi)層到外層)。 注意:注意: 2021-8-3 24 10.4 C51的指針類型的指針類型 有一個變量有一個變量a a,利用,利用 void delay(void) int a = 5000; while(a - - )_nop_( ); void int_srv(v
16、oid)interrupt 0 delay( ); if(INT0 = =0)P10 = ! P10;while(INT0 = =0); void mainvoid main()() P10 = 0 P10 = 0; EA = 1EA = 1; EX0 = 1EX0 = 1; whilewhile(1 1);); 2021-8-3 33 定時計數(shù)器編程示例定時計數(shù)器編程示例 【例例10-210-2】 利用定時利用定時/ /計數(shù)器計數(shù)器T0T0的方式的方式1 1,產(chǎn)生,產(chǎn)生10ms10ms的定時,的定時, 并使并使P1.0P1.0引腳上輸出周期為引腳上輸出周期為20ms20ms的方波,采用中斷方
17、式,設(shè)系的方波,采用中斷方式,設(shè)系 統(tǒng)時鐘頻率為統(tǒng)時鐘頻率為12 MHz12 MHz。 1 1、計算計數(shù)初值、計算計數(shù)初值X X: N Nt/ t/ TcyTcy 101010-3/110-3/110-610-61000010000 計數(shù)器初值應(yīng)為計數(shù)器初值應(yīng)為-10000-10000。即應(yīng)將。即應(yīng)將 - -(10000/25610000/256)送入)送入TH0TH0 中,中,- -(10000%25610000%256)送入)送入TL0TL0中。中。 2 2、求、求T0T0的方式控制字的方式控制字TMODTMOD: M1M0=01M1M0=01,GATE=0GATE=0,C/T=0C/T=
18、0,可取方式控制字為,可取方式控制字為01H01H 3 3、程序清單(見下頁)、程序清單(見下頁) 2021-8-3 34 #include “reg51.h”#include “reg51.h” sbitsbit P10 = P10 P10 = P10; void timer0(void)interrupt void timer0(void)interrupt 1 1 P10 = ! P10 P10 = ! P10; TH0 = -TH0 = -(10000/25610000/256);); TL0 = -TL0 = -(10000%25610000%256);); void mainvoi
19、d main(voidvoid) TMOD = 0 x01TMOD = 0 x01; P10 = 0P10 = 0; TH0 = -TH0 = -(10000/25610000/256);); TL0 = -TL0 = -(10000%25610000%256);); EA = 1EA = 1; ET0 = 1ET0 = 1; TR0 = 1TR0 = 1; whilewhile(1 1);); 2021-8-3 35 10.6.2 80C5110.6.2 80C51擴展資源的編程擴展資源的編程 通用并行口編程示例通用并行口編程示例 【例例10-310-3】用用81C5581C55作為微型打印
20、機與單片機間的接口電路。作為微型打印機與單片機間的接口電路。 2021-8-3 36 #include “reg51.h”#include “reg51.h” #include “#include “absacc.habsacc.h” ” / /* *含有對含有對XBYTEXBYTE等絕對地址訪問宏的定義等絕對地址訪問宏的定義* */ / #define #define ucharuchar unsigned char unsigned char #define COMD8155 XBYTE0 x7f00#define COMD8155 XBYTE0 x7f00 #define PA8155
21、XBYTE0 x7f01#define PA8155 XBYTE0 x7f01 #define PB8155 XBYTE0 x7f02#define PB8155 XBYTE0 x7f02 #define PC8155 XBYTE0 x7f03#define PC8155 XBYTE0 x7f03 sbitsbit BUSY = P33 BUSY = P33; 2021-8-3 37 uchar code tab17 = 0 xb80 xb8,0 xdf0 xdf,0 xbd0 xbd,0 xcc0 xcc,0 x200 x20, 0 xb30 xb3,0 xf60 xf6,0 xb00 xb
22、0,0 xe60 xe6,0 xc90 xc9,0 xe70 xe7,0 x200 x20, 0 x320 x32,0 x300 x30,0 x300 x30,0 x380 x38,0 x0a0 x0a ;/ /* *高教高教 出版社出版社 20082008* */ / uchar t1 = 17; void void ptrptr(ucharuchar d d) / /* *打印字符函數(shù)打印字符函數(shù)* */ / PA8155 = d PA8155 = d; PC8155 = 0 x00PC8155 = 0 x00; / /* *產(chǎn)生選通脈沖產(chǎn)生選通脈沖* */ / PC8155 = 0 x0
23、1 PC8155 = 0 x01; whilewhile(BUSYBUSY);); 2021-8-3 38 void mainvoid main(voidvoid) COMD8155 = 0 x0f COMD8155 = 0 x0f;/ /* *送命令字送命令字* */ / prtprt(0 x1c0 x1c);); / /* *送中文打印方式命令字高字節(jié)送中文打印方式命令字高字節(jié)* */ / prtprt(0 x260 x26);); / /* *送中文打印方式命令字低字節(jié)送中文打印方式命令字低字節(jié)* */ / EA = 1 EA = 1; EX1 = 1 EX1 = 1; whilewhile(1 1);); 2021-8-3 39 void int1void int1(voidvoid)interrupt 2 using 1interrupt 2 using 1 ucharuchar i i; EA = 0EA = 0; forfor(i = 0i = 0;i t1i t1;i +i +)prtprt(tabitabi );); EA = 1EA = 1; 2021-8-3 40 A/DA/D轉(zhuǎn)換接口編程示例轉(zhuǎn)換接口編程示例 【例例10-410-4】
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年B119型一氧化碳高溫變換催化劑項目發(fā)展計劃
- 2025年主令電器防雷避雷產(chǎn)品項目發(fā)展計劃
- 降水調(diào)查報告范文
- 股東變更協(xié)議-合同模板
- 2025年度稻谷國際市場開拓與推廣合同
- 二零二五年度環(huán)保型公寓正規(guī)房屋出租合同
- 二零二五年度房地產(chǎn)項目股份代持合作協(xié)議
- 2025年度物流運輸合同轉(zhuǎn)讓三方協(xié)議書
- 二零二五年度保密協(xié)議范本:資料不得外泄
- 二零二五年度商業(yè)地產(chǎn)租賃無償使用管理合同
- 《道路建筑材料緒論》課件
- 醫(yī)學(xué)遺傳學(xué)教案-山東大學(xué)醫(yī)學(xué)遺傳學(xué)
- 海南省澄邁縣2024-2025學(xué)年七年級上學(xué)期期末考試地理試題(含答案)
- 2025年湖南現(xiàn)代物流職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 第二十章手術(shù)減肥及體形塑造美容手術(shù)美容外科學(xué)概論講解
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 履帶式剪叉高空作業(yè)平臺安全操作規(guī)程
- 《水稻育秧技術(shù)新》課件
- 男科話術(shù)完整版本
- 中國心力衰竭診斷和治療指南2024解讀(完整版)
- 榆神礦區(qū)郭家灘煤礦(700 萬噸-年)項目環(huán)評
評論
0/150
提交評論