第一章單片機(jī)及基礎(chǔ)知識(shí)_第1頁
第一章單片機(jī)及基礎(chǔ)知識(shí)_第2頁
第一章單片機(jī)及基礎(chǔ)知識(shí)_第3頁
第一章單片機(jī)及基礎(chǔ)知識(shí)_第4頁
第一章單片機(jī)及基礎(chǔ)知識(shí)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 1單片機(jī)原理及應(yīng)用單片機(jī)原理及應(yīng)用任課教師:任課教師:李念強(qiáng)教授李念強(qiáng)教授辦公室:辦公室: 電子信息教研中心電子信息教研中心 12J30212J302Tel: Tel: 1386407692813864076928E-mail: E-mail: ise_ise_ 2學(xué)習(xí)方法:學(xué)習(xí)方法:理論與實(shí)踐相結(jié)合理論與實(shí)踐相結(jié)合注重學(xué)習(xí)書本知識(shí)的同時(shí)加強(qiáng)實(shí)際練習(xí)。注重學(xué)習(xí)書本知識(shí)的同時(shí)加強(qiáng)實(shí)際練習(xí)。考試方法:考試方法: 總成績總成績= =期末考試成績期末考試成績* *70%+70%+平時(shí)成績平時(shí)成績* *10%+20%10%+20%* *實(shí)驗(yàn)成績實(shí)驗(yàn)成績 平時(shí)成績平時(shí)成績= =考勤成績考勤成績* *50

2、%+50%+作業(yè)成績作業(yè)成績* *50%50% 3 1.1 單片機(jī)概述單片機(jī)概述 1.2 數(shù)制與編碼數(shù)制與編碼 1.3 單片機(jī)單片機(jī)C語言程序設(shè)計(jì)基礎(chǔ)語言程序設(shè)計(jì)基礎(chǔ)圖圖1-1 單片機(jī)常見的幾種封裝圖單片機(jī)常見的幾種封裝圖4 單片微型計(jì)算機(jī)(Single Chip Microcomputer)簡稱單片機(jī)。它是把組成微型計(jì)算機(jī)的各功能部件,如中央處理器(CPU)、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、I/O接口電路、定時(shí)器/計(jì)數(shù)器以及串行通信接口等部件制作在一塊集成芯片中,構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。圖1-1是單片機(jī)常見的幾種封裝圖。a)DIPa)DIPb) PQFP/TQFPb) PQ

3、FP/TQFPc) PLCCc) PLCC封裝封裝 5 第一階段(19711974年):4位單片機(jī)階段。 第二階段(19741978年):初級(jí)單片機(jī)階段。 第三階段(19781983年):高性能單片機(jī)階段。 第四階段(1983N):20世紀(jì)90年代以后,單片機(jī)獲得了飛速的發(fā)展。 單片機(jī)的產(chǎn)生與發(fā)展和微處理器的產(chǎn)生與發(fā)展大體上同步,也經(jīng)歷4個(gè)階段:1971年11月,美國Intel公司生產(chǎn)出集成度為2000只晶體管/片的4位微處理器Intel 40041972年Intel推出雛形8位微處理器Intel 8008,研制單片機(jī)的序幕由此拉開1973年Intel推出8位微處理器Intel 8080197

4、4年,TI公司推出TMS1000單片機(jī),并成功用于TI公司的高速反雷達(dá)導(dǎo)航器。1976年,Intel公司的MCS-48系列8位單片機(jī)研制成功,獲得了廣泛的應(yīng)用,成為單片機(jī)發(fā)展進(jìn)程中的一座里程碑。20世紀(jì)80年代初,Intel公司在MCS-48系列單片機(jī)的基礎(chǔ)上,推出了MCS-51系列8位高檔單片機(jī)。1986年以后16位單片機(jī)MCS-96系列問世(Intel公司的MCS-96系列),其比8位性能更高,適用于更復(fù)雜的控制系統(tǒng)。Atmel公司的AT89、AT90系列;宏晶科技的STC系列單片機(jī);Microchip公司的PIC單片機(jī);TI公司的TMS370、MSP430系列;凌陽的16位單片機(jī) 等,進(jìn)

5、入了百花齊放,百家爭(zhēng)鳴的時(shí)期。 61. 單片機(jī)的應(yīng)用領(lǐng)域:單片機(jī)的應(yīng)用領(lǐng)域: 制作智能儀器儀表制作智能儀器儀表 工業(yè)控制工業(yè)控制 e-Home 計(jì)算機(jī)網(wǎng)絡(luò)和通信領(lǐng)域計(jì)算機(jī)網(wǎng)絡(luò)和通信領(lǐng)域 利用單片機(jī)制作精密醫(yī)用設(shè)備利用單片機(jī)制作精密醫(yī)用設(shè)備2.2.今后的發(fā)展趨勢(shì)今后的發(fā)展趨勢(shì) 多功能多功能 高性能高性能 低電壓、低功耗低電壓、低功耗 低價(jià)格低價(jià)格 7 1.2 數(shù)制與編碼數(shù)制與編碼I. 了解進(jìn)制數(shù)了解進(jìn)制數(shù) 二進(jìn)制數(shù)有運(yùn)算簡單、便于物理實(shí)現(xiàn)、節(jié)省設(shè)備等優(yōu)點(diǎn),所以目前在計(jì)算機(jī)中數(shù)都是采用二進(jìn)制數(shù)表示。但是二進(jìn)制數(shù)書寫起來太長,且不便閱讀和記憶。目前大部分微型機(jī)是8位、16位或32位的,都是4的整數(shù)倍

6、,而4位二進(jìn)制數(shù)即是1位十六進(jìn)制數(shù),所以微型機(jī)廣泛采用十六進(jìn)制數(shù)來縮寫二進(jìn)制數(shù)。十六進(jìn)制數(shù)用09、AF共16個(gè)數(shù)碼表示十進(jìn)制數(shù)015。1個(gè)8位的二進(jìn)制數(shù)用2位十六進(jìn)制數(shù)表示,1個(gè)16位的二進(jìn)制數(shù)用4位十六進(jìn)制數(shù)表示等。這樣書寫方便,且便于閱讀和記憶。 進(jìn)制數(shù)代表符號(hào)進(jìn)制數(shù)代表符號(hào): B(Binary)二進(jìn)制; O(Octal)八進(jìn)制; D(Decimal)或不加十進(jìn)制;H(Hexadecimal)十六進(jìn)制。 8II. 各種進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)各種進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù) 各種進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的方法是:將各進(jìn)制數(shù)先按權(quán)展多項(xiàng)式,再利用十進(jìn)制運(yùn)算法則求和,即可得到該數(shù)對(duì)應(yīng)的十進(jìn)制數(shù)?!纠?-1】

7、 將二進(jìn)制數(shù)1001.101轉(zhuǎn)換為十進(jìn)制數(shù)。解:1001.101B =123+022+021+120+12-1+02-2+12-3 =8+1+0.5+0.125=9.625III. 十進(jìn)制數(shù)轉(zhuǎn)換為二、八、十六進(jìn)制數(shù)十進(jìn)制數(shù)轉(zhuǎn)換為二、八、十六進(jìn)制數(shù)1)整數(shù)部分轉(zhuǎn)換。十進(jìn)制整數(shù)轉(zhuǎn)換成M進(jìn)制數(shù)可用除M取余法,即用M不斷地除待轉(zhuǎn)換的十進(jìn)制數(shù),直到商等于0為止。將所得的各次余數(shù)依倒序排列,即可得到所轉(zhuǎn)換的M進(jìn)制整數(shù)。 2)小數(shù)部分轉(zhuǎn)換。十進(jìn)制小數(shù)轉(zhuǎn)換成M進(jìn)制數(shù)可用乘M取整法,即用M不斷地乘待轉(zhuǎn)換的十進(jìn)制數(shù),直到積等于0為止。將所得的各次整數(shù)依順序排列,即可得到所轉(zhuǎn)換的M進(jìn)制小數(shù)。 9【例例1-2】 將十

8、進(jìn)制數(shù)將十進(jìn)制數(shù)168.686轉(zhuǎn)換為十六進(jìn)制數(shù)。轉(zhuǎn)換為十六進(jìn)制數(shù)。解:分析:十進(jìn)制數(shù)168.686既有整數(shù)又有小數(shù),所以要分為兩步轉(zhuǎn)換。整數(shù)部分168采用除16取余法: 16 168 16 10 余數(shù)8, K0=8 0 余數(shù)10, K1=A 168=A8H小數(shù)部分0.686采用乘16取整法: 0.68616=10.976 K-1=A 0.97616=15.616 K-2=F 0.61616=9.856 K-3=9 0.85616=13.696 K-4=D 0.69616=11.136 K-5=B 0.6860.AF9DBH把整數(shù)和小數(shù)部分結(jié)合起來即為最后結(jié)果168.686A8. AF9DBH

9、101.2.2 二進(jìn)制數(shù)的算術(shù)運(yùn)算二進(jìn)制數(shù)的算術(shù)運(yùn)算二進(jìn)制數(shù)不僅物理上容易實(shí)現(xiàn),而且算術(shù)運(yùn)算也比較簡單,其加、減法遵循“逢2進(jìn)1”、“借1當(dāng)2”的原則。1二進(jìn)制加法1位二進(jìn)制數(shù)的加法規(guī)則如下: 0+0=0 0+1=1 1+0=1 1+1=10(有進(jìn)位) 2二進(jìn)制減法1位二進(jìn)制數(shù)減法規(guī)則如下: 1-0=1 1-1=0 0-0=0 0-1=1(有借位)3二進(jìn)制乘法1位二進(jìn)制乘法規(guī)則如下: 00=0 01=0 10=0 11=14二進(jìn)制除法二進(jìn)制除法的運(yùn)算過程類似于十進(jìn)制除法的運(yùn)算過程。 111.2.3 二進(jìn)制數(shù)的邏輯運(yùn)算二進(jìn)制數(shù)的邏輯運(yùn)算1“與”運(yùn)算(AND)“與”運(yùn)算又稱邏輯乘,運(yùn)算符為或?!芭c

10、”運(yùn)算的規(guī)則如下: 00=0 01=10=0 11=12“或”運(yùn)算(OR)“或”運(yùn)算又稱邏輯加,運(yùn)算符為+或?!盎颉边\(yùn)算的規(guī)則如下: 0+0=0 0+1=1+0=1 1+1=13“非”運(yùn)算(NOT)“非”運(yùn)算又稱邏輯非,如變量A的“非”運(yùn)算記作?!胺恰边\(yùn)算的規(guī)則如下: 4“異或”運(yùn)算(XOR)“異或”運(yùn)算的運(yùn)算符為,其運(yùn)算規(guī)則如下: 00=0 01=10=1 11=0 121.2.4 1.2.4 帶符號(hào)數(shù)的表示方法帶符號(hào)數(shù)的表示方法原碼、反碼、補(bǔ)碼原碼、反碼、補(bǔ)碼 在前面討論的二進(jìn)制數(shù)運(yùn)算均為無符號(hào)數(shù)運(yùn)算,但實(shí)際的數(shù)值是帶有符號(hào)的,既可能是正數(shù),也可能是負(fù)數(shù),前者符號(hào)用“+”號(hào)表示,后者符號(hào)用

11、“-”號(hào)表示,運(yùn)算的結(jié)果也可能是正數(shù),也可能是負(fù)數(shù)。 由于計(jì)算機(jī)只能識(shí)別0和1,因此,在計(jì)算機(jī)中通常把一個(gè)二進(jìn)制數(shù)的最高位作為符號(hào)位,以表示數(shù)值的正與負(fù)(若用8位表示一個(gè)數(shù),則D7位為符號(hào)位;若用16位表示一個(gè)數(shù),則D15位為符號(hào)位),并用0表示“+”;用1表示“-”。 131原碼原碼 正數(shù)的符號(hào)位用0表示,負(fù)數(shù)的符號(hào)位用1表示,數(shù)值部分用真值的絕對(duì)值來表示的二進(jìn)制數(shù)稱之為原碼。2反碼反碼 一個(gè)正數(shù)的反碼,等于該數(shù)的原碼;一個(gè)負(fù)數(shù)的反碼,等于該負(fù)數(shù)的原碼符號(hào)位不變(即為1),數(shù)值位按位求反(即0變1,1變0)。 3補(bǔ)碼補(bǔ)碼 正數(shù)的補(bǔ)碼與原碼相同;負(fù)數(shù)的補(bǔ)碼為該負(fù)數(shù)的原碼符號(hào)位不變,數(shù)值位逐位求

12、反并在末位加1。14u 正數(shù)的原碼、反碼、補(bǔ)碼就是該數(shù)本身。u 負(fù)數(shù)的原碼其符號(hào)位為1,數(shù)值位不變。u 負(fù)數(shù)的反碼其符號(hào)位為1,數(shù)值位逐位求反。u 負(fù)數(shù)的補(bǔ)碼其符號(hào)位為1,數(shù)值位逐位求反并在末位加1。 【例例1-3】 假設(shè)X1=+83, X2=-76,當(dāng)用8位二進(jìn)制數(shù)表示一個(gè)數(shù)時(shí),求X1、X2的原碼、反碼及補(bǔ)碼。 解:X1原=X1反=X1補(bǔ)=01010011BX2原=11001100B X2反=10110011B X2補(bǔ)=X反+1=10110100B 15定點(diǎn)數(shù)和浮點(diǎn)數(shù)的概念定點(diǎn)數(shù)和浮點(diǎn)數(shù)的概念 計(jì)算機(jī)處理的數(shù)值數(shù)據(jù)多數(shù)帶有小數(shù),小數(shù)點(diǎn)在計(jì)算機(jī)中通常有兩種表示方法,一種是約定所有數(shù)值數(shù)據(jù)的小數(shù)

13、點(diǎn)隱含在某一個(gè)固定位置上,稱為定點(diǎn)表示法,簡稱定點(diǎn)數(shù); 另一種是小數(shù)點(diǎn)位置可以浮動(dòng),稱為浮點(diǎn)表示法,簡稱浮點(diǎn)數(shù)。 161定點(diǎn)表示法定點(diǎn)表示法所謂定點(diǎn)表示法,即約定機(jī)器中所有數(shù)據(jù)的小數(shù)點(diǎn)位置是固定不變的。在計(jì)算機(jī)中通常采用兩種簡單的約定:將小數(shù)點(diǎn)的位置固定在數(shù)據(jù)的最高位之前,或者是固定在最低位之后。一般常稱前者為定點(diǎn)小數(shù),后者為定點(diǎn)整數(shù)。定點(diǎn)小數(shù)是純小數(shù),約定的小數(shù)點(diǎn)位置在符號(hào) 位之后、有效數(shù)值部分最高位之前。若數(shù)據(jù)x的形式為x = x0.x1x2xn(其中x0為符號(hào)位,x1xn是數(shù)值的有效部分,也稱為尾數(shù),x1為最高有效位),則在計(jì)算機(jī)中的表示形式為 17一般說來,如果最末位xn = 1,前面

14、各位都為0,則數(shù)的絕對(duì)值最小,即|x|min = 2-n。如果各位均為1,則數(shù)的絕對(duì)值最大,即 |x|max =1-2-n。所以定點(diǎn)小數(shù)的表示范圍為2-n|x|1-2-n定點(diǎn)整數(shù)是純整數(shù),約定的小數(shù)點(diǎn)位置在有效數(shù)值部分最低位之后。若數(shù)據(jù)x的形式為x = x0 x1x2xn(其中x0為符號(hào)位,x1xn是尾數(shù),xn為最低有效位),則在計(jì)算機(jī)中的表示形式為定點(diǎn)整數(shù)的表示范圍為 1|x|2n-1 當(dāng)數(shù)據(jù)小于定點(diǎn)數(shù)能表示的最小值時(shí),計(jì)算機(jī)將它們作0處理,稱為下溢;大于定點(diǎn)數(shù)能表示的最大值時(shí),計(jì)算機(jī)將無法表示,稱為上溢。上溢和下溢統(tǒng)稱為溢出。 計(jì)算機(jī)采用定點(diǎn)數(shù)表示時(shí),對(duì)于既有整數(shù)又有小數(shù)的原始數(shù) 據(jù),需要

15、設(shè)定一個(gè)比例因子,數(shù)據(jù)按其縮小成定點(diǎn)小數(shù)或擴(kuò)大成定點(diǎn)整數(shù)再參加運(yùn)算。運(yùn)算結(jié)果根據(jù)比例因子還原成實(shí)際數(shù)值。若比例因子選擇不當(dāng),往往會(huì)使運(yùn)算結(jié)果產(chǎn)生溢出或降低數(shù)據(jù)的有效精度。用定點(diǎn)數(shù)進(jìn)行運(yùn)算處理的計(jì)算機(jī)被稱為定點(diǎn)機(jī)。 18 192浮點(diǎn)表示法浮點(diǎn)表示法與科學(xué)計(jì)數(shù)法相似,任意一個(gè)J進(jìn)制數(shù)N,總可以寫成 N = JEM 式中,M稱為數(shù)N的尾數(shù)(Mantissa),是一個(gè)純小數(shù);E為數(shù)N的階碼(Exponent),是一個(gè)整數(shù);J稱為比例因子JE的底數(shù)。這種表示方法相當(dāng)于數(shù)的小數(shù)點(diǎn)位置隨比例因子的不同而在一定范圍內(nèi)可以自由浮動(dòng),所以稱為浮點(diǎn)表示法。 底數(shù)是事先約定好的(常取2),在計(jì)算機(jī)中不出現(xiàn)。在機(jī)器中表

16、示一個(gè)浮點(diǎn)數(shù)時(shí),一是要給出尾數(shù),用定點(diǎn)小數(shù)形式表示。尾數(shù)部分給出有效數(shù)字的位數(shù),因而決定了浮點(diǎn)數(shù)的表示精度。 20 二是要給出階碼,用整數(shù)形式表示,階碼指明小數(shù)點(diǎn)在數(shù)據(jù)中的位置,因而決定了浮點(diǎn)數(shù)的表示范圍。浮點(diǎn)數(shù)也要有符號(hào)位。因此一個(gè)機(jī)器浮點(diǎn)數(shù)應(yīng)當(dāng)由階碼和尾數(shù)及其符號(hào)位組成: 其中ES表示階碼的符號(hào),占一位;E1En為階碼值,占n位;尾符是數(shù)N的符號(hào),也要占一位。當(dāng)?shù)讛?shù)取2時(shí),二進(jìn)制數(shù)N的小數(shù)點(diǎn)每右移一位,階碼減小1,相應(yīng)尾數(shù)右移一位;反之,小數(shù)點(diǎn)每左移一位,階碼加1,相應(yīng)尾數(shù)左移一位。 若不對(duì)浮點(diǎn)數(shù)的表示作出明確規(guī)定,同一個(gè)浮點(diǎn)數(shù)的表示就不是唯一的。例如11.01也可以表示成 0.01101

17、2-3,0.11012-2 等。為了提高數(shù)據(jù)的表示精度,當(dāng)尾數(shù)的值不為0時(shí),其絕對(duì)值應(yīng)大于等于0.5,即尾數(shù)域的最高有效位應(yīng)為1,否則要以修改階碼同時(shí)左右移小數(shù)點(diǎn)的方法,使其變成這一要求的表示形式,這稱為浮點(diǎn)數(shù)的規(guī)格化表示。 21 當(dāng)一個(gè)浮點(diǎn)數(shù)的尾數(shù)為0時(shí),不論其階碼為何值,或者當(dāng)階碼的值遇到比它能表示的最小值還小時(shí),不管其尾數(shù)為何值,計(jì)算機(jī)都把該浮點(diǎn)數(shù)看成0值,稱為機(jī)器零。 浮點(diǎn)數(shù)所表示的范圍比定點(diǎn)數(shù)大。假設(shè)機(jī)器中的數(shù)由8位二進(jìn)制數(shù)表示(包括符號(hào)位):在定點(diǎn)機(jī)中這8位全部用來表示有效數(shù)字(包括符號(hào));在浮點(diǎn)機(jī)中若階符、階碼占3位,尾符、尾數(shù)占5位,在此情況下,若只考慮正數(shù)值,定點(diǎn)機(jī)小數(shù)表示的

18、數(shù)的范圍是0.00000000.1111111,相當(dāng)于十進(jìn)制數(shù)的0127/128,而浮點(diǎn)機(jī)所能表示的數(shù)的范圍則是2-110.00012110.1111 ,相當(dāng)于十進(jìn)制數(shù)的1/1287.5。顯然,都用8位,浮點(diǎn)機(jī)能表示的數(shù)的范圍比定點(diǎn)機(jī)大得多。 盡管浮點(diǎn)表示能擴(kuò)大數(shù)據(jù)的表示范圍,但浮點(diǎn)機(jī)在運(yùn)算過程中仍會(huì)出現(xiàn)溢出現(xiàn)象。 221.2.6 BCD碼和碼和ASCII碼碼1BCD碼(Binary Coded Decimal) 二進(jìn)制數(shù)以其物理易實(shí)現(xiàn)和運(yùn)算簡單的優(yōu)點(diǎn)在計(jì)算機(jī)中得到了廣泛應(yīng)用,但人們?nèi)粘A?xí)慣最熟悉的還是十進(jìn)制。為了既滿足人們的習(xí)慣,又能讓計(jì)算機(jī)接受,便引入了BCD碼。它用二進(jìn)制數(shù)碼按照不同規(guī)律

19、編碼來表示十進(jìn)制數(shù),這樣的十進(jìn)制數(shù)的二進(jìn)制編碼,既具有二進(jìn)制的形式,又具有十進(jìn)制的特點(diǎn),便于傳遞處理。 1位十進(jìn)制數(shù)有09共10個(gè)不同數(shù)碼,需要由4位二進(jìn)制數(shù)來表示。4位二進(jìn)制數(shù)有16種組合,取其10種組合分別代表10個(gè)十進(jìn)制數(shù)碼。最常用的方法是8421BCD碼,其中8、4、2、1分別為4位二進(jìn)制數(shù)的位權(quán)值。表1-1給出了十進(jìn)制數(shù)和8421BCD碼的對(duì)應(yīng)關(guān)系。 23表表1-1 十進(jìn)制數(shù)和十進(jìn)制數(shù)和8421BCD碼的對(duì)應(yīng)關(guān)系碼的對(duì)應(yīng)關(guān)系十進(jìn)制數(shù)8421BCD碼十進(jìn)制數(shù)8421BCD碼0123456700000001001000110100010101100111 89101112131415 1

20、00010010001 00000001 00010001 00100001 00110001 01000001 0101 242BCD碼運(yùn)算及十進(jìn)制調(diào)整碼運(yùn)算及十進(jìn)制調(diào)整若想讓計(jì)算機(jī)直接用十進(jìn)制的規(guī)律進(jìn)行運(yùn)算,則將數(shù)據(jù)用BCD碼來存儲(chǔ)和運(yùn)算即可。但是,8421BCD碼可表示數(shù)的范圍為00001111(即十進(jìn)制的015),而十進(jìn)制數(shù)為00001001(即09)。所以在運(yùn)算時(shí)必須注意以下兩點(diǎn): 當(dāng)兩個(gè)BCDD碼相加結(jié)果大于1001(即大于十進(jìn)制數(shù)9)時(shí),為使其符合十進(jìn)制運(yùn)算和進(jìn)位規(guī)律,需對(duì)BCD碼的二進(jìn)制運(yùn)算結(jié)果加0110(加6)調(diào)整。 例如: 4+8=(0100)BCD+(1000)BCD=(

21、1100)BCD1001,調(diào)整后其結(jié)果為(1100)BCD+ (0110)BCD = (00010010)BCD=12。 當(dāng)兩個(gè)BCD碼相加結(jié)果在本位上并不大于1001,但有低位進(jìn)位發(fā)生,使得兩個(gè)BCD碼與進(jìn)位一起相加,其結(jié)果大于1001,這時(shí)也要作加0110(加6)調(diào)整。25【例例1-4】 用BCD碼完成54+48的運(yùn)算。解:54=(01010100)BCD,48=(01001000)BCD54+48 =(01010100)BCD+(01001000)BCD=(000100000010)BCD =102計(jì)算過程如圖1-2:圖1-2 BCD碼加法 263ASCII碼碼在計(jì)算機(jī)的應(yīng)用過程中,如操

22、作系統(tǒng)命令,各種程序設(shè)計(jì)語言以及計(jì)算機(jī)運(yùn)算和處理信息的輸入輸出,經(jīng)常用到某些字母、數(shù)字或各種符號(hào),如英文字母的大、小寫;09數(shù)字符;+、-、*、/運(yùn)算符;、= 關(guān)系運(yùn)算符等。但在計(jì)算機(jī)內(nèi),任何信息都是用代碼表示的,因此,這些符號(hào)也必須要有自己的編碼。 ASCII碼采用7位二進(jìn)制數(shù)對(duì)字符進(jìn)行編碼,它包括10個(gè)十進(jìn)制數(shù)09;大寫和小寫英文字母各26個(gè);32個(gè)通用控制符號(hào);34個(gè)專用符號(hào),共128個(gè)字符。其中數(shù)字09的ASCII編碼分別為30H39H,英文大寫字母AZ的ASCII編碼從41H開始依次編至5AH。ASCII編碼從20H7EH均為可打印字符,而00H1FH為通用控制符,它們不能被打印出來

23、,只起控制或標(biāo)志的作用,如0DH表示回車(CR),0AH表示換行控制(LF),04H(EOT)為傳送結(jié)束標(biāo)志。 271.3 單片機(jī)單片機(jī)C語言程序設(shè)計(jì)基礎(chǔ)語言程序設(shè)計(jì)基礎(chǔ)C語言是一種編譯型程序設(shè)計(jì)語言,它兼顧了多種高級(jí)語言的特點(diǎn),并具備匯編語言的功能。很多硬件開發(fā)都用C語言編程,如各種單片機(jī)、DSP、ARM等。C語言程序本身不依賴于機(jī)器硬件系統(tǒng),基本上不做修改就可將程序從不同的單片機(jī)中移植過來。C語言提供了很多數(shù)學(xué)函數(shù)并支持浮點(diǎn)運(yùn)算,開發(fā)效率高,故可縮短開發(fā)時(shí)間,增加程序可讀性和可維護(hù)性。目前,使用C語言進(jìn)行程序設(shè)計(jì)已經(jīng)成為軟件開發(fā)的一個(gè)主流。而針對(duì)8051的C語言日趨成熟,成為了專業(yè)化的實(shí)用

24、高級(jí)語言。1.3.1 C51的數(shù)據(jù)類型的數(shù)據(jù)類型 1變量的數(shù)據(jù)類型選擇變量的數(shù)據(jù)類型選擇 1) 若能預(yù)算出變量的變化范圍,則可根據(jù)變量長度來選擇變量的類型,盡量減少變量的長度。 2)如果程序中不需使用負(fù)數(shù),則選擇無符號(hào)數(shù)類型的變量。 3)如果程序中不需使用浮點(diǎn)數(shù),則要避免使用浮點(diǎn)數(shù)變量。28類類 型型關(guān)關(guān) 鍵鍵 字字所占位數(shù)所占位數(shù)字節(jié)數(shù)字節(jié)數(shù)數(shù)數(shù) 值值 范范 圍圍位型位型bit80或或1整型整型(signed) int16- -3276832767(signed) short162- -3276832767(signed) long324- -21474836482147483647unsi

25、gned int162065535unsigned short int162065535unsigned long int32404294967295實(shí)型實(shí)型float3243.4e- -383.4e38double6481.7e- -3081.7e308字符型字符型Char81- -128127unsigned char810255指針型指針型data/idata/pdata811表表1-2 C51的數(shù)據(jù)類型的數(shù)據(jù)類型 29表1-2中,bit、sbit、sfr、sfr16是C51的擴(kuò)充定義,其中:sfr:特殊功能寄存器聲明。sfr16:sfr的16位數(shù)據(jù)聲明。sbit:特殊功能位聲明。bit

26、:位變量聲明。例:sfr SCON = 0X98; sfr16 T2 = 0 xCC; sbit OV = PSW2;類類 型型關(guān)關(guān) 鍵鍵 字字所占位所占位數(shù)數(shù)字節(jié)數(shù)字節(jié)數(shù)數(shù)數(shù) 值值 范范 圍圍指針型指針型code/xdata1622字節(jié)地址字節(jié)地址通用指針通用指針243其中其中1字節(jié)為存儲(chǔ)器類型編碼,字節(jié)為存儲(chǔ)器類型編碼,2、3字節(jié)為地址偏移量字節(jié)為地址偏移量訪問訪問SFR的的數(shù)據(jù)數(shù)據(jù)類型類型sbit810或或1sfr810255sfr16162065535(續(xù)) 302數(shù)據(jù)類型之間的轉(zhuǎn)換數(shù)據(jù)類型之間的轉(zhuǎn)換 在C語言程序的表達(dá)式或變量的賦值運(yùn)算中,有時(shí)會(huì)出現(xiàn)運(yùn)算對(duì)象的數(shù)據(jù)類型不一樣的情況,C

27、語言程序允許在標(biāo)準(zhǔn)數(shù)據(jù)類型之間隱式轉(zhuǎn)換,隱式轉(zhuǎn)換按以下優(yōu)先級(jí)別(由低到高)自動(dòng)進(jìn)行:bitcharintlongfloatsignedunsigned 一般來說,如果有幾個(gè)不同類型的數(shù)據(jù)同時(shí)運(yùn)算,先將低級(jí)別類型的數(shù)據(jù)轉(zhuǎn)換成高級(jí)別類型,再做運(yùn)算處理,并且運(yùn)算結(jié)果為高級(jí)別類型數(shù)據(jù)。 C語言中圓括號(hào)“()”也作為強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換運(yùn)算符,它的作用是將表達(dá)式或變量的數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換為所指定的類型。在算術(shù)運(yùn)算時(shí)有兩種轉(zhuǎn)換方式,即隱式轉(zhuǎn)換與顯式轉(zhuǎn)換。 隱式轉(zhuǎn)換僅適用于C語言中的基本數(shù)據(jù)類型間的類型轉(zhuǎn)換。當(dāng)涉及非基本數(shù)據(jù)類型的類型轉(zhuǎn)換時(shí),必須利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符進(jìn)行顯式轉(zhuǎn)換。 強(qiáng)制類型轉(zhuǎn)換運(yùn)算的一般格式為(

28、類型)(表達(dá)式)例如:(double)a; 將a轉(zhuǎn)換為double數(shù)據(jù)類型。 (續(xù))311.3.2 C51的運(yùn)算符與表達(dá)式的運(yùn)算符與表達(dá)式 C51的運(yùn)算符與表達(dá)式包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、指針運(yùn)算符、賦值運(yùn)算符、逗號(hào)運(yùn)算符、條件運(yùn)算符、sizeof運(yùn)算符,見表1-3。算數(shù)運(yùn)算數(shù)運(yùn)算符算符含含 義義表表 達(dá)達(dá) 式式說說 明明+加法加法a+ba變量值和變量值和b變量值相加變量值相加- -減法減法a- -ba變量值和變量值和b變量值相減變量值相減*乘法乘法a*ba變量值乘以變量值乘以b變量值變量值/除法除法a/ba變量值除以變量值除以b變量值變量值%求余求余a%ba變量值除以

29、變量值除以b變量值的余數(shù)變量值的余數(shù) 32(續(xù))(續(xù))算數(shù)運(yùn)算符算數(shù)運(yùn)算符含含 義義表表 達(dá)達(dá) 式式說說 明明+ +自增自增a+ +;+ +aa先運(yùn)算再加先運(yùn)算再加1;a先加先加1再運(yùn)算再運(yùn)算- - - -自減自減a- - - -;- - - -aa先運(yùn)算再減先運(yùn)算再減1;a先減先減1再運(yùn)算再運(yùn)算 大于大于ab測(cè)試測(cè)試a是否大于是否大于b=大于等于大于等于a=b測(cè)試測(cè)試a是否大于或等于是否大于或等于b 小于小于ab測(cè)試測(cè)試a是否小于是否小于b=小于等于小于等于a 按位右移按位右移ab將將a按位右移按位右移b個(gè)位,高位補(bǔ)個(gè)位,高位補(bǔ)0 按位左移按位左移a=右移位賦值右移位賦值a=ba=ab,a右

30、移右移b位后再賦給位后再賦給a=左移位賦值左移位賦值a=ba=ab,a左移左移b位后再賦給位后再賦給a=邏輯非賦值邏輯非賦值=a等同于等同于a=a,逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2表達(dá)式表達(dá)式n把若干表達(dá)式組合成一個(gè)表達(dá)式把若干表達(dá)式組合成一個(gè)表達(dá)式sizeof求字節(jié)數(shù)運(yùn)算求字節(jié)數(shù)運(yùn)算符符sizeof(表達(dá)式)(表達(dá)式)表達(dá)式可以是數(shù)據(jù)類型、變量、常量或表達(dá)式,求出其字表達(dá)式可以是數(shù)據(jù)類型、變量、常量或表達(dá)式,求出其字節(jié)數(shù)節(jié)數(shù) 341.3.3 C51的輸入的輸入/輸出輸出1基本輸入函數(shù)getkey getkey函數(shù)是基本的字符輸入函數(shù),原型為char getkey(void

31、) 函數(shù)功能:從單片機(jī)串行口讀入一個(gè)字符,如果沒有字符輸入則等待,返回值為讀入的字符,不顯示??芍厝牒瘮?shù)。字符輸入函數(shù)getchar()功能:與getkey基本相同,唯一的區(qū)別:還要從串行口返回字符。2基本輸出函數(shù)putchar putchar函數(shù)是基本的字符輸出函數(shù),其原型為char putchar(char)函數(shù)功能:是從單片機(jī)的串行口輸出一個(gè)字符,返回值為輸出的 字符。putchar為可重入函數(shù)。 353格式輸出函數(shù)printf 函數(shù)功能:通過單片機(jī)的串行口輸出若干任意類型的數(shù)據(jù)。格式如下:printf(格式控制,輸出參數(shù)表); 格式控制:是用雙引號(hào)括起來的字符串,也稱為轉(zhuǎn)換控制字符串,

32、它包括3種信息:格式說明符、普通字符、轉(zhuǎn)義字符。 1)格式說明符:由百分號(hào)“%”和格式字符組成,其作用是指明輸出數(shù)據(jù)的格式,如%d、%c、%s等,詳細(xì)情況見表1-4。2)普通字符:這些字符按原樣輸出,主要用來輸出一些提示信息。3)轉(zhuǎn)義字符:由“”和字母或字符組成,它的作用是輸出特定的控制符,如轉(zhuǎn)義字符n的含義是輸出換行,詳細(xì)情況見表1-5。 36表表1- -4 printf函數(shù)的格式字符函數(shù)的格式字符格格 式式 字字 符符數(shù)數(shù) 據(jù)據(jù) 類類 型型輸輸 出出 格格 式式dint有符號(hào)十進(jìn)制數(shù)有符號(hào)十進(jìn)制數(shù)uint無符號(hào)十進(jìn)制數(shù)無符號(hào)十進(jìn)制數(shù)oint無符號(hào)八進(jìn)制數(shù)無符號(hào)八進(jìn)制數(shù)x,Xint無符號(hào)十六

33、進(jìn)制數(shù)無符號(hào)十六進(jìn)制數(shù)ffloat十進(jìn)制浮點(diǎn)數(shù)十進(jìn)制浮點(diǎn)數(shù)e,Efloat科學(xué)計(jì)數(shù)法的十進(jìn)制浮點(diǎn)數(shù)科學(xué)計(jì)數(shù)法的十進(jìn)制浮點(diǎn)數(shù)g,Gfloat自動(dòng)選擇自動(dòng)選擇e或或f格式格式cchar單個(gè)字符單個(gè)字符s指針指針帶結(jié)束符的字符串帶結(jié)束符的字符串 37表表1- -5 常用的轉(zhuǎn)義字符常用的轉(zhuǎn)義字符轉(zhuǎn)轉(zhuǎn) 義義 字字 符符含含 義義ASCII碼碼轉(zhuǎn)轉(zhuǎn) 義義 字字 符符含含 義義ASCII碼碼0空字符空字符0 x00f換頁符換頁符0 x0cn換行符換行符0 x0a單引號(hào)單引號(hào)0 x27r回車符回車符0 x0d”雙引號(hào)雙引號(hào)0 x22t水平制水平制表表0 x09反斜杠反斜杠0 x5cb退格符退格符0 x08 3

34、84格式輸入函數(shù)scanf函數(shù)的功能:通過單片機(jī)串行口實(shí)現(xiàn)各種數(shù)據(jù)輸入。函數(shù)格式如下:scanf(格式控制,地址列表)格式控制:格式控制與printf函數(shù)的類似,也是用雙引號(hào)括起來的一些字符,包括3種信息:格式說明符、普通字符和空白字符。1)格式說明符:由百分號(hào)“%”和格式字符組成,其作用是指明輸入數(shù)據(jù)的格式。 2)普通字符:在輸入時(shí),要求這些字符按原樣輸入。3)空白字符:包括空格、制表符和換行符等,這些字符在輸入時(shí)被忽略。 39 地址列表:是由若干個(gè)地址組成,它可以是指針變量、變量地址(取地址運(yùn)算符“&”加變量)、數(shù)組地址(數(shù)組名)或字符串地址(字符串名)等。 用scanf函數(shù)輸入例子(假設(shè)

35、x、y、z、c1、c2是定義過的變量,str1是定義過的指針):scanf(“%d”,&x);scanf(“%d%d”,&y,&z);scanf(“%c%c”,&c1,&c2); scanf(“%s”,str1); 在實(shí)際的串行通信中,傳輸?shù)臄?shù)據(jù)多數(shù)是字符型和字符串,以字符串居多,往往把數(shù)字型數(shù)據(jù)轉(zhuǎn)換成字符串傳輸。 401.3.4 C51基本語句基本語句C51語名與標(biāo)準(zhǔn)C語言基本相同1If選擇語言選擇語言 形式1:If (表達(dá)式)語句;形式2:If (表達(dá)式)語句1;else語句2;形式3:If (表達(dá)式1)語句1; else if(表達(dá)式2)語句2;else if(表達(dá)式3)語句3; els

36、e if(表達(dá)式m)語句m; else 語句n; 412switch/case語句語句switch(表達(dá)式)case 常量表達(dá)式1:語句1;break;case 常量表達(dá)式2:語句2;break;case 常量表達(dá)式n:語句n;break;default:語句n+1; 423循環(huán)結(jié)構(gòu)流程控制語句循環(huán)結(jié)構(gòu)流程控制語句(1)基于if和goto構(gòu)成的循環(huán)形式1:構(gòu)成當(dāng)型循環(huán)loop:if(表達(dá)式) 語句goto loop; 形式2:構(gòu)成直到型循環(huán)loop:語句 if(表達(dá)式)goto loop; (2)基于while語句構(gòu)成的循環(huán)While (表達(dá)式) 語句1; 43(3)基于)基于dowhile語

37、句構(gòu)成的循環(huán)語句構(gòu)成的循環(huán)do 語句1; while(表達(dá)式);(4)基于)基于for語句構(gòu)成的循環(huán)語句構(gòu)成的循環(huán)for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句1;(5)“死循環(huán)死循環(huán)”的實(shí)現(xiàn)的實(shí)現(xiàn)形式1:while(1) 語句;形式2:for(;);形式3:Loop:goto Loop; 444break、continue、return和和goto語句語句1)breakbreak語句既可以跳出switch結(jié)構(gòu),使程序繼續(xù)執(zhí)行switch結(jié)構(gòu)后面的一個(gè)語句,也可以從循環(huán)體中跳出循環(huán),提前結(jié)束循環(huán)而接著執(zhí)行循環(huán)結(jié)構(gòu)下面的語句。它不能用在除了循環(huán)語句和switch語句之外的任何其他語句中。for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句1;語句2 break;語句3;2)continuecontinue語句用在循環(huán)結(jié)構(gòu)中,用于結(jié)束本次循環(huán)。for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句1;語句2 continue;語句3; 453)return。return語句一般放在函數(shù)的最后位置,用于終止函數(shù)的執(zhí)行,并控制程序返回調(diào)用該函數(shù)時(shí)所處的位置。返回時(shí)還可以通過return語句帶回返回值。形式1:return;形式2:return (表達(dá)式);4)goto。無條件轉(zhuǎn)移。 loop:; 語句1; 語

溫馨提示

  • 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)論