C51單片機的C語言程序設(shè)計.ppt_第1頁
C51單片機的C語言程序設(shè)計.ppt_第2頁
C51單片機的C語言程序設(shè)計.ppt_第3頁
C51單片機的C語言程序設(shè)計.ppt_第4頁
C51單片機的C語言程序設(shè)計.ppt_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、2020/8/7,1,第10章 80C51的C語言程序設(shè)計,單片機C語言概述,10.1,C51的數(shù)據(jù)類型與運算,10.2,C51流程控制語句,10.3,C51的指針類型,10.4,C51的函數(shù),10.5,C51編程實例,10.6,2020/8/7,2,10.1 單片機C語言概述,10.1.1 C51程序開發(fā)過程,編譯器能自動完成變量的存儲單元的分配 對常用功能模塊和算法編制相應(yīng)的函數(shù),方便移植,采用C51的優(yōu)點,C語言具有良好的可讀性、可移植性和基本的硬件操作能力。,C51程序開發(fā)過程,編寫源程序 建立工程,加入源程序 編譯生產(chǎn)目標(biāo)程序 仿真調(diào)試、寫存儲器,2020/8/7,3,2020/8/

2、7,4,10.1.2 C51程序結(jié)構(gòu),#include #include void delayms(unsigned); void main(void) unsigned char i; P1=0 x01; do for (i=0;i=7;i+) delayms(5000); P1=P11; if(P1=0 x0)P1=0 x01; while(1); ,void delayms(unsigned x) unsigned char j; while(x-) for(j=0;j123;j+); ,2020/8/7,5,10.2.1 C51的數(shù)據(jù)類型,10.2 C51的數(shù)據(jù)類型與運算,數(shù)據(jù)類型決定

3、其取值范圍、占用存儲器的大小及可參與哪種運算。,2020/8/7,6,盡可能采用無符號格式 bit用于定義位變量的名字,編譯器會對其分配地址(RAM的20H 2FH 區(qū)域) sbit用于定義位變量的名字和地址,地址是確定的且不用編譯器分配(SFR及RAM的20H2FH 區(qū)域) C51編譯器在編譯時會自動進行類型轉(zhuǎn)換,幾點說明:,2020/8/7,7,10.2.2 C51數(shù)據(jù)的存儲類型,C51的存儲器類型,2020/8/7,8,經(jīng)常使用的變量應(yīng)該置于片內(nèi)RAM中,要用bdata、data、idata來定義。 不經(jīng)常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAM中,要用pdata、xdata來定義。

4、 默認(rèn)存儲器類型由編譯控制命令的存儲模式指令限制。,2020/8/7,9,10.2.3 80C51硬件結(jié)構(gòu)的C51定義,特殊功能寄存器的聲明,sfr 特殊功能寄存器名 = 地址常數(shù);,格式:,例如: sfr SCON = 0 x98; sfr P0 = 0 x80;,2020/8/7,10,特殊功能寄存器中特定位的聲明,sbit 位變量名=特殊功能寄存器名位的位置(07) 例如: sfr PSW = 0 xD0; sbit OV = PSW2;,sbit 位變量名 = 字節(jié)地址位的位置(07) 例如: sbit OV = 0 xD02; sbit CY = 0 xD07;,sbit 位變量名

5、= 位地址 例如: sbit OV = 0 xD2; sbit CY = 0 xD7;,2020/8/7,11,內(nèi)部RAM中可位尋址對象的定義,先定義變量的數(shù)據(jù)類型和存儲類型 例如: int bdata ibase; char bdata array4;,再利用sbit進行聲明 例如: sbit mybit0 = ibase0; sbit mybit15 = ibase15; sbit ary07 = array07; sbit ary37 = array37;,訪問示例: ibase = -1; array2 = a; array2 = 0,2020/8/7,12,算術(shù)運算符和算術(shù)表達式,1

6、0.2.4 C51的運算符和表達式,基本算術(shù)運算符 例如: + 加法運算符; - 減法(取負(fù))運算符; * 乘法運算符; / 除法運算符; % 取余數(shù)運算符。,示例: 25.0/20.0 = 1.25 25/20 = 1 25%20 = 5,取負(fù)運算優(yōu)先級最高。,2020/8/7,13,自增、自減運算符(僅能用于變量) 例如: + 自增運算符; - 自減運算符;,類型轉(zhuǎn)換運算符 自動轉(zhuǎn)換,順序:bitcharintlongfloat 強制類型轉(zhuǎn)換,如:(double)a,2020/8/7,14,關(guān)系運算符和關(guān)系表達式,關(guān)系運算符 大于; = 大于等于; = = 等于; != 不等于。,關(guān)系表達

7、式 關(guān)系表達式的值為邏輯值:真(1)和假(0),2020/8/7,15,邏輯運算符和邏輯表達式,邏輯運算符 條件表達式;更新表達式)語句,if語句與goto語句結(jié)合,當(dāng)型循環(huán) 形式為: loop:if(表達式) 語句 goto loop; ,2020/8/7,23,直到型循環(huán) 形式為: loop:語句 if(表達式) goto loop; ,continue是一種循環(huán)中斷語句,它并不跳出循環(huán)體; break語句只能跳出它所處的那一層循環(huán); goto語句可以用于跳出多重循環(huán)(從內(nèi)層到外層)。,注意:,2020/8/7,24,10.4 C51的指針類型,有一個變量a,利用 void delay(v

8、oid) int a = 5000; while(a - - )_nop_( ); ,void int_srv(void)interrupt 0 delay( ); if(INT0 = = 0)P10 = ! P10;while(INT0 = = 0); ,void main() P10 = 0; EA = 1; EX0 = 1; while(1); ,2020/8/7,33,定時計數(shù)器編程示例,【例10-2】 利用定時/計數(shù)器T0的方式1,產(chǎn)生10ms的定時,并使P1.0引腳上輸出周期為20ms的方波,采用中斷方式,設(shè)系統(tǒng)時鐘頻率為12 MHz。,1、計算計數(shù)初值X: Nt/ Tcy 101

9、0-3/110-610000 計數(shù)器初值應(yīng)為-10000。即應(yīng)將 -(10000/256)送入TH0中,-(10000%256)送入TL0中。,2、求T0的方式控制字TMOD: M1M0 = 01,GATE = 0,C/T = 0,可取方式控制字為01H。,3、程序清單(見下頁),2020/8/7,34,#include “reg51.h” sbit P10 = P10; void timer0(void)interrupt 1 P10 = ! P10; TH0 = -(10000/256); TL0 = -(10000%256); ,void main(void) TMOD = 0 x01;

10、 P10 = 0; TH0 = -(10000 / 256); TL0 = -(10000 % 256); EA = 1; ET0 = 1; TR0 = 1; while(1); ,2020/8/7,35,10.6.2 80C51擴展資源的編程,通用并行口編程示例,【例10-3】用81C55作為微型打印機與單片機間的接口電路。,2020/8/7,36,#include “reg51.h” #include “absacc.h” /*含有對XBYTE等絕對地址訪問宏的定義*/ #define uchar unsigned char #define COMD8155 XBYTE0 x7f00 #d

11、efine PA8155 XBYTE0 x7f01 #define PB8155 XBYTE0 x7f02 #define PC8155 XBYTE0 x7f03 sbit BUSY = P33;,2020/8/7,37,uchar code tab17 = 0 xb8,0 xdf,0 xbd,0 xcc,0 x20, 0 xb3,0 xf6,0 xb0,0 xe6,0 xc9,0 xe7,0 x20, 0 x32,0 x30,0 x30,0 x38,0 x0a;/*高教 出版社 2008*/ uchar t1 = 17;,void ptr(uchar d) /*打印字符函數(shù)*/ PA8155

12、 = d; PC8155 = 0 x00; /*產(chǎn)生選通脈沖*/ PC8155 = 0 x01; while(BUSY); ,2020/8/7,38,void main(void) COMD8155 = 0 x0f;/*送命令字*/ prt(0 x1c); /*送中文打印方式命令字高字節(jié)*/ prt(0 x26); /*送中文打印方式命令字低字節(jié)*/ EA = 1; EX1 = 1; while(1); ,2020/8/7,39,void int1(void)interrupt 2 using 1 uchar i; EA = 0; for(i = 0;i t1;i +)prt(tabi); EA = 1; ,2020/8/7,40,A/D轉(zhuǎn)換接口編程示例,【例10-4】 ADC0809與單片機的接口電路如圖。,2020/8/7,41,# include “reg51.h” # include “absacc.h” # define uchar unsigned char # define IN0 XBYTE0 x7ff8 sbit ad_busy = P33;,2020/8/7,42,void ad0809(uchar idata *x) uchar i; uchar xdata * ad_adr; ad_adr = & IN0; for(i =

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論