第5章STC單片機(jī)匯編語言編程模型_第1頁
第5章STC單片機(jī)匯編語言編程模型_第2頁
第5章STC單片機(jī)匯編語言編程模型_第3頁
第5章STC單片機(jī)匯編語言編程模型_第4頁
第5章STC單片機(jī)匯編語言編程模型_第5頁
已閱讀5頁,還剩163頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章STC單片機(jī)匯編語言

編程模型何賓2015.02匯編語言程序結(jié)構(gòu)匯編代碼中段的分配匯編語言符號(hào)及規(guī)則匯編語言操作數(shù)描述匯編語言控制描述KeilμVision集成開發(fā)環(huán)境介紹KeilμVision5匯編語言設(shè)計(jì)流程單片機(jī)端口控制匯編語言程序設(shè)計(jì)單片機(jī)中斷匯編語言程序設(shè)計(jì)本章主要內(nèi)容匯編語言程序結(jié)構(gòu)實(shí)際上,所謂的匯編語言程序就是按照一定的規(guī)則組合在一起的機(jī)器語言助記符和匯編器助記符命令。這些按一定規(guī)則組合在一起的匯編語言助記符機(jī)器指令,能通過軟件開發(fā)環(huán)境的處理,轉(zhuǎn)換成可以在STC8051CPU上按照設(shè)計(jì)要求運(yùn)行的機(jī)器代碼。匯編語言程序結(jié)構(gòu)NAMEmain;聲明模塊my_segSEGMENTCODE;聲明代碼段my_segRSEGmy_seg

;切換到代碼段my_segTABLE:DB3,2,5,0xFF;聲明四個(gè)常數(shù)

myprogSEGMENTCODE;聲明代碼段myprogRSEGmyprog;切換到代碼段myprogLJMPmain;在程序存儲(chǔ)器地址0x0000的位置跳轉(zhuǎn)

USING0;使用第0組寄存器

ORG100H;定位到代碼段100H的位置

匯編語言程序結(jié)構(gòu)main:MOVDPTR,#TABLE;將TABLE表的地址送

;給DPTR寄存器MOVA,#3;將立即數(shù)3送到累加器A中MOVCA,@A+DPTR

;將(A)+(DPTR)所指向的程序

;Flash的內(nèi)容送給累加器A MOVP1,0

;給P1端口清零MOVP1,A

;將累加器A的內(nèi)容送到P1端口END注:進(jìn)入本書配套資料\STC_example\例子5-1\目錄下,打開并參考該設(shè)計(jì)匯編代碼中段的分配在一個(gè)由匯編語言所構(gòu)建的程序代碼中,包括:絕大部分代碼都是機(jī)器語言助記符。這些程序代碼中的機(jī)器語言助記符經(jīng)過軟件處理后變成機(jī)器指令(機(jī)器碼),然后保存在程序存儲(chǔ)器中。通常地,將保存程序代碼的區(qū)域稱為代碼段。根據(jù)程序設(shè)計(jì)的復(fù)雜度,需要提供代碼中所需數(shù)據(jù)所在的位置。這些需要操作的數(shù)可能保存在不同的存儲(chǔ)空間中。因此,就需要在程序中明確的說明這些數(shù)據(jù)所存放的位置。在STC15系列單片機(jī)中,提供了片內(nèi)基本RAM、片內(nèi)擴(kuò)展RAM等存儲(chǔ)單元。通常地,將保存數(shù)據(jù)的區(qū)域統(tǒng)稱為數(shù)據(jù)段。注:更具體的劃分,會(huì)根據(jù)不同的CPU的結(jié)構(gòu)有所不同。匯編代碼中段的分配在運(yùn)行程序的過程中,可能還需要對(duì)8051CPU內(nèi)功能部件的狀態(tài)進(jìn)行保存和恢復(fù)操作。前面已經(jīng)說明,這是由堆棧機(jī)制實(shí)現(xiàn)的。在這種情況下,就需要明確指出保存這些運(yùn)行狀態(tài)的存儲(chǔ)空間大小和位置。注:在任何一個(gè)程序中,必須要有代碼段,而其它段的存在與否,由具體的程序模型決定。匯編代碼中段的分配

--CODE段CODE段,也稱為代碼段,它是用來保存程序中匯編助記符描述的機(jī)器指令部分。CODE放在STC單片機(jī)中的程序Flash存儲(chǔ)空間。CODE段可以由MOVC指令,并且通過DPTR寄存器進(jìn)行訪問。匯編代碼中段的分配

--CODE段代碼清單定義和訪問CODE段的代碼my_segSEGMENTCODE;定義為CODE段

RSEGmy_segTABLE:DB1,2,4,8,0x10

;定義常數(shù)表myprogSEGMENTCODE;定義CODE段RSEGmyprogMOVDPTR,#TABLE;加載TABLE的地址MOVA,#3

;加載偏移量MOVCA,@A+DPTR;通過MOVC指令訪問END匯編代碼中段的分配

--BIT段在8051匯編語言中,BIT段可以用來保存比特位,可以通過指令系統(tǒng)中的位操作指令來訪問BIT段。注:可以通過位操作指令訪問特殊功能寄存器SFR??晌粚ぶ返牡刂分荒苁强梢员?整除的地址。典型地,包括:80H,88H,90H,98H,0A0H,,0A8H,0B0H,0B8H,0C0H,0C8H,0D0H,0D8H,0E0H,0E8H,0F0H和0F8H地址空間。匯編代碼中段的分配

--BIT段代碼清單定義和訪問BIT段的代碼mybitsSEGMENTBIT;定義BIT段RSEGmybitsFLAG:DBIT1;保留1位空間P1DATA90H;8051SFR端口1GREEN_LEDBITP1.2;在端口P1的第2引腳P1.2定義符號(hào)GREEN_LEDmyprogSEGMENTCODE;定義為代碼段RSEGmyprog

LJMPmain;無條件跳轉(zhuǎn)到main

ORG100H

;定位到100H的位置匯編代碼中段的分配

--BIT段main:SETBGREEN_LED;P1.2=1

JBFLAG,is_on

;到DATA的直接訪問

SETBFLAGCLRACC.5;復(fù)位ACC的第5位:is_on:CLRFLAGCLRGREEN_LED;P1.2=0END注:進(jìn)入本書配套資料\STC_example\例子5-2\目錄下,打開并參考該設(shè)計(jì)匯編代碼中段的分配

--IDATA段在8051匯編語言中,可以定義IDATA段。在IDATA段可以定義少量的變量,這些變量將最終保存在STC單片機(jī)的片內(nèi)RAM的高地址和低地址區(qū)域中。注:IDATA的低128個(gè)字節(jié)和DATA段重疊??梢酝ㄟ^寄存器R0或者R1,間接尋址保存在IDATA段中的變量。匯編代碼中段的分配

--IDATA段代碼清單定義和訪問IDATA段的代碼myvarsSEGMENTIDATA;定義IDATA段RSEGmyvarsBUFFER:DS100

;保留100個(gè)字節(jié)myprogSEGMENTCODE;定義CODE段RSEGmyprog

LJMPmain;無條件跳轉(zhuǎn)到mainORG100H

;定位到100H的位置main:

MOVR0,#BUFFER;將BUFFER的地址加載到R0寄存器

MOVA,@R0;讀緩沖區(qū)的內(nèi)容到寄存器A

INCR0

;R0內(nèi)的地址遞增

MOV@R0,A

;將A內(nèi)容寫到BUFFER+1存儲(chǔ)空間END注:進(jìn)入本書配套資料\STC_example\例子5-3\目錄下,打開并參考該設(shè)計(jì)匯編代碼中段的分配

--DATA段在8051匯編語言中,定義了DATA段,該段指向STC單片機(jī)內(nèi)部數(shù)據(jù)RAM的低128個(gè)字節(jié)。通過直接和間接尋址方式,程序代碼可以訪問在DATA段中的變量。匯編代碼中段的分配

--DATA段

代碼清單定義和訪問DATA段的代碼myvarSEGMENTDATA

;定義DATA段RSEGmyvarVALUE:DS1;在DATA空間保存一個(gè)字節(jié)IO_PORT2DATA0A0H

;特殊功能寄存器VALUE2DATA20H;存儲(chǔ)器的絕對(duì)地址myprogSEGMENTCODE

;定義CODE段

RSEGmyprog

LJMPmain;無條件跳轉(zhuǎn)到main

ORG100H;定位到100H的位置匯編代碼中段的分配

--DATA段main:MOVA,IO_PORT2

;直接訪問DATAADDA,VALUEMOVVALUE2,A

MOVR1,#VALUE;加載VALUE的值到R1

ADDA,@R1;間接訪問VALUEEND注:進(jìn)入本書配套資料\STC_example\例子5-4\目錄下,打開并參考該設(shè)計(jì)匯編代碼中段的分配

--XDATA段在8051匯編語言中,定義了XDATA段,XDATA段指向擴(kuò)展RAM區(qū)域。通過寄存器DPTR和MOVX指令,程序代碼就可以訪問XDATA段。對(duì)于一個(gè)單頁的XDATA存儲(chǔ)空間來說,也可以通過寄存器R0和R1訪問。匯編代碼中段的分配

--XDATA段

代碼清單定義和訪問XDATA段的代碼my_segSEGMENTXDATA;定義XDATA段RSEGmy_segXBUFFER:DS2;保留2個(gè)字節(jié)存儲(chǔ)空間myprogSEGMENTCODE;定義CODE段RSEGmyprog

LJMPmain;無條件跳轉(zhuǎn)到main

ORG100H;定位到100H的位置匯編代碼中段的分配

--XDATA段main:MOVDPTR,#XBUFFER

;XBUFFER的地址送到DPTR寄存器CLRA

;累加器A清0MOVX@DPTR,A;將累加器A的內(nèi)容送給DPTR指向的

;XBUFFER區(qū)域INCDPTR

;寄存器DPTR的內(nèi)容加1CLRA;累加器A清0MOVX@DPTR,A;累加器A的內(nèi)容送給DPTR指向的END;XBUFFER區(qū)域注:進(jìn)入本書配套資料\STC_example\例子5-5\目錄下,打開并參考該設(shè)計(jì)匯編語言符號(hào)及規(guī)則

--符號(hào)的命名規(guī)則在AX51匯編器中,符號(hào)最多可以由31個(gè)字符組成。符號(hào)中的字符可以包括:A~Z之間的大寫字母;a~z之間的小寫字母;0~9之間的數(shù)字;空格字符問號(hào)字符.注:數(shù)字不可以作為符號(hào)的開頭;匯編語言符號(hào)及規(guī)則

--符號(hào)的作用在匯編語言中,符號(hào)的作用包括:使用EQU或者SET控制描述,將一個(gè)數(shù)值或者寄存器名賦給一個(gè)指定的符號(hào)名,例如:

NUMBER_FIVEEQU5TRUE_FLAGSET1FALSE_FLAGSET0匯編語言符號(hào)及規(guī)則

--符號(hào)的作用在匯編程序中,符號(hào)可以用來表示一個(gè)標(biāo)號(hào)。其中:標(biāo)號(hào)用于在程序或者數(shù)據(jù)空間內(nèi)定義一個(gè)位置(地址)。標(biāo)號(hào)是該一行的第一個(gè)字符域。標(biāo)號(hào)后面必須跟著‘:’符號(hào)。一行只能定義一個(gè)標(biāo)號(hào),例如:

LABEL1:DJNZR0,LABEL1在匯編程序中,符號(hào)可以用于表示一個(gè)變量的位置,例如:SERIAL_BUFFERDATA99h匯編語言操作數(shù)描述

--數(shù)字?jǐn)?shù)字以十六進(jìn)制數(shù)、十進(jìn)制數(shù)、八進(jìn)制數(shù)和二進(jìn)制數(shù)的形式指定。如果沒有指定數(shù)字的形式,默認(rèn)為十進(jìn)制數(shù)。對(duì)于:十六進(jìn)制數(shù):后綴H,h,有效數(shù)字在0~9,A~F或a~f之間例如:0FH,0FFH;

注:(1)當(dāng)其第一個(gè)數(shù)字在A~F之間時(shí),必須加前綴‘0’。(2)十六進(jìn)制數(shù)也可使用C語言的表示方法,例如:0x12AB。匯編語言操作數(shù)描述

--數(shù)字十進(jìn)制數(shù):后綴D,d(可無后綴),有效數(shù)字在0~9之間。例如:1234,20d;八進(jìn)制數(shù):后綴O,o,有效數(shù)字在0~7之間。例如:25o,65O;二進(jìn)制數(shù):后綴B,b,有效數(shù)字0和1。例如:111b,10100011B;注:可以在數(shù)字之間插入符號(hào)‘$’,用于增加數(shù)字的可讀性,比如:1$2$3$4等效于1234。匯編語言操作數(shù)描述

--字符在表達(dá)式中可以使用ASCII字符來生成數(shù)字值。表達(dá)式可以由單引號(hào)包含的兩個(gè)ASCII字符組成。注:字符個(gè)數(shù)不能超過兩個(gè),否則在對(duì)匯編程序處理的過程中會(huì)報(bào)錯(cuò)。在匯編語言的任何地方都可以使用字符,它可以用來作為立即數(shù)。例如:‘A’表示0041h,‘a(chǎn)’表示0061h。匯編語言操作數(shù)描述

--字符串字符串與匯編器描述符DB一起使用,用來定義在AX51匯編程序中的消息。字符串用一對(duì)單引號(hào)''包含。比如:KEYMSG:DB'Pressanykeytocontinue.'該聲明將在KEYMSG指向的緩沖區(qū)內(nèi)生成下面的十六進(jìn)制數(shù),即:50h、72h、65h、73h、73h、20h、…、6Eh、75h、65h、2Eh。匯編語言操作數(shù)描述

--位置計(jì)數(shù)器在AX51匯編器中,為每個(gè)段保留了一個(gè)位置計(jì)數(shù)器。在這個(gè)計(jì)數(shù)器中,包含了指令或者數(shù)據(jù)的偏移地址。默認(rèn)地,將位置計(jì)數(shù)器初始化為0。可以用ORG描述修改位置計(jì)數(shù)器的初值。在表達(dá)式中,使用’$’符號(hào),用于得到位置計(jì)數(shù)器當(dāng)前的值,例如:使用位置計(jì)數(shù)器確定一個(gè)字符串的長(zhǎng)度。比如:

msg:DB'Thisisamessage',0

msg_len:EQU$-msg匯編語言操作數(shù)描述

--操作符優(yōu)先級(jí)操作符1()2(1)NOT、HIGH、LOW、(2)BYTE0、BYTE1、BYTE2、BYTE3、(3)WORD0、WORD2、MBYTE3一元+、一元-4*、/、MOD5+、-6SHL、SHR7AND、OR、XOR8EQ、=、NE、<>、LT、<、LTE、<=、GT、>、GTE、>=操作符及優(yōu)先級(jí)匯編語言操作數(shù)描述

--操作符注:(1)1級(jí)具有最高的優(yōu)先級(jí),8級(jí)優(yōu)先級(jí)最低。(2)SHL表示左移運(yùn)算、SHR表示右移運(yùn)算。(3)BYTEx根據(jù)x所指定操作數(shù)的位置,返回相應(yīng)的字節(jié)。例如:BYTE0返回最低的字節(jié)(與LOW等效);BYTE1返回緊挨BYTE0的字節(jié)(與HIGH等效),如下表所示。(4)WORDx根據(jù)x指定的操作數(shù)的位置,返回相應(yīng)的字。例如:WORD1返回最低的字(16位);WORD2返回最高的兩個(gè)字節(jié)(16位)。匯編語言操作數(shù)描述

--操作符(5)

MBYTEx

操作符返回用于C51實(shí)時(shí)庫的存儲(chǔ)器類型信息。所得到的值是存儲(chǔ)器類型字節(jié)。這些存儲(chǔ)器類型字節(jié)用在C51實(shí)時(shí)庫中用于訪問帶有”far"存儲(chǔ)器類型定義的變量。MSB

32位操作數(shù)LSBBYTE3BYTE2BYTE1BYTE0WORD2WORD1

HIGHLOW位操作數(shù)的分配匯編語言操作數(shù)描述

--表達(dá)式表達(dá)式是操作數(shù)和操作符的組合,該表達(dá)式由匯編器計(jì)算。沒有操作符的操作數(shù)是最簡(jiǎn)單的表達(dá)式。表達(dá)式能用在操作數(shù)所要求的地方。代碼清單表達(dá)式用法代碼清單EXTRNCODE(CLAB);CODE空間的入口EXTRNDATA(DVAR);DATA空間的變量MSKEQU0F0H;定義符號(hào)來替換0xF0值VALUEEQUMSK-1;其它常數(shù)符號(hào)值FOOSEGMENTCODE

RSEGFOO匯編語言操作數(shù)描述

--表達(dá)式LJMPENTRY;ORG100HENTRY:MOVA,#40H;用常數(shù)加載累加器

MOVR5,#VALUE

;加載一個(gè)常數(shù)表示的符號(hào)值

MOVR3,#(0x20ANDMASK)

;一個(gè)計(jì)算例子

MOVR7,#LOW(VALUE+20H)

MOVR6,#1OR(MSKSHL4)

MOVR0,DVAR+20;DVAR地址加上20,加載R0寄存器

MOVR1,#LOW(CLAB+10);加載CLAB地址加10的低部分到寄存器R1

MOVR5,80H;加載地址80H的內(nèi)容到R5寄存器

SETB20H.2;設(shè)置20H.2END匯編語言控制描述

--地址控制地址控制描述用于控制程序計(jì)數(shù)器PC的指向和寄存器組的選擇,地址控制描述包括:EVEN:迫使位置計(jì)數(shù)器指向下一個(gè)偶數(shù)地址。例如:

MYDATA:SEGMENTDATAWORDRSEGMYDATAvar1:DSB1EVENvar2:DSW1匯編語言控制描述

--地址控制ORG:設(shè)置位置計(jì)數(shù)器指向一個(gè)指定的偏移量或地址。例如:ORG100hUSING:說明使用哪個(gè)寄存器組。例如:USING3;選擇第3組寄存器PUSHR2;將第3組中的R2寄存器入棧匯編語言控制描述

--條件匯編根據(jù)符號(hào)條件的真假,條件匯編控制模塊的運(yùn)行。條件匯編描述包括:IF:條件為真,匯編模塊。ELSE:如果前面的IF條件為假,則匯編模塊。ELSEIF:如果前面的IF和ELSEIF條件為假,則匯編模塊。ENDIF:結(jié)束IF模塊匯編語言控制描述

--條件匯編下面給出條件編譯的例子:IF(SWITCH=1)…ELSEIF(SWITCH=2)…ELSE…ENDIF匯編語言控制描述

--存儲(chǔ)器初始化

存儲(chǔ)器初始化描述包括:DB:該描述符用于說明所分配空間的類型是字節(jié).例如:TAB:DB2,3,5,7,11,13,17,19,';'DD:該描述符用于說明分配空間的類型是雙字,即4個(gè)字節(jié).例如:VALS:DD12345678h,98765432hDW:該描述符用于說明分配空間的類型是字,即2個(gè)字節(jié).例如:HERE:DW0匯編語言控制描述

--分配存儲(chǔ)器空間分配存儲(chǔ)器空間描述符,用于在存儲(chǔ)器內(nèi)為變量預(yù)先分配存儲(chǔ)空間。分配存儲(chǔ)器空間描述包括:DBIT:該描述符用于說明為變量所分配存儲(chǔ)空間的類型為比特,例如:A_FLAG:DBIT1;保留的存儲(chǔ)空間為1位DS(DSB):該描述符用于說明為變量所分配的存儲(chǔ)空間的類型為字節(jié)例如:TIME:DS8;保留的存儲(chǔ)空間為8個(gè)字節(jié)匯編語言控制描述

--分配存儲(chǔ)器空間DSD:該描述符用于說明為變量所分配的存儲(chǔ)空間的類型為雙字,即4個(gè)字節(jié)例如:COUNT:DSD9;保留的存儲(chǔ)空間為36個(gè)字節(jié)(4)DSW:該描述符用于說明為變量所分配的存儲(chǔ)空間的類型為字,即2個(gè)字節(jié)例如:COUNT:DSW9;保留的存儲(chǔ)空間為18個(gè)字節(jié)匯編語言控制描述

--過程聲明過程聲明用于說明過程的開始和結(jié)束。過程聲明描述主要包括:PROC:該描述符用于定義過程的開始。ENDP:該描述符用于定義過程的結(jié)束。LABEL:該描述符為符號(hào)名分配一個(gè)地址。標(biāo)號(hào)后面可以跟一個(gè)“:”,或者不用。標(biāo)號(hào)繼承了當(dāng)前活動(dòng)代碼的屬性,因此不能在程序段之外使用。格式如下:標(biāo)號(hào)名:LABEL[類型]匯編語言控制描述

--過程聲明過程聲明的格式如下:

過程名字PROC[類型]

;匯編助記符

;匯編助記符

......

;過程名字ENDP匯編語言控制描述

--過程聲明其中:類型說明用于規(guī)定所定義過程的類型,如下表所示。

過程的類型類型說明無默認(rèn)為NEARNEAR定義為一個(gè)NEAR類型的過程,采用LCALL或者ACALL指令調(diào)用FAR定義一個(gè)FAR類型過程,采用ECALL指令調(diào)用匯編語言控制描述

--程序鏈接程序鏈接主要用于控制模塊之間參數(shù)的傳遞??刂泼枋霭ǎ篍XTERN(EXTERN)該控制描述符用于定義一個(gè)外部的符號(hào)。其格式為:EXTERN類:類型(符號(hào)1,符號(hào)2,...,符號(hào)N)其中:類:表示符號(hào)所在的存儲(chǔ)器段的類型;類型:BYTE(字節(jié)變量),DWORD(雙字變量)、FAR(遠(yuǎn)標(biāo)號(hào))、NEAR(近標(biāo)號(hào))和WORD(字變量)。匯編語言控制描述

--程序鏈接例如:EXTERNCODE:FAR(main)EXTERNDATA:BYTE(counter)NAME:該控制描述符用于指定當(dāng)前模塊的名字。PUBLIC:該控制描述符用于定義符號(hào),用于說明其它模塊會(huì)使用這些符號(hào)。例如:PUBLICmyvar,yourvar,othervar注:每個(gè)符號(hào)應(yīng)該在當(dāng)前的程序模塊內(nèi)定義過。寄存器和段符號(hào)不能指定為PUBLIC。匯編語言控制描述

--段控制段控制主要為段分配絕對(duì)地址或者可重定位描述。段控制描述包括:BSEG:該控制符用于定義一個(gè)絕對(duì)BIT段,例如:BSEGAT10

;地址=0x20+10位=0x2ADEC_FLAG:DBIT1;DEC_FLAG為比特位類型INC_FLAG:DBIT1;INC_FLAG為比特位類型匯編語言控制描述

--段控制CSEG:該控制符用于定義一個(gè)絕對(duì)CODE段,例如:

CSEGAT0003h

;CODE段開始的絕對(duì)地址為0x3VECT_0:LJMPISR_0;跳轉(zhuǎn)到中斷向量的位置CSEGAT0x100

;絕對(duì)地址0x100CRight:DB"(C)MyCompany";固定位置的字符串CSEGAT1000H;絕對(duì)地址0x1000Parity_TAB:;Parity_TAB的名字DB00H;初始化Parity_TAB開始的緩沖區(qū)DB01HDB01HDB00H匯編語言控制描述

--段控制DSEG:該控制符用于定義一個(gè)絕對(duì)DATA段,例如:

DSEGAT0x40;DATA段開始的絕對(duì)地址為40HTMP_A:DS2;TMP_A變量TEM_B:DS4;TMP_B變量ISEG:該控制符用于定義一個(gè)絕對(duì)IDATA段,例如:ISEGAT0xC0;IDATA段開始的絕對(duì)地址為0C0HTMP_IA:DS2;TMP_IA變量TEM_IB:DS4;TMP_IB變量匯編語言控制描述

--段控制RSEG(段名字):該控制符用于定義一個(gè)可重定位段,例如:MYPROGSEGMENTCODE;定義一個(gè)段RSEGMYPROG;選擇段XSEG:該控制符用于定義一個(gè)絕對(duì)的XDATA段,例如:

XSEGAT1000H;XDATA段的絕對(duì)開始地址為0x1000OEM_NAME:DS25;OEM_NAME變量PRD_NAME:DS25;PRD_NAME變量匯編語言控制描述

--雜項(xiàng)雜項(xiàng)控制描述包含:ERROR:產(chǎn)生錯(cuò)誤消息;END:表示匯編模塊的結(jié)束;KeilμVision集成開發(fā)環(huán)境介紹

--軟件功能介紹μVision5提供了功能強(qiáng)大的編輯器,并且提供了管理工程的能力。μVision5集成了用于開發(fā)嵌入式應(yīng)用的所有工具,包括:C/C++編譯器、宏匯編器、鏈接器/定位器和HEX文件生成器。μVision5集成開發(fā)環(huán)境提供以下功能:全功能的源代碼編輯器。用于配置開發(fā)工具的元件庫。用于創(chuàng)建和維護(hù)工程的工程管理器。KeilμVision集成開發(fā)環(huán)境介紹

--軟件功能介紹提供用于對(duì)嵌入式設(shè)計(jì)文件進(jìn)行處理的匯編器、編譯器和鏈接器。提供用于所有開發(fā)環(huán)境設(shè)置的對(duì)話框。真正集成了帶有高速CPU和外設(shè)仿真器的源碼級(jí)和匯編器級(jí)調(diào)試器工具。提供用于對(duì)目標(biāo)硬件進(jìn)行軟件調(diào)試的高級(jí)圖形調(diào)試(GraphicDebugInterface,GDI)接口,以及KeilULINK調(diào)試適配器。KeilμVision集成開發(fā)環(huán)境介紹

--軟件功能介紹提供了Flash編程工具,用于將應(yīng)用程序下載到Flash存儲(chǔ)器。注:STC單片機(jī)使用STC提供的stc-isp軟件下載程序提供了下面的鏈接:手冊(cè)、在線幫助、器件手冊(cè)和用戶指南。μVision5集成開發(fā)環(huán)境和調(diào)試器是整個(gè)Keil開發(fā)工具鏈的中心,它們提供了大量的特性以幫助程序開發(fā)人員快速完成嵌入式應(yīng)用的開發(fā)。μVision5提供了:建立模式(BuildMode),用于創(chuàng)建應(yīng)用程序;以及調(diào)試模式(DebugMode),用于調(diào)試應(yīng)用程序。KeilμVision集成開發(fā)環(huán)境介紹

--軟件下載下載μVision5集成開發(fā)環(huán)境的步驟主要包括:在IE瀏覽器中,輸入,登陸keil官網(wǎng)。在打開的Keil官網(wǎng)左側(cè)的SoftwareDownloads下找到并點(diǎn)擊ProductDownloads。KeilμVision集成開發(fā)環(huán)境介紹

--軟件下載在打開的頁面中,出現(xiàn)DownloadProducts頁面。在該頁面中,點(diǎn)擊C51,如下圖所示。KeilμVision集成開發(fā)環(huán)境介紹

--軟件下載打開C51界面,該界面提供了列表,需要填寫相關(guān)信息,如右圖所示。注:凡是標(biāo)識(shí)黑體的項(xiàng),都需要提供信息,不必是真實(shí)的信息。但是E-mail信息必須是真實(shí)的。KeilμVision集成開發(fā)環(huán)境介紹

--軟件下載當(dāng)填寫所要求的必要的信息后,點(diǎn)擊該頁面下方的Submit按鈕。出現(xiàn)新的界面。在該界面下,點(diǎn)擊C51V953.EXE圖標(biāo)KeilμVision集成開發(fā)環(huán)境介紹

--軟件下載出現(xiàn)提示信息,點(diǎn)擊保存按鈕,出現(xiàn)浮動(dòng)菜單,如右圖所示。在浮動(dòng)菜單內(nèi),選擇另存為,將下載的安裝包保存到讀者指定的路徑下。至此,成功的下載μVision5安裝包文件。保存安裝包提示信息KeilμVision集成開發(fā)環(huán)境介紹

--軟件的安裝安裝μVision5集成開發(fā)環(huán)境的步驟主要包括:在保存安裝包的路徑下,雙擊安裝包圖標(biāo),開始安裝軟件的過程。按照安裝過程中的提示信息,完成軟件的安裝。KeilμVision集成開發(fā)環(huán)境介紹

--軟件的安裝當(dāng)安裝成功后,可以看到在Windows7操作系統(tǒng)的開始菜單下,出現(xiàn)圖標(biāo),如左圖所示;或者在Windows7操作系統(tǒng)桌面上出現(xiàn)圖標(biāo),如右圖所示。KeilμVision集成開發(fā)環(huán)境介紹

--軟件的安裝在本書提供的資料中,找到并雙擊STC公司提供的stc-isp-15xx-v6.82.exe文件,打開主界面。KeilμVision集成開發(fā)環(huán)境介紹

--軟件的安裝在該界面內(nèi)的右側(cè)窗口中,點(diǎn)擊“Keil仿真設(shè)置”標(biāo)簽。在該標(biāo)簽頁下,點(diǎn)擊“添加型號(hào)和頭文件到Keil中,添加STC仿真器驅(qū)動(dòng)到Keil中”按鈕。出現(xiàn)瀏覽文件夾對(duì)話框界面。在該界面中,出現(xiàn)“請(qǐng)選擇Keil的安裝目錄(例如:C:\Keil)(目錄下必須有C51目錄和Uvx目錄存在)”提示信息,如右圖所示。KeilμVision集成開發(fā)環(huán)境介紹

--軟件的安裝在該界面中,將路徑定位到c:\keil_v5路徑下。注:讀者根據(jù)自己安裝μVision5的路徑選擇所指向的路徑。點(diǎn)擊OK按鈕。出現(xiàn)添加STC-MCU器件成功的消息對(duì)話框界面。KeilμVision集成開發(fā)環(huán)境介紹

--軟件的啟動(dòng)啟動(dòng)μVision5集成開發(fā)環(huán)境的步驟主要包括:在Windows7操作系統(tǒng)中,選擇并點(diǎn)擊KeilμVision5圖標(biāo)出現(xiàn)KeilμVision5啟動(dòng)界面,如下圖所示。KeilμVision集成開發(fā)環(huán)境介紹

--建立新的設(shè)計(jì)工程建立新設(shè)計(jì)工程的步驟主要包括:打開μVision5集成開發(fā)環(huán)境。在μVision5集成開發(fā)環(huán)境主界面主菜單下,選擇Project->NewμVisionProject...。出現(xiàn)CreateNewProject對(duì)話框界面。在文件名右側(cè)的文本框中輸入top。注:表示該工程的名字是top.uvproj。KeilμVision集成開發(fā)環(huán)境介紹

--建立新的設(shè)計(jì)工程單擊OK按鈕。出現(xiàn)SelectaCPUDataBaseFile對(duì)話框界面。在該界面中的下拉框中,選擇STCMCUDatabase選項(xiàng)。單擊OK按鈕。出現(xiàn)SelectDeviceforTarget’Target1’...對(duì)話框界面。在該界面中左側(cè)的窗口中,找到并展開STC前面的’+’。在展開項(xiàng)中,找到并選擇STC15W4K32S4,如下圖所示。KeilμVision集成開發(fā)環(huán)境介紹

--建立新的設(shè)計(jì)工程KeilμVision集成開發(fā)環(huán)境介紹

--建立新的設(shè)計(jì)工程單擊OK按鈕。出現(xiàn)Copy’STARTUP.A51’toProjectFolderandAddFiletoProject?對(duì)話框界面。該界面提示是不是在當(dāng)前設(shè)計(jì)工程中添加STARTUP.A51文件。注:在匯編語言程序設(shè)計(jì)中,不需要添加該文件。在C語言程序設(shè)計(jì)中,也不需要添加該文件。單擊“否(N)”按鈕。在主界面左側(cè)窗口中,選擇Project標(biāo)簽。在該標(biāo)簽窗口下,給出了工程信息,如右圖所示。KeilμVision集成開發(fā)環(huán)境介紹

--建立新的設(shè)計(jì)工程其中,頂層文件夾名字為Target1。在該文件夾下,存在一個(gè)SourceGroup1子目錄。KeilμVision集成開發(fā)環(huán)境介紹

--添加新的匯編語言文件添加匯編語言文件的步驟主要包括:在Project窗口界面下,選擇SourceGroup1,單擊右鍵,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇AddNewItemtoGroup‘SourceGroup1’選項(xiàng)。出現(xiàn)AddNewItemtoGroup’SourceGroup1’對(duì)話框界面,如后圖所示,按下面設(shè)置參數(shù):在該界面左側(cè)窗口中,選中AsmFile(.s)。在Name右側(cè)的文本框中輸入main。KeilμVision集成開發(fā)環(huán)境介紹

--添加新的匯編語言文件注:該匯編語言的文件名字為main.a51。點(diǎn)擊Add按鈕。KeilμVision集成開發(fā)環(huán)境介紹

--添加新的匯編語言文件在右圖所示的Project窗口中,在SourceGroup1子目錄下添加名字為main.a51的匯編語言文件。在右側(cè)窗口中,自動(dòng)打開了main.a51文件。輸入代碼,如后圖所示。保存設(shè)計(jì)代碼。KeilμVision5匯編語言設(shè)計(jì)流程

--建立設(shè)計(jì)建立(Build)參數(shù)進(jìn)行設(shè)置,并實(shí)現(xiàn)對(duì)設(shè)計(jì)的建立過程的步驟主要包括:在如右圖所示的窗口中,選中Target1文件夾,并單擊右鍵,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選中OptionsforTarget‘Target1’...選項(xiàng)。KeilμVision5匯編語言設(shè)計(jì)流程

--建立設(shè)計(jì)出現(xiàn)OptionsforTarget‘Target1’對(duì)話框界面。在該界面中,點(diǎn)擊Target標(biāo)簽。在該標(biāo)簽界面中,按下面設(shè)置參數(shù):在Xtal(MHz)右側(cè)文本框中,輸入30.0,如下圖所示。其余按默認(rèn)設(shè)置。KeilμVision5匯編語言設(shè)計(jì)流程

--建立設(shè)計(jì)在該對(duì)話框界面下,再次選中Output標(biāo)簽。在該標(biāo)簽界面下,選中CreateHEXFile前面的復(fù)選框,如下圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--建立設(shè)計(jì)在該對(duì)話框界面下,再次選中Debug標(biāo)簽。在該標(biāo)簽界面下,選中UseSimulator前面的單選框,如下圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--建立設(shè)計(jì)點(diǎn)擊OK按鈕,退出目標(biāo)選項(xiàng)對(duì)話框界面。在主界面主菜單下,選擇Project->Buildtarget。開始對(duì)設(shè)計(jì)進(jìn)行建立的過程。注:該過程對(duì)匯編文件,進(jìn)行匯編和鏈接,最后生成可執(zhí)行二進(jìn)制文件和HEX文件。KeilμVision5匯編語言設(shè)計(jì)流程

--分析.m51文件分析.m51文件的步驟包括:在當(dāng)前設(shè)計(jì)工程的目錄中,找到并用寫字板打開top.m51文件。在該文件中,LINKMAPOFMODULE:標(biāo)題下給出了該設(shè)計(jì)中,不同段在存儲(chǔ)器中的空間分配情況,如下圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--分析.m51文件KeilμVision5匯編語言設(shè)計(jì)流程

--分析.m51文件繼續(xù)瀏覽該文件,在該文件SYMBOLTABLEOFMODULE標(biāo)題下,給出了該程序代碼中,所有變量和端口在存儲(chǔ)器中的空間分配,如下圖所示。關(guān)閉該文件。

KeilμVision5匯編語言設(shè)計(jì)流程

--分析.m51文件KeilμVision5匯編語言設(shè)計(jì)流程

--分析.lst文件分析.lst文件的步驟包括:在當(dāng)前設(shè)計(jì)工程的目錄中,找到并用寫字板打開main.lst文件。在該文件中,LINKMAPOFMODULE:標(biāo)題下給出了該設(shè)計(jì)中,不同段在存儲(chǔ)器中的空間分配情況,如下圖所示。注:(1)在該文件中,給出了每條匯編語言助記符機(jī)器指令在Flash程序存儲(chǔ)器中的相對(duì)位置。

(2)在該文件中,給出了每條匯編語言助記符的機(jī)器指令的機(jī)器碼。關(guān)閉該文件。KeilμVision5匯編語言設(shè)計(jì)流程

--分析HEX文件分析HEX文件的步驟包括:在當(dāng)前設(shè)計(jì)工程的目錄中,找到并用寫字板打開top.hex文件,如下圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--分析HEX文件許多Flash編程器都要求輸入文件具有IntelHEX格式,一個(gè)IntelHEX文件的一行稱為一個(gè)記錄,每個(gè)記錄都由16進(jìn)制字符構(gòu)成,兩個(gè)字符表示一個(gè)字節(jié)的值。IntelHEX文件通常由若干記錄組成,每個(gè)記錄具有如下的格式::llaaaattdd...ddcc其中:“:”表示記錄起始的標(biāo)志。IntelHEX文件的每一行都是以“:”開頭。KeilμVision5匯編語言設(shè)計(jì)流程

--分析HEX文件“l(fā)l”表示記錄的長(zhǎng)度。用來標(biāo)識(shí)該記錄的數(shù)據(jù)字節(jié)數(shù)?!癮aaa”裝入地址。他是該記錄中第一個(gè)數(shù)據(jù)字節(jié)的16位地址值,用來表示該記錄在EPROM存儲(chǔ)器中的絕對(duì)地址?!皌t”記錄類型。00表示數(shù)據(jù)記錄,01表示文件結(jié)束。“dddd”記錄的實(shí)際字節(jié)數(shù)據(jù)值。每一個(gè)記錄都由ll個(gè)字節(jié)的數(shù)據(jù)值?!癱c”校驗(yàn)和。將它的值與記錄中所有字節(jié)(包括記錄長(zhǎng)度字節(jié))內(nèi)容相加,其結(jié)果應(yīng)該為0,如果為其它數(shù)值為表明該記錄有錯(cuò)。關(guān)閉該文件。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真本節(jié)將對(duì)程序進(jìn)行軟件仿真。軟件仿真是指,在KeilμVision5集成開發(fā)環(huán)境中運(yùn)行設(shè)計(jì)程序代碼。這個(gè)運(yùn)行過程不需要真實(shí)STC單片機(jī)硬件平臺(tái)。當(dāng)程序設(shè)計(jì)者在沒有實(shí)際的STC單片機(jī)開發(fā)平臺(tái)時(shí),可以借助于集成開發(fā)環(huán)境提供的各種調(diào)試工具,初步判斷一下所設(shè)計(jì)的軟件代碼是否有缺陷,這樣就能及時(shí)發(fā)現(xiàn)程序設(shè)計(jì)中的問題。程序軟件仿真也稱為脫機(jī)仿真,也就是脫離基于STC單片機(jī)的具體硬件平臺(tái)的仿真。

KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真程序軟件仿真的步驟主要包括:在KeilμVision主界面主菜單下,選擇Debug->Start/StopDebugSession,進(jìn)入調(diào)試器模式。出現(xiàn)調(diào)試器界面,如圖所示。在該調(diào)試器左邊出現(xiàn)Registers標(biāo)簽窗口。在該界面的上方出現(xiàn)Disassembly窗口,該窗口時(shí)程序代碼的反匯編程序。在該窗口下方是匯編語言源程序界面。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試界面工具欄內(nèi),選擇并單擊按鈕,對(duì)程序代碼進(jìn)行單步運(yùn)行,然后觀察寄存器界面內(nèi)的寄存器內(nèi)容的變化情況。然后,再單擊按鈕,再次觀察寄存器內(nèi)容的變化,一直運(yùn)行程序直到單步運(yùn)行到END為止結(jié)束。在當(dāng)前調(diào)試模式主界面主菜單下,選擇Debug->ResetCPU,準(zhǔn)備重新運(yùn)行程序。在當(dāng)前調(diào)試模式主界面主菜單下,選擇View->MemoryWindows->Memory1;或者在當(dāng)前調(diào)試模式主界面工具欄內(nèi)單擊按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇Memory1。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試模式主界面右下角出現(xiàn)Memory1界面,如下圖所示。在Address:右側(cè)輸入c:0x0119。在當(dāng)前調(diào)試界面工具欄內(nèi),單擊按鈕,對(duì)程序代碼連續(xù)運(yùn)行單步調(diào)試,一直到運(yùn)行完第21行程序,如下圖所示,然后觀察圖1內(nèi)的存儲(chǔ)器內(nèi)容的變化情況。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真當(dāng)前調(diào)試模式主界面主菜單下,選擇View->MemoryWindows->Memory2?;蛘咴诋?dāng)前調(diào)試模式主界面工具欄內(nèi)單擊按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇Memory2。在當(dāng)前調(diào)試模式主界面右下角出現(xiàn)Memory2界面,如圖所示。在Address:右側(cè)輸入d:0x00。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試界面工具欄內(nèi),單擊按鈕,對(duì)程序代碼連續(xù)運(yùn)行單步調(diào)試,一直到運(yùn)行完第28行程序,如下圖所示,然后觀察上圖內(nèi)的存儲(chǔ)器內(nèi)容的變化情況。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真當(dāng)前調(diào)試模式主界面主菜單下,選擇View->MemoryWindows->Memory3。或者在當(dāng)前調(diào)試模式主界面工具欄內(nèi)單擊按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇Memory3。在當(dāng)前調(diào)試模式主界面右下角出現(xiàn)Memory3界面,如圖所示。在Address:右側(cè)輸入x:0x0000。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試界面工具欄內(nèi),單擊按鈕,對(duì)程序代碼連續(xù)運(yùn)行單步調(diào)試,一直到運(yùn)行完第34行程序,如圖所示,然后觀察上圖內(nèi)的存儲(chǔ)器內(nèi)容的變化情況。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試界面主菜單,選擇Debug->ResetCPU,準(zhǔn)備重新運(yùn)行程序。在當(dāng)前調(diào)試界面主菜單下,選擇View->Trace->EnableTraceRecording前面的復(fù)選框。然后,再次選擇View->Trace->InstructionTrace;或者在當(dāng)前調(diào)試主界面工具欄內(nèi),單擊按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇EnableTraceRecording前面的復(fù)選框,然后,再次單擊按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇InstructionTrace選項(xiàng)。出現(xiàn)指令I(lǐng)nstructionTrace(跟蹤調(diào)試)窗口界面。再次連續(xù)單步運(yùn)行程序,一直到程序結(jié)束為止。在每運(yùn)行一步單步調(diào)試時(shí),在跟蹤調(diào)試窗口界面中,可以看到所執(zhí)行的指令,以及該指令在程序存儲(chǔ)器內(nèi)所分配的地址,以及該指令的機(jī)器碼,如后圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試模式主界面主菜單下,選擇View->SymbolsWindow;或者在當(dāng)前調(diào)試模式主界面工具欄內(nèi),單擊按鈕。在調(diào)試界面右側(cè),出現(xiàn)Symbols窗口界面,如下圖所示。在該界面下,給出SFR寄存器的地址,以及程序代碼中所用到變量所分配的段以及地址信息。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試界面主菜單,選擇Debug->ResetCPU,準(zhǔn)備重新運(yùn)行程序。在當(dāng)前調(diào)試界面主菜單下,選擇Peripherals->I/O-Ports->Port1。彈出ParallelPort1端口界面,如圖所示。在該界面中,給出了端口1各個(gè)引腳當(dāng)前的狀態(tài)。再次單步運(yùn)行程序,一直運(yùn)行到程序代碼的第23行為止。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試界面主菜單,選擇Debug->ResetCPU,準(zhǔn)備重新運(yùn)行程序。在當(dāng)前調(diào)試主界面主菜單下,選擇View->AnalysisWindows->CodeCoverage選項(xiàng);或者在當(dāng)前調(diào)試主界面工具欄內(nèi),單擊按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇CodeCoverage選項(xiàng)。在調(diào)試主界面內(nèi),出現(xiàn)CodeCoverage窗口界面,如圖所示。在CodeCoverage窗口界面中Module:右側(cè)的下拉框中,選擇MAIN。運(yùn)行單步調(diào)試,可以看到代碼覆蓋率隨程序的單步執(zhí)行而不斷的增加。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試界面主菜單下,選擇Debug->Start/StopDebugSession,退出調(diào)試模式主界面。注:該步操作的目的是為了清除前面所做操作,對(duì)存儲(chǔ)空間內(nèi)容的影響。因此,下面的步驟會(huì)調(diào)用軟件邏輯分析工具,調(diào)試信號(hào)的邏輯狀態(tài)變化。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真對(duì)該段代碼使用邏輯分析儀進(jìn)行分析的步驟主要包括:在KeilμVision主界面主菜單下,選擇Debug->Start/StopDebugSession,進(jìn)入調(diào)試模式主界面。在當(dāng)前調(diào)試模式主界面主菜單下,選擇View->AnalysisWindows->LogicAnalysis;或者在當(dāng)前調(diào)試主界面工具欄中,單擊按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),選擇LogicAnalyzer。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真出現(xiàn)LogicAnalyszer(邏輯分析儀)窗口界面,如下圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在該窗口界面中,單擊Setup...按鈕。出現(xiàn)SetupLogicAnalyzer界面,如下圖所示。在該界面內(nèi),單擊按鈕。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在CurrentLogicAnalyzerSignals:窗口下新添加了一個(gè)空白行。在該空白行中輸入‘P1’。然后,選中該行。在該窗口下面的AndMask:右側(cè)的文本框中輸入0xFFFFFFFF。其余參數(shù)保持不變,如下圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真單擊Close按鈕,退出配置邏輯分析儀選項(xiàng)界面。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在當(dāng)前調(diào)試模式主界面下面的Command窗口內(nèi)的命令行中,輸入labuffer命令,如下圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真按回車鍵,可以看到在在LogicAnalyzer窗口界面內(nèi),新添加了P1和buffer兩個(gè)邏輯信號(hào),如圖所示。單步運(yùn)行程序,一直運(yùn)行到程序代碼的第29行。KeilμVision5匯編語言設(shè)計(jì)流程

--程序軟件仿真在LogicAnalyzer窗口界面中,連續(xù)單擊按鈕多次,用于放大窗口內(nèi)的信號(hào)。當(dāng)調(diào)整到觀察范圍內(nèi)時(shí),看到信號(hào)的變化過程,如圖所示。在當(dāng)前調(diào)試主界面主菜單下,選擇Debug->Start/StopDebugSession,退出調(diào)試模式主界面。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明本節(jié)將通過STC提供的STC學(xué)習(xí)板,對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證,如下圖所示。該開發(fā)平臺(tái)完全由USB供電。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明在進(jìn)行硬件仿真前,需要通過下面的步驟配置硬件仿真所需要的硬件和軟件環(huán)境,配置步驟主要包括:打開STC學(xué)習(xí)板,在該開發(fā)板左側(cè)找到標(biāo)識(shí)為CON5miniUSB接口。將STC提供USB數(shù)據(jù)電纜的兩端,分別和開發(fā)板上標(biāo)識(shí)為CON5的USB插座和PC機(jī)/筆記本電腦上的USB插座進(jìn)行連接。在本書所提供資料的文件夾下,找到USB電纜驅(qū)動(dòng)程序子目錄。打開該子目錄后,進(jìn)入U(xiǎn)SBtoUARTDriver子目錄。在該子目錄下,進(jìn)入到CH340-CH341子目錄。在該子目錄下找到安裝程序ch341ser,安裝USB-UART的串口驅(qū)動(dòng)程序。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明打開本書所提供資料下的STC-ISP軟件,如圖所示。在該界面,名字為串口號(hào)右側(cè)的下拉框中,選擇USB-SERIALCH340(COM3)選項(xiàng)。按照?qǐng)D中所示,設(shè)置最低波特率和最高波特率參數(shù)。在本書中,將最低波特率設(shè)置為2400,最高波特率設(shè)置為115200。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明在KeilμVision5集成開發(fā)環(huán)境左側(cè)的Project窗口中,選中Target1并單擊右鍵,出現(xiàn)浮動(dòng)菜單,選擇OptionsforTarget‘Target1’選項(xiàng)。出現(xiàn)OptionsforTarget‘Target1’對(duì)話框界面,如圖所示。在該界面中,單擊Debug標(biāo)簽。在該標(biāo)簽界面右側(cè)窗口中,按如下設(shè)置參數(shù):

KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明選擇Use前面的復(fù)選框。在右側(cè)下拉框中,選擇STCMonitor-51Driver。單擊Settings按鈕。出現(xiàn)TargetSetup對(duì)話框界面,如圖2所示。在該界面中,將COMPort設(shè)置為COM3;將Baudrate設(shè)置為115200。單擊OK按鈕。退出TargetSetup對(duì)話框界面。在上圖所示的界面最下方,單擊OK按鈕,退出配置界面。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明再次進(jìn)入STC-ISP程序界面,如圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明在該界面中按如下設(shè)置參數(shù):?jiǎn)螕簟按蜷_程序文件”按鈕。出現(xiàn)“打開程序代碼文件”對(duì)話框界面。在該界面中,定位到當(dāng)前工程路徑下,并打開top.HEX文件。單擊確定按鈕。在左側(cè)窗口中,選擇脫機(jī)下載/U8/U7標(biāo)簽。在該標(biāo)簽欄界面下,選中“使用U8/U7在線下載完成后持續(xù)給目標(biāo)芯片供電”前面的復(fù)選框。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明在右側(cè)窗口中,選擇Keil仿真設(shè)置標(biāo)簽。在該標(biāo)簽欄界面下,單擊“將IAP15W4K58S4設(shè)置為仿真芯片(寬壓系統(tǒng),支持USB下載)”按鈕。在STC-ISP軟件右下方的窗口界面內(nèi),出現(xiàn)正在檢測(cè)目標(biāo)單片機(jī)....信息,如圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--STC硬件平臺(tái)說明在STC學(xué)習(xí)板左下方,找到一個(gè)標(biāo)識(shí)為SW19的白色按鍵,按一下該按鍵。在上圖所示的界面下,出現(xiàn)編程的相關(guān)信息,如圖所示。等待編程結(jié)束。KeilμVision5匯編語言設(shè)計(jì)流程

--程序硬件仿真本節(jié)將進(jìn)行程序的硬件仿真。硬件仿真就是在STC單片機(jī)上真正的運(yùn)行程序,然后對(duì)程序代碼的執(zhí)行情況進(jìn)行分析。運(yùn)行程序硬件仿真的步驟主要包括:在KeilμVision主界面主菜單下,選擇Debug->Start/StopDebugSession,進(jìn)入調(diào)試器模式。KeilμVision5匯編語言設(shè)計(jì)流程

--程序硬件仿真再次運(yùn)行單步調(diào)試,先單步運(yùn)行完第20行代碼。即:

MOVP1,#0注:該指令是使得P1端口置零,其中就包括讓P1.6和P1.7端口置零。因此,看到LED6和LED7燈亮。KeilμVision5匯編語言設(shè)計(jì)流程

--程序硬件仿真再次運(yùn)行單步調(diào)試,先單步運(yùn)行完第21行代碼。即:

MOVP1,A注:該指令將累加器A的內(nèi)容送給P1端口。由于此時(shí)累加器A的內(nèi)容是0xEE,也就是P1.7和P1.6置1。因此,看到LED6和LED7燈滅。在執(zhí)行指令的時(shí)候,可以按照前面的方法,觀察寄存器的變化情況、存儲(chǔ)器內(nèi)容和端口1的變化情況。在調(diào)試主界面下,選擇Debug->ResetCPU選項(xiàng),準(zhǔn)備重新執(zhí)行程序。KeilμVision5匯編語言設(shè)計(jì)流程

--程序硬件仿真在程序代碼行號(hào)前單擊左鍵,分別在第20行、第24行和第30行添加斷點(diǎn),如圖所示。KeilμVision5匯編語言設(shè)計(jì)流程

--程序硬件仿真在當(dāng)前調(diào)試模式主界面主菜單下,選擇Debug->Run;或者直接按鍵F5,運(yùn)行斷點(diǎn)調(diào)試功能。在當(dāng)前調(diào)試模式主界面主菜單下,選擇Debug->Start/StopDebugSession,退出調(diào)試器模式。在KeilμVision主界面主菜單下,選擇Project->CloseProject,退出當(dāng)前工程。

單片機(jī)端口控制匯編語言程序設(shè)計(jì)本節(jié)將設(shè)計(jì)更為復(fù)雜的端口控制匯編語言程序,幫助同學(xué)進(jìn)一步的理解“軟件”控制“硬件”邏輯行為的方法。設(shè)計(jì)目標(biāo):在該設(shè)計(jì)中,將設(shè)計(jì)一個(gè)在0~3之間計(jì)數(shù)(4進(jìn)制)的計(jì)數(shù)器。注:讀者進(jìn)入本書提供資料的\STC-example\例子5-7目錄下,打開并參考該設(shè)計(jì)。單片機(jī)端口控制匯編語言程序設(shè)計(jì)--設(shè)計(jì)原理在該設(shè)計(jì)中,使用了STC提供的學(xué)習(xí)板。在該學(xué)習(xí)板上提供了四個(gè)LED燈、名字分別用LED7、LED8、LED9和LED10表示。

單片機(jī)端口控制匯編語言程序設(shè)計(jì)--設(shè)計(jì)原理這四個(gè)LED燈的陽極共同接到了VCC電源(+5V供電),另一端通過限流電阻R52、R53、R54、R55與STC單片機(jī)IAP15W4K58S4的P1.7、P1.6、P4.7和P4.6引腳連接。當(dāng):?jiǎn)纹瑱C(jī)對(duì)應(yīng)的引腳置位為低時(shí),所連接的LED亮;單片機(jī)對(duì)應(yīng)的引

溫馨提示

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