基于單片機(jī)的函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)與制作_第1頁
基于單片機(jī)的函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)與制作_第2頁
基于單片機(jī)的函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)與制作_第3頁
基于單片機(jī)的函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)與制作_第4頁
基于單片機(jī)的函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)與制作_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第一章 計(jì)算機(jī)基礎(chǔ)知識(shí)及mcs-51單片機(jī)硬件結(jié)構(gòu)1.1 數(shù)制與編碼 在計(jì)算機(jī)中,任何命令和信息都是以二進(jìn)制數(shù)據(jù)的形式存儲(chǔ)的。本節(jié)將講解常用的十進(jìn)制、二進(jìn)制、十六進(jìn)制的含義及相互轉(zhuǎn)換的方法。1.1.1 二進(jìn)制數(shù)二進(jìn)制數(shù)只有兩個(gè)數(shù)字符號(hào):0和1。計(jì)數(shù)時(shí)按“逢二進(jìn)一”的原則進(jìn)行計(jì)數(shù)。在計(jì)算機(jī)中,二進(jìn)制數(shù)的每一位是數(shù)據(jù)的最小存儲(chǔ)單位。將8位(bit)二進(jìn)制數(shù)稱為一個(gè)字節(jié)(b),字節(jié)是計(jì)算機(jī)存儲(chǔ)信息的基本數(shù)據(jù)單位。存儲(chǔ)器的容量常用以下單位表示:1b=8bit1024b=1kb1024kb=1mb1024mb=1gb1024gb=1tb對(duì)于8位二進(jìn)制數(shù)(d0d7),各位所對(duì)應(yīng)的值為d7d6d5d4d3d

2、2d1d0例如:二進(jìn)制數(shù)10110111,按位權(quán)展開求和計(jì)算可得=1+0+1+1+0+1+1+1=128+0+32+16+0+4+2+1=對(duì)于含有小數(shù)的二進(jìn)制數(shù),小數(shù)點(diǎn)右邊第一位小數(shù)開始向右各位的權(quán)值分別為1.1.2 十六進(jìn)制數(shù)計(jì)算機(jī)在輸入輸出或書寫時(shí),可采用十六進(jìn)制數(shù)表示相應(yīng)的二進(jìn)制數(shù)。十六進(jìn)制數(shù)有16個(gè)數(shù)字符號(hào),其中09與十進(jìn)制數(shù)相同,剩6個(gè)為af,分別表示十六進(jìn)制數(shù)的確1015,計(jì)數(shù)時(shí)按“逢十六進(jìn)一”的原則進(jìn)行計(jì)數(shù)。為了便于區(qū)別不同進(jìn)制的數(shù)據(jù),一般情況下可在數(shù)據(jù)后跟一后綴:二進(jìn)制數(shù)用“b”表示(如1001111b)十六進(jìn)制數(shù)用“h”表示(如3ah)十進(jìn)制數(shù)用“d”表示(如39d或39)1

3、.1.3 不同數(shù)制之間的轉(zhuǎn)換計(jì)算機(jī)中的數(shù)只能用二進(jìn)制數(shù)表示,十六進(jìn)制數(shù)適合讀寫方便的需要,日常生活使用的是十六進(jìn)制數(shù),計(jì)算機(jī)根據(jù)需要對(duì)各種進(jìn)制進(jìn)轉(zhuǎn)換。1二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)對(duì)任意二進(jìn)制數(shù)均可按權(quán)展開將其轉(zhuǎn)化為十進(jìn)制數(shù)。例如:=1+0+1+1+0+1+1+1=128+0+32+16+0+4+2+1=183d2十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),可將整數(shù)部分與小數(shù)部分別進(jìn)行轉(zhuǎn)換,然后合并。其中整數(shù)部分可采用“除2取余法”進(jìn)行轉(zhuǎn)換,小數(shù)部分可采用“乘2取整法”進(jìn)行轉(zhuǎn)換。例如:將37d轉(zhuǎn)換為二進(jìn)制數(shù)。2371低位(每一次余數(shù)為低位)2180291240220211高位(直到商數(shù)等于0為止)

4、0結(jié)果為37d=100101b。3二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù) 因?yàn)?16,所以4位二進(jìn)制數(shù)相當(dāng)于1位十六進(jìn)制數(shù),二進(jìn)制、十進(jìn)制、十六進(jìn)制對(duì)應(yīng)數(shù)的轉(zhuǎn)換關(guān)系見表1-1。表1-1 二進(jìn)制、十進(jìn)制、十六進(jìn)制對(duì)應(yīng)轉(zhuǎn)換表十進(jìn)制二進(jìn)制十六進(jìn)制000000100011200102300113401004501015601106701117810008910019101010a111011b121100c131101d141110e151111f例如:1000101b=45h1.1.4 ascll碼對(duì)于計(jì)算機(jī)非數(shù)值型數(shù)據(jù)不能直接裝入計(jì)算機(jī),必須將其轉(zhuǎn)換為特定的二進(jìn)制代碼(即將其編碼),以二進(jìn)制代碼所表示的字符數(shù)據(jù)

5、的形式裝入計(jì)算機(jī)。ascll碼是一種國際標(biāo)準(zhǔn)信息交換碼,它利用7位二進(jìn)制代碼來表示字符,再加上1位校驗(yàn)位,故在計(jì)算機(jī)中用1個(gè)字節(jié)8位二進(jìn)制數(shù)來表示一個(gè)字符。(ascll碼表可查資料)1.2 單片機(jī)與嵌入式系統(tǒng)組成單片機(jī)又稱單片微控制器,其基本結(jié)構(gòu)是將微型計(jì)算機(jī)的基本功能部件:中央處理機(jī)(cpu)、存儲(chǔ)器、輸入接口、輸出接口、定時(shí)器/計(jì)算器、中斷系統(tǒng)等全部集成在一個(gè)半導(dǎo)體芯片上。1.3 mcs-51單片機(jī)總體結(jié)構(gòu)1.3.1 mcs-51 單片機(jī)總體結(jié)構(gòu)框圖及功能單片機(jī)內(nèi)部各功能部件通常都掛靠在內(nèi)部總線上,它們通過內(nèi)部總線傳送數(shù)據(jù)信息和控制信息,各功能部件分時(shí)使用總線,即所謂的內(nèi)部單總線結(jié)構(gòu)。圖2

6、-1為8051單片機(jī)內(nèi)部基本結(jié)構(gòu)框圖。外部事件計(jì)數(shù)外時(shí)鐘源振蕩器和時(shí)序osc程序存儲(chǔ)器4kb rom數(shù)據(jù)存儲(chǔ)器256b ram/sfr振蕩器和時(shí)序osc8051cpu64kb 總線擴(kuò)展控制器可編程i/o可編程全雙工串行口外中斷內(nèi)中斷控制并行口串行通信圖1-1 8051單片機(jī)內(nèi)部基本結(jié)構(gòu)框圖1cpucpu是單片機(jī)內(nèi)部的核心部件,是單片機(jī)的指揮和控制中心。從功能上看,cpu可分為運(yùn)算器和控制器兩大部分??刂破髦饕ǔ绦蛴?jì)算器pc、指令寄存器、指令譯碼器及定時(shí)控制電路等。pc是一個(gè)16位的專用寄存器,用來存放cpu要執(zhí)行的存放在程序存儲(chǔ)器中的下一條指令地地址。當(dāng)系統(tǒng)上電復(fù)位后,pc的內(nèi)容為0000

7、h,所以單片機(jī)主控制程序的首地址自然應(yīng)定位為0000h。運(yùn)算器由算術(shù)邏輯運(yùn)算部件alu、累加器acc、程序狀態(tài)字寄存器psw等組成。程序狀態(tài)寄存器psw用于寄存當(dāng)前指令執(zhí)行后的某些狀態(tài)信息,psw各位定義見表1-2。表1-2 psw各位定義d7d6d5d4d3d2d1d0cyacf0rs1rs0ovf1pcy:進(jìn)位/借位標(biāo)志位。ac:輔助進(jìn)位標(biāo)志。f0:用戶標(biāo)志位。rs0及rs1寄存器組選擇控制位。rs0、rs1與寄存器組的對(duì)應(yīng)關(guān)系見表1-3。表1-3rs0、rs1與寄存器組的對(duì)應(yīng)關(guān)系見表rs1rs2寄存器組片內(nèi)ram地址指令助符000組00h07hr0r7011組08h0fhr0r7102組

8、10h17hr0r7113組18h1fhr0r7ov:溢出標(biāo)志。2ramram為單片機(jī)內(nèi)部程序存儲(chǔ)器,其存儲(chǔ)器空間包括隨機(jī)存儲(chǔ)器區(qū)、寄存器區(qū)、特殊功能寄存器及位尋址區(qū)。3romrom為單片機(jī)內(nèi)部程序存儲(chǔ)器。4并行i/o口p0p3是四個(gè)8位并行i/o口,每個(gè)口既可作為輸入,也可作為輸出。5定時(shí)器/計(jì)數(shù)器6中斷系統(tǒng)mcs-51單片機(jī)有5個(gè)中斷源。7串行接口串行接口提供對(duì)數(shù)據(jù)各位按序一位一位地傳送。mcs-51中的串行接口是一個(gè)全雙工通信接口,即能同時(shí)進(jìn)行發(fā)送和接收數(shù)據(jù)。8時(shí)鐘電路cpu執(zhí)行指令的一系列動(dòng)用都是在時(shí)序電路的控制下一拍一拍進(jìn)行的,時(shí)鐘電路用于產(chǎn)生單片機(jī)中最基本的時(shí)間單位。1.3.2 m

9、cs-51 引腳功能vcc:芯片電源,接+5v。vss:接地端。xtal1、xtal2:晶體振蕩電路反相輸入端和輸出端。ale/prog:地址鎖存允許/片內(nèi)eprom編程脈沖 ale功能:用來鎖存p0口送出的低8位地址 prog功能:片內(nèi)有eprom的芯片,在eprom編程期間,此引腳輸入編程脈沖。psen:外rom讀選通信號(hào)。rst/vpd:復(fù)位/備用電源。 在vcc掉電情況下,接備用電源。 ea/vpp:內(nèi)外rom選擇/片內(nèi)eprom編程電源。p0、p1、p2、p3口,共32個(gè)引腳。均可作為普通i/o口使用,但p3口均有第二功能。p3.0 rxd 串行輸入口 p3.1 txd 串行輸出口

10、p3.2 int0 外部中斷0(低電平有效) p3.3 int1 外部中斷1(低電平有效) p3.4 t0 定時(shí)計(jì)數(shù)器0 p3.5 t1 定時(shí)計(jì)數(shù)器1 p3.6 wr 外部數(shù)據(jù)存儲(chǔ)器寫選通(低電平有效) p3.7 rd 外部數(shù)據(jù)存儲(chǔ)器讀選通(低電平有效)p0口有三個(gè)功能1外部擴(kuò)充存儲(chǔ)器時(shí),當(dāng)作數(shù)據(jù)總線(d0d7)。2外部擴(kuò)充存儲(chǔ)器時(shí),當(dāng)作低8位地址總線(a0a7)。3不擴(kuò)充時(shí),可做一般i/o使用,但內(nèi)部無上拉電阻,作為輸入輸出時(shí)應(yīng)在外部接上拉電阻。p1只做i/o使用,其內(nèi)部有上拉電阻。p2有兩個(gè)功能1擴(kuò)充外部存儲(chǔ)器時(shí),當(dāng)作高8位地址總線(a8a15)使用。2做一般i/o使用,其內(nèi)部有上拉電阻。

11、1.4 cs-51存儲(chǔ)結(jié)構(gòu)及位處理器由于時(shí)間有限,這一部分內(nèi)容只作簡要介紹。從物理結(jié)構(gòu)上劃分方法如下:(1).片內(nèi)程序存儲(chǔ)器(2).片處程序存儲(chǔ)器(3).片內(nèi)數(shù)據(jù)存儲(chǔ)器(4).片外數(shù)據(jù)存儲(chǔ)器1.4.1 程序存儲(chǔ)器程序存儲(chǔ)器用于存放編好的程序及程序中常用的常數(shù),程序存儲(chǔ)器由rom構(gòu)成,單片機(jī)掉電后rom內(nèi)容不會(huì)丟失。在程序存儲(chǔ)器中,mcs-51定義7個(gè)單元用于特殊用途。0003h:外部中斷0中斷入口地址000bh:定時(shí)器0中斷入口地址0013h: 外部中斷1中斷入口地址001bh: 定時(shí)器1中斷入口地址0023h: 外部中斷2中斷入口地址1.4.1 數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器用于放程序運(yùn)算的中間結(jié)果、

12、狀態(tài)標(biāo)志等。數(shù)據(jù)存儲(chǔ)器由ram構(gòu)成,一旦掉電,其數(shù)據(jù)將丟失。圖1-2 片內(nèi)數(shù)據(jù)存儲(chǔ)器的配置1通用寄存器區(qū)在低128的ram區(qū)中,將地址001fh共32個(gè)單元設(shè)為工作寄存器區(qū),這32個(gè)單元又分為4組,每組由8個(gè)單元按序組成通用寄存器r0r7。2可位尋址區(qū)即可對(duì)字節(jié)的某一位直接進(jìn)行處理,如20h.4等。3只能字節(jié)尋址的ram區(qū)在30h7fh區(qū)的80個(gè)ram單元為用戶ram區(qū),只能按字節(jié)存取。堆棧區(qū)一般設(shè)在些區(qū)域。堆棧指針sp指向棧頂單元,堆棧按“先入后出,后入先出”的原則進(jìn)行。1.4.2 專用寄存器區(qū)(sfr)在片內(nèi)數(shù)據(jù)存儲(chǔ)器的80hffh單元(高128b)中,有21個(gè)單元作為專用寄存器,又稱為特

13、殊功能寄存器。如下表。表1-4 特殊功能寄存器(sfr)地址寄存器位地址及位名字節(jié)地址d7d6d5d4d3d2d1d0bf7hf6hf5hf4hf3hf2hf1hf0hf0hacce7he6he5he4he3he2he1he0he0hpswd7hd6hd5hd4hd3hd2hd1hd0hd0hcyacf0rs1rs0ovf1pipbfhbehbdhbchbbhbahb9hb8hb8hpspt1px1pt0px0p3b7hb6hb5hb4hb3hb2hb1hb0hb0hp3.7p3.6p3.5p3.4p3.3p3.2p3.1p3.0ieafhaehadhachabhaaha9ha8ha8heae

14、set1ex1et0ex0p2a7ha6ha5ha4ha3ha2ha1ha0ha0hp2.7p2.6p2.5p2.4p2.3p2.2p2.1p2.0sbuf99hscon9fh9eh9dh9ch9bh9ah99h98h98hsm0sm1sm2rentb8rb8tirip197h96h95h94h93h92h91h90h90hp1.7p1.6p1.5p1.4p1.3p1.2p1.1p1.0th18dhth08chtl18bhtl08ahtmodgatec/tm1m0gatec/tm1m089htcon8fh8eh8dh8ch8bh8ah89h88h88htf1tr1tf0tr0ie1it1ie0

15、it0pcon87hdph83hdpl82hsp81hp087h86h85h84h83h82h81h80h80hp0.7p0.6p0.5p0.4p0.3p0.2p0.1p0.01.5 mcs-51工作方式mcs-51單片機(jī)的工作方式包括:復(fù)位方式、程序執(zhí)行方式、節(jié)電方式和eprom的編程和校驗(yàn)方式。復(fù)位方式:mcs-51的復(fù)位電路包括上電復(fù)位電路和按鍵(外部)復(fù)位電路,如圖1-3所示。圖1-3 mcs-51復(fù)位電路程序執(zhí)行方式是單片機(jī)的基本工作方式,通??煞譃檫B續(xù)執(zhí)行和單步執(zhí)行兩種工作方式。節(jié)電方式:一種能減少單片機(jī)功耗的工作方式,通常有空閑方式和掉電方式兩種。1.6 mcs-51單片機(jī)的時(shí)序

16、計(jì)算機(jī)執(zhí)行指令的過程分為取指令、分析指令、和執(zhí)行指令三個(gè)步驟,每個(gè)步驟又由許多微操作組成,這些微操作必須在一個(gè)統(tǒng)一的時(shí)鐘脈沖的控制下才能按照正確的順序執(zhí)行。時(shí)鐘脈沖由時(shí)鐘振蕩器產(chǎn)生,通常振蕩器輸出的時(shí)鐘頻率為為616mhz。mcs-51時(shí)鐘電路如下圖所示。圖1-4 mcs-51時(shí)鐘電路圖1時(shí)鐘周期時(shí)鐘周期也稱為振蕩周期,即振蕩器的振蕩頻率的倒數(shù),是時(shí)序中最小的時(shí)間單位。例如:時(shí)鐘頻率為6mhz,剛它的時(shí)鐘周期應(yīng)是166.7ns。時(shí)鐘脈沖是計(jì)算機(jī)的基本工作脈沖,它控制著計(jì)算機(jī)的工作節(jié)奏。2機(jī)器周期執(zhí)行一條指令的過程可分為若干個(gè)階段,每個(gè)一個(gè)階段完成一規(guī)定的操作,完一個(gè)規(guī)定操作所需要的時(shí)間稱為一個(gè)

17、機(jī)器周期。一個(gè)機(jī)器周期包含12個(gè)時(shí)鐘周期。3指令周期指令周期定義為執(zhí)行一條指令所用的時(shí)間。mcs-51單片機(jī)指令可分為單周期指令、雙周期指令、四周期指令三種。只有乘法指令和除法指令是四周期指令。1.6 最小系統(tǒng)最小系統(tǒng)電路圖如下圖所示:圖1-5 最小系統(tǒng)電路圖第二章 mcs-51指令系統(tǒng)及匯編語言程序設(shè)計(jì)2.1 指令系統(tǒng)簡介;mcs-51系列單片機(jī)指令系統(tǒng)共有111條指令,其中有49條單字節(jié)指令、45條雙字節(jié)指令和17條三字節(jié)指令。mcs-51匯編語言指令格式由以下向個(gè)部分組成:標(biāo)號(hào): 操作碼 目的操作數(shù) 源操作數(shù) :注釋其中,中的項(xiàng)表示為可選項(xiàng)例如:loop: mov a,ri :ari2.

18、2 尋址方式;所謂尋址方式就是尋找或獲得操作數(shù)的方式。指令的一個(gè)重要組成部分是操作數(shù)。由尋址方式指定參與運(yùn)算的操作數(shù)或操作數(shù)所在單元的地址。尋址方式的一個(gè)重要問題是:何在整個(gè)存儲(chǔ)范圍內(nèi),靈活、方便地找到所需要的單元。1立即尋址在立即尋址方式中,操作數(shù)直接出現(xiàn)在指令中,指令的操作數(shù)可以是8位或16位數(shù)。例如:mov a,#20h;mov dptr,#20000h2直接尋址在直接尋址方式中,操作數(shù)的單元地址直接出現(xiàn)在指令中,這一尋址方式可進(jìn)行內(nèi)存儲(chǔ)單元的訪問。它包括:特殊功能寄存器地址空間。這也是唯一可尋址特殊功能寄存器(sfr)的尋址方式。例如:mov tcon,amov a, p1內(nèi)部ram的

19、低128字節(jié)例如:mov a,76h3寄存器尋址在寄存器尋址方式中,寄存器中的內(nèi)容就是操作數(shù)。例如:mov a,ri 。假若ri中存放在操作數(shù)為3bh,則指令執(zhí)行結(jié)果是a=3bh。4寄存器間接尋址在寄存器間接尋址方式中,指定寄存器中的內(nèi)容是操作數(shù)的地址,該地址對(duì)應(yīng)存儲(chǔ)器單元的內(nèi)容才是操作數(shù)。例如:mov a,r05變址尋址 變址尋址方式是以程序指針pc或數(shù)據(jù)指針dptr為基址寄存器,以累加器a作為變址寄存器,兩者內(nèi)容相加(即基地址+偏移量)形成16位的操作數(shù)地址,變址尋址方式主要用于訪問固化在程序存儲(chǔ)器中的某個(gè)字節(jié)。變址尋址方式有兩類:用程序指針pc作基地址,a作變地址,形成操作數(shù)地址:a+p

20、c。用數(shù)據(jù)指針dptr作基地址,a作變址,形成操作數(shù)地址:a+dptr。6相對(duì)尋址相對(duì)尋址是以程序計(jì)數(shù)器pc的當(dāng)前值作為基地址,與指令中的第二字節(jié)給出的相對(duì)偏移量rel進(jìn)行相加,所得和為程序的轉(zhuǎn)移地址。相對(duì)偏移量rel是一個(gè)用補(bǔ)碼表示的8位有符號(hào)數(shù),rel的范圍為+127128字節(jié)之間。例如:sjmp 08hjz 30h7位尋址位尋址給出的是直接地址。例如:setb et02.3 指令系統(tǒng);單片機(jī)指令分為五類:1, 數(shù)據(jù)傳送類;2, 算術(shù)遠(yuǎn)算類;3, 邏輯轉(zhuǎn)移類;4, 控制轉(zhuǎn)移類;5, 位操作。1, 數(shù)據(jù)傳送類(29條)屬于這一類的助記符有:mov 、movc、movx、xch、xchd、pu

21、sh、pop、mov a ,rn、mov ri ,a ri directdirect #data #data、mov rn ,a、mov direct1 , adirect #data#data direct2 ri rn注: 書寫時(shí),不要漏掉“,”號(hào)。 執(zhí)行后不影響任何標(biāo)志位。例:設(shè)片內(nèi)ram 30h單元內(nèi)容為40h,第40h單元內(nèi)容為10h,p1口作為輸入口,其輸入數(shù)據(jù)為cah,求經(jīng)下列程序段執(zhí)行后的結(jié)果。movr0,#30hmova,r0movr1,amov b,r1movr1,p1mov p2,p1、movx a , dptr 、movc a ,a+dptr ri a+pc、movx

22、dptr , a ri , a、xch a ,rn 、xchd a ,ri ri dptr direct、movdpt,#data16 、push directpop direct注:由于復(fù)位后,sp的值為07h,這就會(huì)出現(xiàn)堆棧區(qū)與工作寄存器區(qū)兩者重疊。為此,必須在程序的開頭部分通過指令重新定義堆棧區(qū)域。如:mov sp, #70h2、算術(shù)運(yùn)算類(24條形碼)屬于這一類的助記符有:add,addc,incsubb,decmul,div,da、add rn、incaaddca ,rirnsubb #datari directdirectdptr、deca、mul abrndivabridaadi

23、rect3、邏輯運(yùn)算類(24條)屬于這一類的助記符有:anl,orl,xrl,cpl,clranla rn anla,rianladirect anla#data anl direct, a anl direct, #data orl a, rn orl a, direct orl a, ri orl a, #data orl direct, #data orl direct, a xrl a, rn xrl a, direct xrl a, #data xrl a, ri xrl direct, a xrl direct, #datacplaclrarlarlcarrarrcaswap a4

24、、控制轉(zhuǎn)移類(17條)屬于這一類的助記符有:jmp,ljmp,ajmp, lcall,acall,sjmpjz,jnz,djnz,cjne、jmpa+dptr、nopljmpaddr16retajmpaddr11retilcalladdr16、jzrelacalladdr11jnzrelsjmprel(地址范圍為)djnzrn ,rel direct ,rel、cjnern ,#data,rela,#data, relri, #data,rela,direct, rel5、位操作指令(17條)屬于這一類的助記符有:jb,jnb,jbc,clr,setb,cpl,anl,orl,mov、clr

25、c、setbcbitbit、cplc、anlc ,bitbit/bit、orlc ,bit、movc,bitc ,/bitbit,c、jb bit ,rel 、jc reljnbbit ,rel jnc reljbcbit ,rel、2.4 匯編語言程序設(shè)計(jì)基礎(chǔ);程序設(shè)計(jì)語言可分為三類:機(jī)器語言、匯編語言、高級(jí)語言。機(jī)器語言:當(dāng)指令和地址采用二進(jìn)制代碼表示時(shí),稱之為機(jī)器語言。cpu直接識(shí)別和執(zhí)行的是機(jī)器語言代碼,但是,機(jī)器語言對(duì)人們來說不便于記憶和交流,而且極易出錯(cuò),故一般不采用機(jī)器語言直接編程。但是,對(duì)于任何其他語言編寫的程序,或者說計(jì)算機(jī)所執(zhí)行的每一操作,最終都必須轉(zhuǎn)換為機(jī)器語言的指令代碼

26、,cpu才能識(shí)別和執(zhí)行。匯編語言:是一種采用助記符來表示的機(jī)器語言,即用助符號(hào)來代表指令的操作碼和操作數(shù),用標(biāo)號(hào)或符號(hào)代表地址、常數(shù)或變量。這種用助記符編寫的程序稱為源程序,匯編語言必須翻譯成機(jī)器語言的目標(biāo)代碼(目標(biāo)程序),計(jì)算機(jī)才能執(zhí)行。高級(jí)語言:使用接近人們習(xí)慣的自然語言的英語縮寫和數(shù)學(xué)表達(dá)的形式編寫程序,這樣就可以大大提高編程的效率。用高級(jí)語言編寫的源程序,需要經(jīng)編譯程序翻譯成機(jī)器語言表示的目標(biāo)程序,計(jì)算機(jī)方能執(zhí)行。2.5 偽指令mcs-51單片機(jī)匯編語言中常用的偽指令如下:1org(匯編起始地址)格式:org 16位地址2end(結(jié)束匯編)格式:end功能:匯編語言源程序的結(jié)束標(biāo)志,即

27、通知匯編程序不再繼續(xù)往下匯編。3equ(等值)格式:標(biāo)志符 equ 數(shù)或匯編符號(hào)功能:把數(shù)或匯編符號(hào)賦給標(biāo)識(shí)符,且只能賦值一次。如:loop equ 20h4db(定義字節(jié))格式: 標(biāo)號(hào): db 項(xiàng)或項(xiàng)表功能:將項(xiàng)或項(xiàng)表中的字節(jié)(8位)數(shù)據(jù)依次存入標(biāo)號(hào)所示的存儲(chǔ)單元中。使用時(shí),項(xiàng)與項(xiàng)之間用“,”分隔;字符型數(shù)據(jù)用“”括起來;數(shù)據(jù)可采用二進(jìn)制、十六進(jìn)制及ascll碼等形式表示。例如:tab: db 12h,0afh,“9”5dw(定義字)格式:標(biāo)號(hào): dw 項(xiàng)或項(xiàng)表功能:功能:將項(xiàng)或項(xiàng)表中的字(16位)數(shù)據(jù)依次存入標(biāo)號(hào)所示的存儲(chǔ)單元中。例如:tab: dw 0112h,04afh6ds(定義存儲(chǔ)

28、單元)格式:標(biāo)號(hào):ds 數(shù)字功能:從標(biāo)號(hào)所指示的單元開始,根據(jù)數(shù)字的值保留一定數(shù)量的字節(jié)存儲(chǔ)單元,留給以后存儲(chǔ)數(shù)據(jù)用。例如:space:ds 107bit(地址符號(hào)命令)格式:標(biāo)識(shí)符 bit 位地址功能:將位地址賦以標(biāo)識(shí)符。例如:a1 bit p1.0經(jīng)以上定義后,a1就可當(dāng)作位地址來使用。mov c,a12.6 程序設(shè)計(jì)實(shí)例;程序1:求符號(hào)函數(shù)。 設(shè)x、y分別為30h、31h單元。分析:由設(shè)計(jì)要求可以看出,程序有三條路徑需要選擇,因此需要采用分支程序設(shè)計(jì),其流程圖如圖2-1所示。開始0yx=0?x0?2y1y結(jié)束yynn圖2-1 符號(hào)函數(shù)流程圖程序如下:org 2000hxequ30hyeq

29、u31hmova,xjzloop0;a為0值,轉(zhuǎn)loop0jbacc.7,loop1;最高位為1,為負(fù)數(shù)mova,#01h;a1sjmploop0loop1:mova,#02h;a2loop0:movy,a;yasjmp$end程序2:在內(nèi)部ram的42h開始的連續(xù)單元中存放一組8位無符號(hào)數(shù),該數(shù)組長度n(n3dh)存放在41h中,找出這組數(shù)中的最大數(shù),并將其存入內(nèi)部ram的40h單元中。分析:可以先將第一個(gè)數(shù)組元素送40h單元內(nèi),然后將數(shù)組中的其它數(shù)依次與其比較,若大于40h中的值,則取代它再比較下一位。直到所有元素都比較完。此時(shí)40h單元中即為最大值。程序:org2000hmovr0,#4

30、2hmov40h,r0dec41hloop:incr0mova,r0cjnea,40h,compcomp:jcnextmov40h,anext:djnz41h,loopsjmp$end程序3:編寫程序?qū)崿F(xiàn)延時(shí)1min分析:可利用cpu中每執(zhí)行一條指令都有固定的時(shí)序這一特征,令其重復(fù)執(zhí)行某些指令從而達(dá)到延時(shí)的目的。程序:delay:movr7,#0e6h1loop1:mov r6,#0ffh1loop2:movr5,#0ffh1loop3:nop1nop1djnzr6,loop32djnzr6,loop22djnz r7,loop12ret2程序中:內(nèi)循環(huán)一次所需機(jī)器周期數(shù)=(1+1+2)個(gè)=4

31、個(gè)。內(nèi)循環(huán)共循環(huán)255次的機(jī)器周期數(shù)=4255個(gè)=1020個(gè)。次外循環(huán)一次所需機(jī)器周期數(shù)=(4255+1+2)個(gè)=1023個(gè)。次外循環(huán)共循環(huán)255次,所以該子程序總的機(jī)器周期數(shù)=(2551023+1+2)個(gè)=260868個(gè)。外循環(huán)一次所需機(jī)器周期數(shù)=(260868+1+2)個(gè)=260871個(gè)。外循環(huán)共循環(huán)255次,所以該子程序總的機(jī)器周期數(shù)=(230260871+1+2)個(gè)=60,000,033個(gè)。因?yàn)橐粋€(gè)機(jī)器周期為12個(gè)時(shí)鐘周期,所以該子程序延時(shí)間=26086812/。程序4:編寫一個(gè)循環(huán)閃爍燈程序,用p1口的p1.0p1.7分別控制8個(gè)發(fā)光二極管的陰極,每次其中某個(gè)燈閃爍點(diǎn)亮2次,依次進(jìn)行

32、,循環(huán)不止。程序:mova,#0fehshift:lcallflashrrasjmpshiftflash:movr2,#02hflash1:movp1,alcalldelaymovp1,#00hlcalldelaydjnzr2,flash1ret思考題:題1:編寫一個(gè)循環(huán)閃爍燈程序,用p1口的p1.0p1.7分別控制8個(gè)發(fā)光二極管的陰極,每次其中兩個(gè)點(diǎn)亮,依次進(jìn)行,循環(huán)不止。題2:編寫一個(gè)循環(huán)閃爍燈程序,用p1口的p1.0p1.7分別控制8個(gè)發(fā)光二極管的陰極,由兩邊向中間的燈依次點(diǎn)亮,循環(huán)不止。題3:在內(nèi)部ram的42h開始的連續(xù)單元中存放一組8位無符號(hào)數(shù),該數(shù)組長度n(n3dh)存放在41h

33、中,找出這組數(shù)中的最小數(shù),并將其存入內(nèi)部ram的40h單元中。第三章 c51及程序設(shè)計(jì)3.1 c語言的重要知識(shí)點(diǎn)3.1.1 c的數(shù)據(jù)類型c語言中數(shù)據(jù)有常量和變量之分,它們分別屬于以下這些類型。常量:在程序運(yùn)行過程中,其值不能改變的量。如3、-1、a、經(jīng)#define price 30后,price為一常量,其值為30。變量:其值可以改變的量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,如圖。 3a變量名變量值存儲(chǔ)單元c語言規(guī)定變量必須先定義后使用。標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成。且第一個(gè)字符必須為字母或下劃線。習(xí)慣上,符號(hào)常量名用大寫,變量名用小寫,以示區(qū)別。數(shù)據(jù)類型定義如

34、基本類型整型整形常量:即整常數(shù)。12、0x12整形變量:定義符為int、signed int、unsigned int、signed short int、unsigned short int、long int、unsigned long int字符型字符型常量:用單撇號(hào)括起來的一個(gè)字符。a、?字符串型常量:用雙撇號(hào)括起來的一個(gè)字符。“china”、“ 123.2”字符型變量:定義符為char實(shí)型實(shí)型常量:分為十進(jìn)制小數(shù)形式和指數(shù)形式12345、123e3實(shí)型變量:定義符為float、double、long double枚舉類型構(gòu)造類型數(shù)組類型結(jié)構(gòu)體類型共用體類型指針類型空類型一、 算術(shù)運(yùn)算符和

35、算術(shù)表達(dá)式c的運(yùn)算符有以下幾類:1算術(shù)運(yùn)算符: (+ - * / %)2關(guān)系運(yùn)算符: ( = = = = !=)3邏輯運(yùn)算符: (! & |)4.位運(yùn)算符: ( | (異或) &)5賦值運(yùn)算符: ( = )6條件運(yùn)算符: (? :)7逗號(hào)運(yùn)算符: ( , )8指針運(yùn)算符: (* &)9.自增、自減運(yùn)算符: (+ -)二、逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式逗號(hào)表達(dá)式形式:表達(dá)式1,表達(dá)式23.1.2 c語句一、c語句可以分為以下5類1控制語句:c語言有9種控制語句,它們是:(表示內(nèi)嵌的語句)(1).ifelse(2).for()(3).while()(4).dowhile()(5).continue (6)

36、.break 結(jié)束整個(gè)循環(huán)(7).switch 結(jié)束本次循環(huán)(8).goto(9).return2函數(shù)調(diào)用語句 如:printf(“this is a c statement”)3表達(dá)式語句 如:賦值語句4空語句 如: ; 二、數(shù)據(jù)的輸入輸出c語言函數(shù)庫中有一批“標(biāo)準(zhǔn)輸入輸出函數(shù)”,它們是:putchar(輸出字符),getchar(輸入字符),printf(格式輸出),scanf(格式輸入),puts(輸出字符串),gets(輸入字符串。三、選擇結(jié)構(gòu)程序設(shè)計(jì)1if語句有三種形式if(表達(dá)式)語句 如:if(xy)printf(“%d”,x);if(表達(dá)式) 語句1 else 語句2 如:if

37、(xy)printf(“%d”,x); else printf(“%d”,y);if(表達(dá)式1) 語句1 else if(表達(dá)式2) 語句2else if(表達(dá)式3) 語句3else 語句n2條件運(yùn)算符:格式: 表達(dá)式1?表達(dá)式2:表達(dá)式3如:max=( a b )? a : b 3.switch語句格式:switch(表達(dá)式)case 常量表達(dá)式1:語句1 case 常量表達(dá)式2:語句2case 常量表達(dá)式n:語句ndefault :語句n+1四、循環(huán)控制語句構(gòu)成循環(huán)語句的語句有:1goto語句和if語句構(gòu)成循環(huán);p1072.while語句格式:while(表達(dá)式) 語句 p1073.do-

38、while語句格式:do 循環(huán)體語句 while (表達(dá)式);p1094.for語句格式:for(循環(huán)變量賦值初值;循環(huán)條件;循環(huán)變量增值)語句 如:for(i=1;i=100;i+) sum=sum+i;五、數(shù)組一維數(shù)組定義方式:類型說明符 數(shù)組名常量表達(dá)式;如:int a10二維數(shù)組定義方式:類型說明符 數(shù)組名常量表達(dá)式 常量表達(dá)式; 如: float a23,b33六、函數(shù)一個(gè)較大的程序一般應(yīng)分為若干個(gè)程序模塊,每一個(gè)模塊用來實(shí)現(xiàn)一個(gè)特定功能。所有的高級(jí)語言中都有子程序這個(gè)概念,用子程序?qū)崿F(xiàn)模塊的功能。在c語言中,子程序的作用是由函數(shù)完成的。一個(gè)c程序可由一個(gè)主函數(shù)和若干個(gè)函數(shù)構(gòu)成。由主

39、函數(shù)調(diào)用其它函數(shù),其他函數(shù)也可以互相調(diào)用。同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次。在程序設(shè)計(jì)中,常將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫中供公共選用。要善于利用函數(shù),以減少重復(fù)編寫程序段的工作量。、一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成。、一個(gè)c程序由一個(gè)或多個(gè)源程序文件組成。、c程序的執(zhí)行從main函數(shù)開始。、所有函數(shù)都是平行的,即在定義函數(shù)時(shí)是互相獨(dú)立,一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù)。、調(diào)用庫函數(shù)的方式為:#include #include 、函數(shù)的調(diào)用方式為:把函數(shù)語句作為一個(gè)語句,如:float add(float x, float y);3.2 c51與c的區(qū)別一、如何調(diào)用單片機(jī)內(nèi)

40、部資源#include二、存儲(chǔ)區(qū)的描述變量的聲明中還包括了對(duì)存儲(chǔ)類型的指定,即指定變量存放的位置。存儲(chǔ)區(qū)描述dataram的低128字節(jié),可在一個(gè)周期內(nèi)直接尋址。由于為尋址最快,所以應(yīng)該把經(jīng)常使用的變量放在data區(qū)。例:unsigned char data system_status=0;char data inp16;bdatadata區(qū)可字節(jié),位混合尋址的16字節(jié)區(qū)。idataram區(qū)的高128字節(jié),必須采用間接尋址。xdata外部存儲(chǔ)區(qū),使用dptr間接尋址pdata外部存儲(chǔ)區(qū)的256字節(jié),通過p0口的地址對(duì)其尋址,使用指令movx rn,需要兩個(gè)指令周期。code程序存儲(chǔ)區(qū)使用dpt

41、r尋址,程序存儲(chǔ)區(qū)的數(shù)據(jù)是不可改變的。如固化表格的聲明會(huì)表示為:uc code moto_back=0x99,0x88,0xcc,0x44,0x66,0x22,0x33,0x11;三、如何定義字#define uc unsigned char#define ui unsigned int#define hi (65536-1500)/256)#define lo (65536-1500)%256)四、如何定義位sbit rs=p20;sbit rw=p21;sbit e=p22;五、如何定義表格uc code moto_back=0x99,0x88,0xcc,0x44,0x66,0x22,0x

42、33,0x11;六、如何進(jìn)入中斷中斷函數(shù)的完整語法及示例如下:返回值 函數(shù)名 interrupt n using n如:void timer0() interrupt 1 using2 五、匯編與c51的混合編程#pragma asm匯編行#pragma endasm同時(shí)還需進(jìn)行以下設(shè)置:這種方法是通過asm與endasm告訴c51編譯器,中間行不用編譯為匯編行,例如:#include sbit led=p10;void delay();void main()led=0;while(1)led=led;delay();led=led;delay();void delay()#pragma as

43、mmovr7,#0e6hloop1:mov r6,#0ffhloop2:nopnopdjnzr6,loop2djnz r7,loop1#pragma endasm六、c51使用規(guī)范為了增強(qiáng)程序的可讀性,便于源程序的交流,減少合作開發(fā)中的障礙,應(yīng)當(dāng)在編寫c51程序時(shí)遵循一定的規(guī)范。1、開始的注釋。/*/*公司名稱*/*模塊名:lcd模塊,lcd型號(hào):lcm1602*/*創(chuàng)建人:劉二,日期:2010-9-25*/*修改人:王五,日期:2010-9-25*/*功能描述:*/*其他說明:*/*版本:*/*/2、函數(shù)開頭的注釋內(nèi)容/*/*函數(shù)名:*/*功能描述:lcd初始化*/*調(diào)用函數(shù):*/*全局變量

44、:*/*輸入:*/*輸出:*/*返回:*/*創(chuàng)建人:劉二,日期:2010-9-25*/*修改人:王五,日期:2010-9-25*/*/3、程序中的注釋內(nèi)容一般為方便理解的注釋等。3.3 c51程序設(shè)計(jì)實(shí)例第四章 mcs-51單片機(jī)的中斷系統(tǒng)4.1 中斷的概念中斷是指在cpu正在處理某項(xiàng)事務(wù)的時(shí)候,如果外界或內(nèi)部發(fā)生了緊急事件,要求cpu暫停正在運(yùn)行的工作轉(zhuǎn)而去處理這個(gè)緊急事件,待處理完后再回到原來被中斷的地方,繼續(xù)原來被打斷了的工作過程。如圖4-1所示。實(shí)現(xiàn)這種功能的機(jī)構(gòu)稱為中斷系統(tǒng),產(chǎn)生中斷的請(qǐng)求源叫中斷源。mcs-51單片機(jī)允許有多個(gè)中斷源,當(dāng)有多個(gè)中斷源同時(shí)請(qǐng)求中斷時(shí),通過設(shè)置優(yōu)先級(jí)來處

45、理出現(xiàn)的問題。處理完優(yōu)先級(jí)高的中斷請(qǐng)求后再來處理優(yōu)先級(jí)低的中斷。mcs-51單片機(jī)內(nèi)部有五個(gè)中斷源。主程序高級(jí)中斷低級(jí)中斷返回返回中斷中斷圖4-1 中斷嵌套流程圖4.2 mcs-51中斷系統(tǒng)結(jié)構(gòu)及中斷控制mcs-51系列單片機(jī)有5個(gè)中斷源,包括2個(gè)外部中斷源和3個(gè)內(nèi)部中斷源。2個(gè)外部中斷源是外部中斷點(diǎn)0(int0)和外部中斷1(int1),3個(gè)內(nèi)部中斷源是定時(shí)器/計(jì)數(shù)器0溢出中斷、定時(shí)器/計(jì)數(shù)器1溢出中斷、串行口的發(fā)送和接收中斷(ti和ri)。8051單片機(jī)的中斷系統(tǒng)如圖4-2所示。圖4-2 8051單片機(jī)的中斷系統(tǒng)圖1,入口地址最高最低外中斷0矢量(/int0):0003h定時(shí)器0(t0): 000bh外中斷1矢量(/int1):0013h定時(shí)器1(t1): 001bh2、與之有關(guān)的幾個(gè)寄存器ie,ip,tcon,tmod,、中斷允許寄存器ieea:總允許位ea0 禁止一切中斷ea1 各中斷分別由各自允許位控制exo:into中斷允許位ex00 禁止外部中斷0中斷ex01 允許外部中斷0中斷eto:t0中斷允許位ex1:int1中斷允許位et1

溫馨提示

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