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

下載本文檔

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

文檔簡(jiǎn)介

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

2、/8/12,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/12,5,10.2.1 C51的數(shù)據(jù)類型,10.2 C51的數(shù)據(jù)類型與運(yùn)算,數(shù)

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

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

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

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

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

8、a,利用 void delay(void) 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/12,33,定時(shí)計(jì)數(shù)器編程示例,【例10-2】 利用定時(shí)/計(jì)數(shù)器T0的方式1,產(chǎn)生10ms的定時(shí),并使P1.0引腳上輸出周期為20ms的方波,采用中斷方式,設(shè)系統(tǒng)時(shí)鐘頻率為12 MHz。,1、計(jì)算

9、計(jì)數(shù)初值X: Nt/ Tcy 1010-3/110-610000 計(jì)數(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/12,34,#include “reg51.h” sbit P10 = P10; void timer0(void)interrupt 1 P10 = ! P10; TH0 = -(10000/256); TL0 = -(10000%256); ,void main(

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

11、D8155 XBYTE0 x7f00 #define PA8155 XBYTE0 x7f01 #define PB8155 XBYTE0 x7f02 #define PC8155 XBYTE0 x7f03 sbit BUSY = P33;,2020/8/12,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(ucha

12、r d) /*打印字符函數(shù)*/ PA8155 = d; PC8155 = 0 x00; /*產(chǎn)生選通脈沖*/ PC8155 = 0 x01; while(BUSY); ,2020/8/12,38,void main(void) COMD8155 = 0 x0f;/*送命令字*/ prt(0 x1c); /*送中文打印方式命令字高字節(jié)*/ prt(0 x26); /*送中文打印方式命令字低字節(jié)*/ EA = 1; EX1 = 1; while(1); ,2020/8/12,39,void int1(void)interrupt 2 using 1 uchar i; EA = 0; for(i =

13、 0;i t1;i +)prt(tabi); EA = 1; ,2020/8/12,40,A/D轉(zhuǎn)換接口編程示例,【例10-4】 ADC0809與單片機(jī)的接口電路如圖。,2020/8/12,41,# include “reg51.h” # include “absacc.h” # define uchar unsigned char # define IN0 XBYTE0 x7ff8 sbit ad_busy = P33;,2020/8/12,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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論