義隆單片機(jī)EM78P153使用.doc_第1頁
義隆單片機(jī)EM78P153使用.doc_第2頁
義隆單片機(jī)EM78P153使用.doc_第3頁
義隆單片機(jī)EM78P153使用.doc_第4頁
義隆單片機(jī)EM78P153使用.doc_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于EM78P153S的應(yīng)用設(shè)計(jì)(V1.0)目 錄第一章 EM78P153S的初識11.1 EM78P152/3S特性11.2 EM78P152/3S引腳21.3 功能寄存器21.3.1 累加器與端口控制寄存器21.3.2中斷狀態(tài)寄存器與中斷使能寄存器31.3.3 操作寄存器41.3.4 特殊功能寄存器51.4 數(shù)據(jù)存儲器的配置71.5 休眠與喚醒71.6 分頻器81.7 定時器/計(jì)數(shù)器TCC9第二章 EM78系列單片機(jī)應(yīng)用軟件的編輯與仿真112.1 Simulator的下載與安裝112.2 Simulator的使用方法122.3 Simulator系統(tǒng)常用命令匯總142.4 Simulator仿真中的常見問題16第三章 EM78系列單片機(jī)的匯編指令173.1 尋址方式173.2 偽指令183.3 指令速查表18第四章 EM78P153S應(yīng)用軟件設(shè)計(jì)204.1 外部中斷程序204.2 花樣燈程序224.2.1 設(shè)計(jì)需求224.2.2 軟件設(shè)計(jì)234.2.3 硬件設(shè)計(jì)374.2.4 元器件明細(xì)表38第五章 EM78系列單片機(jī)應(yīng)用程序的燒錄395.1 程序的轉(zhuǎn)換過程395.2 燒錄器與燒錄軟件395.3 燒錄步驟4146EM78P153S使用總結(jié)第一章 EM78P153S的初識EM78P152/3S是采用低功耗高速 CMOS工藝設(shè)計(jì)開發(fā)的8位微控制器,它的內(nèi)部有一個102413位一次性可編程只讀存儲器(OTP_ROM) ,可見1k的只讀存儲器(ROM)決定了應(yīng)用程序不能夠太多,否則應(yīng)用程序機(jī)器碼將無法燒錄到芯片中。硬件設(shè)計(jì)中,EM78P152/3S可以通過設(shè)置代碼選項(xiàng)寄存器使微處理器工作在內(nèi)部RC振蕩模式(IRC)下,此模式下采用上電復(fù)位模式而不需要外接時鐘電路;同時利用上電自動復(fù)位而不需要外接復(fù)位電路,P63復(fù)位引腳可以直接作為輸入腳使用,充分提高了微處理器端口的利用率,這樣硬件應(yīng)用電路極為簡化,節(jié)省了硬件成本。此外,EM78P153S單片機(jī)具有休眠模式,在一些不需要微處理器實(shí)時工作的應(yīng)用場合,可以節(jié)省用電量,特別是在使用電池供電時,應(yīng)用此模式可以延長電池的使用時間;另外在休眠模式下避免了微處理器在運(yùn)行時受到來自外在雜波信號的干擾而導(dǎo)致程序跑飛。1.1 EM78P152/3S特性EM78P152/3S的性能如表1.1所示。表1.1 EM78P152/3S特性產(chǎn)品特性備注CPU配置 1K 13位片內(nèi)ROM 32 8位片內(nèi)寄存器 5級堆棧用于子程序嵌套 小于1.5 mA 5V/4MHz 休眠模式下的典型值為1A 。I/O 端口配置 2組雙向I/O 端口:P5,P6 11個I/O引腳 喚醒端口:P6 6個可編程下拉I/O 引腳 7個可編程上拉I/O 引腳 7個可編程漏極開路I/O 引腳 外部中斷:P60 工作電壓范圍 OTP 版本;工作電壓范圍:2.3V5.5V工作頻率范圍 IRC模式;振蕩模式:4MHz,8MHz,1MHz,455KHz外設(shè)配置 8位實(shí)時時鐘/ 計(jì)數(shù)器,可編程選擇其信號源、觸發(fā)邊沿,溢出產(chǎn)生中斷 三種中斷源 TCC 溢出中斷 輸入端口狀態(tài)改變中斷(可使微控制器從休眠模式喚醒) 外部中斷專有特性 省電模式 ( 休眠模式) 可選振蕩模式 封裝類型 14引腳DIP:EM78P153SP/S/J 14引腳SOP:EM78P153SN/S/J 10引腳SSOP:EM78P152SN/S/J 其它 具備一個保護(hù)寄存器以防止OTP_ROM中的程序代碼被竊取1.2 EM78P152/3S引腳EM78P152/3S的引腳圖如圖1.1,引腳功能如表1.2所示。 圖1.1 EM78P152/3S引腳圖EM78P153SP/N/S/JEM78P152SP/N/S/J表1.2 EM78P152/3S引腳功能表引腳名稱序號類型功能備注P50P531、12、13、14I/O*通用的I/O引腳P60P62P64P672、3、56、8、9、10I/O*通用的I/O 引腳*引腳狀態(tài)發(fā)生改變時,從休眠模式喚醒*可以設(shè)置為上拉P60/INT10I/O*下降沿觸發(fā)的外部中斷引腳P62/TCC8I/O*外部定時/ 計(jì)數(shù)器信號輸入引腳P63/RESET7I*若設(shè)置/RESET引腳并使其保持邏輯低,器件將產(chǎn)生復(fù)位*引腳狀態(tài)改變時,從休眠模式喚醒* P63 僅用作輸入引腳P64、P655、6I/O*外部時鐘信號輸入*晶體振蕩器的輸入引腳VDD4*電源正極VSS11*電源地1.3 功能寄存器期望微處理器按預(yù)期的性能工作,就需要對功能寄存器進(jìn)行有效的定義,這也是匯編編程初始化的基本任務(wù)。針對EM78P153單片機(jī),在匯編程序編寫中,使用頻率相對較高的寄存器有累加器A、I/O端口控制寄存器IOC5IOC6、中斷狀態(tài)寄存器(RF)、中斷使能寄存器(IOCF)。1.3.1 累加器與端口控制寄存器示例1端口數(shù)值的傳送(讀取一個端口的值送給另一個端口)。源程序如下:;*;DIP輸入,LED輸出;*dip=5;定義dip輸入端口的地址為5led=6;定義顯示端口的地址為6org 0x00;定義程序存放區(qū)的起始地址jmp main;跳轉(zhuǎn)到主程序org 0x50;聲明主程序開始地址main:mov a,0x00;iow led ;設(shè)定顯示端口引腳全部輸出mov a,0xff;iow dip ;設(shè)定dip端口全部為輸入loopcoma dip;讀取dip狀態(tài)并取反送amov led,a;傳送到端口6上面顯示jmp loop;循環(huán)回去;* end;告知匯編器源程序結(jié)束1、累加器A累加器A用于內(nèi)部數(shù)據(jù)傳送或指令操作數(shù)暫存,它不可被尋址。寄存器之間的數(shù)據(jù)傳遞需要通過累加器A來過渡,即寄存器先傳送給A再由A傳送給另一個寄存器。2、I/O 端口控制寄存器IOC5 IOC6I/O 端口控制寄存器IOC5 IOC6:為“1”時,相關(guān)I/O 引腳置為高阻態(tài)(輸入);為“0”時,相關(guān)I/O 引腳置為輸出。IOC5 寄存器僅低4 位可被有效定義,IOC5 和 IOC6 均為可讀/寫寄存器。1.3.2中斷狀態(tài)寄存器與中斷使能寄存器示例2將寄存器0x20當(dāng)做計(jì)數(shù)器,每當(dāng)外部中斷產(chǎn)生,就自動加1。源程序如下:;*;P60/INT外部中斷;將寄存器0x20當(dāng)做計(jì)數(shù)器,每當(dāng)外部中斷產(chǎn)生,就自動加1;* ORG0x00 ;定義程序存放區(qū)的起始地址 CLR0x20 ;清除計(jì)數(shù)器 JMPEXT_PRO ;跳轉(zhuǎn)到主程序 ORG0x08 ;中斷的入口地址INT_EXT:DISI ;使能中斷 CLR0x0F ;清除中斷狀態(tài)寄存器的標(biāo)志位 INC0x20 ;計(jì)數(shù)器加1 RETI ;返回主程序 ORG0x50 ;主程序的開始地址EXT_PRO:CLR0x0F ;清除標(biāo)志位 MOVA,0x04 ;使能外部中斷信號產(chǎn)生 IOW0x0F ;把A的內(nèi)容送給0x0F MOVA,0x40 ;定義P60為外部中斷引腳 IOW0x0E ENI ;開總中斷EXT_WAIT:NOP NOP JMPEXT_WAIT ;循環(huán)等待外部中斷;* END ;匯編器源程序結(jié)束1、中斷狀態(tài)寄存器(RF)中斷狀態(tài)寄存器(RF)地址0x0F,它反映三種中斷標(biāo)志情形,硬件自動置1,均需要通過軟件的方式清0,以清除中斷標(biāo)志。RF各位的含義如表1.3所示。表1.3 中斷狀態(tài)寄存器RF地址BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT00x0FEXIFICIFTCIF其中:Bit 2(EXIF) :外部中斷標(biāo)志位,/INT管腳輸入下降沿時置“1”,由軟件清“0”;Bit 1(ICIF):端口6輸入狀態(tài)改變標(biāo)志位,輸入狀態(tài)改變時置“1”,由軟件清“0”;Bit 0(TCIF):TCC 溢出中斷標(biāo)志位,TCC 溢出時置“1”,由軟件清“0”。2、中斷使能寄存器(IOCF)中斷使能寄存器(IOCF) 地址0x0F,與中斷狀態(tài)寄存器共用一個地址,它反映三種中斷的開啟與關(guān)閉,在程序運(yùn)行每個指令周期中,硬件自身判斷中斷使能位,當(dāng)中斷使能位為1時響應(yīng)相應(yīng)中斷,同時在中斷服務(wù)程序中務(wù)必清中斷狀態(tài)寄存器的相應(yīng)標(biāo)志位為0。IOCF各位的含義如表1.4所示。表1.4 中斷使能寄存器地址BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT00x0FEXIEICIETCIE功 能0:禁止EXIF中斷1:使能EXIF中斷0:禁止ICIF 中斷1:使能ICIF 中斷0:禁止TCIF中斷1:使能TCIF中斷其中:Bit 2 (EXIE)是外部中斷EXIF使能位;Bit 1 (ICIE)是端口6輸入狀態(tài)改變引發(fā)中斷ICIF使能位;Bit 0 (TCIE)是定時溢出中斷TCIF使能位。1.3.3 操作寄存器1、間接尋址寄存器R0R0 并非實(shí)際存在的寄存器,它的主要功能是作為間接尋址指針,任何以R0為指針的指令,實(shí)際上是對RAM選擇寄存器R4所指向地址的數(shù)據(jù)內(nèi)容進(jìn)行操作。2、定時/計(jì)數(shù)器R1(1)TCC引腳的外部信號邊沿或內(nèi)部指令周期時鐘觸發(fā)( 由CONT寄存器的TE位設(shè)定) ,會使TCC寄存器加1;(2)像其它寄存器一樣可讀/寫;(3)通過復(fù)位PAB 位(CONT-3) 設(shè)定;(4)如果PAB bit (CONT-3) 被復(fù)位,預(yù)分頻器分配給TCC;(5)寫入一個值到TCC寄存器后,TCC計(jì)數(shù)器的內(nèi)容會被刷新。3、程序計(jì)數(shù)器R2&堆棧復(fù)位時,程序計(jì)數(shù)器R2所有位均清0,它提供了程序指令代碼的片內(nèi)OTP_ROM地址。一個程序頁為1024字長。在程序編譯調(diào)試時,可以通過查看R2的值,判斷程序是否跳轉(zhuǎn)正常,或者通過對比某個程序的入口判斷是否進(jìn)入某個函數(shù)?!癑MP”指令直接加載程序計(jì)數(shù)器的低10位,因此,“JMP”允許PC跳轉(zhuǎn)到一個程序頁的任何位置?!癈ALL”指令首先加載PC的低10位,然后將PC+1推入堆棧,因此,子程序的入口地址可位于一個程序頁的任何位置。正常情況下,所有指令均是單指令周期(一個指令周期包含2個振蕩周期) ,但改變程序計(jì)數(shù)器(R2寄存器)內(nèi)容的指令,均為2個指令周期。EM78P153S有五級堆棧,這就決定了在程序編寫的時候,子程序的嵌套調(diào)用不能夠超過5次,否則編譯會出錯。4、狀態(tài)寄存器R3(程序)狀態(tài)寄存器R3的地址為0x03,如表1.5所示。表1.5 狀態(tài)寄存器R3地址0x03BIT7RST0代表其它復(fù)位類型引發(fā)喚醒復(fù)位方式 ;1代表引腳狀態(tài)改變引發(fā)控制器從休眠模式喚醒方式BIT6GP1通用讀/ 寫位BIT5GP0BIT4T時間溢出標(biāo)志位,執(zhí)行“SLEP”和“WDTC”指令或上電時置“1”,WDT溢出時復(fù)位為“0”BIT3P省電標(biāo)志位,上電或執(zhí)行WDTC 指令時置“1”,執(zhí)行“SLEP”指令時復(fù)位為“0”BIT2Z零標(biāo)志位,當(dāng)算術(shù)或邏輯運(yùn)算的結(jié)果為0時置“1”BIT1DC輔助進(jìn)位標(biāo)志位BIT0C進(jìn)位標(biāo)志位在程序編譯調(diào)試時,可以通過查看R3的值,了解程序的工作過程。5、RAM 選擇寄存器R4:I/O 寄存器,僅低4位可用。6、端口5寄存器R5:I/O 寄存器,引腳都為I/O口。7、端口6寄存器R6:I/O 寄存器,除P63僅用作輸入引腳外,其它引腳都為I/O口。8、R10R2F:所有這些寄存器均為8 位通用寄存器。表1.6 控制寄存器CONTBIT7BIT6INT中斷使能標(biāo)志位:0代表被DISI 或硬件中斷屏蔽;1代表被ENI/RETI指令使能BIT5TSTCC信號源選擇位:0代表內(nèi)部指令周期時鐘,P62為雙向I/O引腳;1代表TCC引腳的跳變信號BIT4TETCC信號邊沿選擇位:0代表TCC引腳信號由低變到高時TCC計(jì)數(shù)器加1;1代表TCC引腳信號由高變到低時TCC計(jì)數(shù)器加1BIT3PAB預(yù)分頻器分配位:0代表TCC;1代表WDTBIT2PSR2TCC/WDT預(yù)分頻比選擇位PSR200001111BIT1PSR1PSR100110011PSR001010101BIT0PSR0TCC預(yù)分頻比1:21:41:81:161:321:641:1281:256WDT預(yù)分頻比1:11:21:41:81:161:321:641:1281.3.4 特殊功能寄存器1、控制寄存器CONT控制寄存器CONT各位定義如表1.6所示。2、下拉控制寄存器IOCB、漏極開路控制寄存器IOCC、上拉控制寄存器IOCD下拉控制寄存器IOCB各位定義如表1.7所示。表1.7 下拉控制寄存器IOCBBIT7BIT6/PD6P62 引腳下拉功能使能控制位;0代表使能內(nèi)部下拉功能 ;1代表禁止內(nèi)部下拉功能BIT5/PD5P61 引腳下拉功能使能控制位;0代表使能內(nèi)部下拉功能 ;1代表禁止內(nèi)部下拉功能BIT4/PD4P60 引腳下拉功能使能控制位;0代表使能內(nèi)部下拉功能 ;1代表禁止內(nèi)部下拉功能BIT3BIT2/PD2P52 引腳下拉功能使能控制位;0代表使能內(nèi)部下拉功能 ;1代表禁止內(nèi)部下拉功能BIT1/PD1P51 引腳下拉功能使能控制位;0代表使能內(nèi)部下拉功能 ;1代表禁止內(nèi)部下拉功能BIT0/PD0P50 引腳下拉功能使能控制位;0代表使能內(nèi)部下拉功能 ;1代表禁止內(nèi)部下拉功能漏極開路控制寄存器IOCC各位定義如表1.8所示。表1.8 漏極開路控制寄存器IOCCBIT7OD7P67引腳漏極開路功能使能控制位;0代表禁止漏極開路輸出;1代表使能漏極開路輸出BIT6OD6P66引腳漏極開路功能使能控制位;0代表禁止漏極開路輸出;1代表使能漏極開路輸出BIT5OD5P65引腳漏極開路功能使能控制位;0代表禁止漏極開路輸出;1代表使能漏極開路輸出BIT4OD4P64引腳漏極開路功能使能控制位;0代表禁止漏極開路輸出;1代表使能漏極開路輸出BIT3BIT2OD2P62引腳漏極開路功能使能控制位;0代表禁止漏極開路輸出;1代表使能漏極開路輸出BIT1OD1P61引腳漏極開路功能使能控制位;0代表禁止漏極開路輸出;1代表使能漏極開路輸出BIT0OD0P60引腳漏極開路功能使能控制位;0代表禁止漏極開路輸出;1代表使能漏極開路輸出上拉控制寄存器IOCD各位定義如表1.9所示。表1.9 上拉控制寄存器IOCDBIT7/PH7P67引腳上拉功能使能控制位;0代表使能內(nèi)部上拉功能;1代表禁止內(nèi)部上拉功能BIT6/PH6P66引腳上拉功能使能控制位;0代表使能內(nèi)部上拉功能;1代表禁止內(nèi)部上拉功能BIT5/PH5P65引腳上拉功能使能控制位;0代表使能內(nèi)部上拉功能;1代表禁止內(nèi)部上拉功能BIT4/PH4P64引腳上拉功能使能控制位;0代表使能內(nèi)部上拉功能;1代表禁止內(nèi)部上拉功能BIT3BIT2/PH2P62 引腳上拉功能使能控制位;0代表使能內(nèi)部上拉功能;1代表禁止內(nèi)部上拉功能BIT1/PH1P61 引腳上拉功能使能控制位;0代表使能內(nèi)部上拉功能;1代表禁止內(nèi)部上拉功能BIT0/PH0P60 引腳上拉功能使能控制位;0代表使能內(nèi)部上拉功能;1代表禁止內(nèi)部上拉功能通過操作IOCB、IOCC、IOCD寄存器可以設(shè)置端口的輸入輸出方式。當(dāng)某端口作為輸入口使用時,只需要考慮是否上拉或者下拉;當(dāng)某端口作為輸出口使用時,則考慮是否開漏極輸出。端口采用內(nèi)部上拉,可以減少外部對引腳電平的干擾,如果要實(shí)現(xiàn)檢測某端口是否為低電平的功能,則必須設(shè)置為內(nèi)部上拉,若該端口沒有上拉功能,則需要外部加上拉電阻。端口采用內(nèi)部下拉,理論上可以減少外部對引腳電平的干擾,但是實(shí)際的測試效果不明顯,和沒有設(shè)置下拉的效果一樣。所以如果端口設(shè)置為內(nèi)部下拉,該端口只可以用于檢測高電平,但是在沒有輸入的情況下,該引腳的電平并沒有變?yōu)?V以下,不能看作真正的低電平。端口采用內(nèi)部開漏極輸出,適用于微處理器工作電壓與外圍器件工作電壓不相同的場合,輸出的高電平將達(dá)不到VDD電壓值。5、看門狗定時器控制寄存器IOCE看門狗定時器控制寄存器IOCE各位定義如表1.10所示。表1.10 看門狗定時器控制寄存器IOCE地址BIT7WDTE看門狗定時器使能控制位:0代表禁止WDT;1代表使能WDTBIT6EIS定義P60(/INT)引腳功能的控制位:0定義P60為雙向I/O引腳;1定義為外部中斷輸入引腳/INT,在此情況下,P60 引腳的I/O 控制位(IOC6 的bit 0)必須置為“1”BIT501.4 數(shù)據(jù)存儲器的配置通過了解數(shù)據(jù)存儲器的分布,可以在仿真時直接了解各個寄存器的狀態(tài)以及程序運(yùn)行情況,數(shù)據(jù)存儲器的配置如表1.11所示。表1.11 數(shù)據(jù)存儲器配置地址R PAGE寄存器 IOC PAGE寄存器00R0 間接尋址寄存器保留 01R1定時/ 計(jì)數(shù)器CONT控制寄存器02R2程序計(jì)數(shù)器保留 03R3狀態(tài)寄存器保留 04R4RAM 選擇寄存器保留 05R5Port5IOC5 I/O 端口控制寄存器06R6Port6IOC6 I/O 端口控制寄存器07保留 保留 08保留 保留 09保留 保留 0A保留 保留 0B保留 IOCB下拉控制寄存器0C保留 IOCC漏極開路控制寄存器0D保留 IOCD上拉控制寄存器0E保留 IOCE看門狗定時器控制寄存器0FRF中斷狀態(tài)寄存器IOCF中斷屏蔽寄存器102F通用寄存器 無1.5 休眠與喚醒EM78P152/3S微處理器可以在程序中執(zhí)行SLEP指令將進(jìn)入休眠模式,微處理器可以由以下事件喚醒:(1)/RESET引腳的外部復(fù)位信號輸入;(2)WDT溢出 ( 若使能); (3)Port 6輸入狀態(tài)改變( 若使能);“/RESET引腳的外部復(fù)位信號輸入”以及“WDT溢出”都將使EM78P152/3S復(fù)位,可用R3寄存器的T和P標(biāo)志位來判斷復(fù)位源(喚醒源)。由于采用上電復(fù)位的方式,P63腳將作為輸入腳使用,而不用作復(fù)位腳,所以不存在復(fù)位腳;另外若WDT的使用頻率不高,可以設(shè)置為不使能(附:實(shí)際中可以不采取這兩種喚醒模式)。實(shí)際中更多考慮的則是“Port 6輸入狀態(tài)改變”的喚醒模式?!癙ort 6輸入狀態(tài)改變”將綜合考慮后續(xù)程序的執(zhí)行和全局中斷(“ENI”或 “DISI”指令的執(zhí)行情況) ,來決定控制器在喚醒后是否進(jìn)入中斷向量。如果在SLEP指令前執(zhí)行了ENI指令,喚醒后將從地址為008H處開始執(zhí)行。如果在SLEP指令前執(zhí)行了DISI 指令,喚醒后將從SLEP 指令的下一條指令開始執(zhí)行。在SLEP指令之前Port6輸入狀態(tài)的改變中斷要使能,即中斷使能寄存器(IOCF)中ICIE位要置“1”,同時必須通過軟件編程禁止WDT,但代碼選項(xiàng)寄存器(Code Option)的WDT位仍要保持使能。代碼選項(xiàng)寄存器將在介紹燒錄程序的章節(jié)詳細(xì)介紹。休眠與管腳喚醒的使用步驟:(1)喚醒端口設(shè)置為輸入口;(2)使能喚醒端口內(nèi)部上拉;(3)設(shè)置WDT分頻比大于1:1,并禁止WDT;(4)清TCC;(5)讀PORT6狀態(tài),即下“MOV PORT6,PORT6”指令; (6)使能喚醒功能設(shè)置ICIE 位為“1”;(7)如需要中斷則使能總中斷下“ENI ”指令; (8)下“SLEP”指令; (9)加三條“NOP”指令延時; (10)下“WDTC”指令;(11)禁止WDT;(12)禁止管腳喚醒功能;在編程的時候,要注意執(zhí)行SLEP指令之前,要按照上述步驟編寫,在SLEP指令后面要加上三條“NOP”指令,這個不能夠缺少。在休眠模式下,若WDT已使能,WDT也將被清零,但WDT會繼續(xù)保持運(yùn)行狀態(tài)。在喚醒后,要間隔10ms左右就要執(zhí)行一次“WDTC”指令,防止WDT溢出引起復(fù)位。此處設(shè)置預(yù)分頻的比例要大于1:1也是為防止WDT溢出引起復(fù)位。1.6 分頻器看門狗定時器WDT與TCC共用一個分頻器,但某一時刻分頻器只能夠分配給二者之一。與TCC配合使用時,它是以一個“預(yù)”分頻器的角色出現(xiàn)在TCC的輸入信號路徑中的;而與WDT配合使用時,它是以一個“后”分頻器的角色出現(xiàn)在WDT的輸出信號路徑中的。分頻器實(shí)際上就是一個8位的累加計(jì)數(shù)器,不過不能夠像TCC那樣通過內(nèi)部數(shù)據(jù)總線用軟件進(jìn)行讀寫操作。分頻器的功能就是將進(jìn)入TCC的時鐘信號(或從WDT出來的序列脈沖信號)頻率除以一個指定的倍數(shù),這個倍數(shù)就是分頻比,由CONT寄存器中的PSR2PSR0位決定。需要注意的是,當(dāng)分頻器分配給TCC時,任何以TCC為目標(biāo)的寫操作指令(如CLR TCC、MOV TCC,A)都會同時將分頻器清零。同理當(dāng)分頻器分配給WDT時,一條清WDT的指令(WDTC)將會同時將分頻器清零。這里說的只是分頻器清零,而分配比和分配的對象不會改變。看門狗定時器的時鐘源是一個自由運(yùn)行的片內(nèi)RC振蕩器。即使在其它的振蕩器關(guān)閉的時候(也就是休眠模式下),WDT仍然保持運(yùn)行。在正常模式下或休眠模式下,WDT溢出(若WDT使能)將會使器件產(chǎn)生復(fù)位。在正常模式下,可以通過軟件編程為禁止或使能,不使用分頻器的時候,WDT的溢出周期約為18ms。所以通常從休眠模式下喚醒后要間隔一段時間就要加一條清WDT的指令,防止WDT溢出產(chǎn)生復(fù)位。1.7 定時器/計(jì)數(shù)器TCC與定時器/計(jì)數(shù)器TCC模塊相關(guān)的寄存器有4個,分別為R1(TCC寄存器)、RF(中斷狀態(tài)寄存器)、CONT(控制寄存器)、IOCF(中斷屏蔽寄存器)。TCC具有兩種工作模式,一種定時器模式,另一種是計(jì)數(shù)器模式。兩種模式之間的主要差異就是送入累加計(jì)數(shù)寄存器TCC的“觸發(fā)信號”的來源不同而已。TCC的工作模式由CONT(控制寄存器)的第5位TS決定。(1)工作模式1、定時器模式當(dāng)TS為0時,TCC模塊工作在定時器模式,觸發(fā)信號源取自于內(nèi)部的指令周期信號。一旦往計(jì)數(shù)器中寫入初始值后,TCC便重新啟動累加計(jì)數(shù)。在沒有使用分頻器的情況下,TCC會在每個指令周期信號到來時自動加1。在配置了分頻器的情況下,指令周期信號經(jīng)過分頻器分頻后送給TCC,使TCC自動加1。2、計(jì)數(shù)器模式當(dāng)TS為1時,TCC模塊工作在計(jì)數(shù)器模式,觸發(fā)信號源取自芯片外部引腳TCC上面的輸入信號??梢酝ㄟ^CONT(控制寄存器)的第4位TE設(shè)定外部時鐘信號的觸發(fā)邊沿,TE=1時下降沿觸發(fā);TE=0時上升沿觸發(fā)。處于計(jì)數(shù)器模式下,一旦往計(jì)數(shù)寄存器中寫入初值后,TCC便立即開始新一輪的累加計(jì)數(shù)。值得注意的一點(diǎn):在一些沒有使用到TCC的應(yīng)用項(xiàng)目中,如果TCC進(jìn)入定時器模式,只要單片機(jī)處于非睡眠狀態(tài),內(nèi)部時鐘就不會停止,以指令周期為觸發(fā)信號的TCC就不停的自動累加。這不僅增加單片機(jī)額外的電能消耗,而且會個給片內(nèi)其他數(shù)字電路帶來不必要的干擾。此時可以將CONT(控制寄存器)的TS位設(shè)定為“1”,使TCC工作在計(jì)數(shù)器模式;同時將外部觸發(fā)輸入引腳TCC固定接到VDD或VSS,這樣可以使TCC永遠(yuǎn)處于靜止?fàn)顟B(tài)。(2)TCC的應(yīng)用使用步驟:1、給TCC寄存器賦初值;2、設(shè)置CONT寄存器(選擇時鐘源并設(shè)置預(yù)分頻比,當(dāng)預(yù)分頻比分配給WDT時TCC預(yù)分頻比為1:1);3、若需要執(zhí)行中斷功能,需設(shè)置IOCF寄存器中的TCIE位為“1”,并執(zhí)行“ENI”指令。注意:每次計(jì)時溢出需給TCC賦初值(初值為0除外)。計(jì)算公式T=(1/FOSC)*Prescaler*(256-TCCcnt)*2(CLK=2)T=(1/FOSC)*Prescaler*(256-TCCcnt)*4(CLK=4)FOSC:TCC時鐘源頻率;Prescaler:TCC預(yù)分頻比;TCCcnt:TCC(R1)初始值。例如:FOSC=4MHz;Prescaler=256;TCCcnt=0;CLK=2時,計(jì)算定時時間TT=(1/4MHz)*256*(256-0)*2(CLK=2)=32.768ms第二章 EM78系列單片機(jī)應(yīng)用軟件的編輯與仿真EMC Simulator是一款開發(fā)軟件,也是一種非實(shí)時性、非在線的仿真工具,在某種程度上可以代替價格較貴的硬件仿真器,它屬于軟件模擬器的范疇,以純軟件的方式模擬仿真EM78P153、EM78P156E、EEM78P447S這三種型號的單片機(jī)。通過軟件的手段來模擬單片機(jī)的指令執(zhí)行過程和內(nèi)部硬件資源的操作方法,從而實(shí)現(xiàn)對用戶源程序的模擬運(yùn)行、功能調(diào)試和(深層次)邏輯錯誤查找。EMC Simulator的局限性:(1)不能夠模擬單片機(jī)的片外電路;(2)執(zhí)行速度慢,只適合調(diào)試實(shí)時性要求不高的程序。2.1 Simulator的下載與安裝用戶可以通過訪問這個網(wǎng)站/support.php?class=1,下載EMC Simulator仿真軟件,圖2.1所示的是打開網(wǎng)站后的頁面。圖2.1 網(wǎng)站頁面在技術(shù)支持的標(biāo)題下面就有一個Simulator(義隆windows模擬仿真軟件)的連接,點(diǎn)擊之后便自動下載。在下載完之后,可以在下載的文件中,找“Setup.exe”的可執(zhí)行文件。雙擊該文件,即可以開始安裝了。安裝的位置可以自由設(shè)置,然后一直點(diǎn)擊Next,直到完成安裝。可以看到桌面上將會多了一個新的圖標(biāo),雙擊既可以運(yùn)行此軟件。2.2 Simulator的使用方法通過模擬仿真第一章中示例2的程序,來介紹如何使用EMC Simulator軟件。(1)如何建立一個新項(xiàng)目打開軟件后會出現(xiàn)如圖2.2所示的對話框,在下拉選項(xiàng)中可以設(shè)置要模擬的芯片型號,選擇EM78P153點(diǎn)擊OK,便進(jìn)入了軟件的界面。圖2.3 新建工程窗口圖2.2 型號選擇對話框圖2.4 新建工程文件對話框創(chuàng)建一個新項(xiàng)目的方法有兩種:方法一:選擇菜單命令:ProjectNew.,會出現(xiàn)一個如圖2.3所示的對話框,在其“Project Name”內(nèi)輸入自己的項(xiàng)目文件名(比如在此定義為jf002),系統(tǒng)會自動追加一個擴(kuò)展名.prj。方法二:選擇菜單命令FileNew.,會出現(xiàn)一個如圖2.4所示的對話框,在其中選擇“Project”標(biāo)簽,并且在其“Project Name:”條內(nèi)輸入自己的項(xiàng)目名稱。(2)如何在項(xiàng)目中添加文件圖2.6 寄存器和I/O窗口選擇菜單命令FileNew.,出現(xiàn)一個如圖2.4所示的對話框。在“File”標(biāo)簽下,其“File Name”條內(nèi)輸入自己的源程序文件名,左側(cè)窗口內(nèi)三個選項(xiàng)分別對應(yīng)三種不同拓展名的文件:源程序文件(.dt或.asm)、頭文件(.h)、和文本文件(.txt)。點(diǎn)擊“OK”后,會出現(xiàn)如圖2.5所示的空白源文件編輯窗口。在其中可以編輯源程序,也可以直接將已經(jīng)寫好的程序粘貼進(jìn)來。圖2.5 源程序編輯窗口對于文本編輯的幾點(diǎn)說明:1、支持漢字輸入和編輯功能2、標(biāo)點(diǎn)符號的輸入要在半角的西文方式下輸入。3、通過選擇菜單命令OptionFont.來自由設(shè)置字體字號。(3)如何調(diào)試程序在調(diào)試程序之前,要進(jìn)行程序的編譯工作,選擇菜單命令ProjectRebuild All,此后在輸出信息窗口可以看到匯編和鏈接的結(jié)果。沒有錯誤,沒有警告,沒有提示信息,編譯完成之后,進(jìn)行復(fù)位操作,復(fù)位之后的寄存器狀態(tài)如圖2.6所示。圖2.7 調(diào)試示意圖1復(fù)位操作的具體方法有三種:(1)選擇菜單命令DebugReset(2)按一次鍵盤上F6鍵;(3)點(diǎn)擊工具欄上面的圖標(biāo)。軟件模擬器提供了多種運(yùn)行程序的方式或調(diào)試程序的手段,比較常用的有以下幾種:設(shè)置寄存器觀察窗、復(fù)位、連續(xù)運(yùn)行、單步運(yùn)行、自動單步運(yùn)行和連續(xù)單步運(yùn)行、設(shè)置斷點(diǎn)運(yùn)行、自由運(yùn)行、運(yùn)行到光標(biāo)、從指定行開始運(yùn)行等。其具體的用法和Keil中的調(diào)試類似。此實(shí)例中采用單步運(yùn)行的方式來調(diào)試程序,這樣可以很直觀的看到每條語句執(zhí)行完后寄存器的改變情況(每次寄存器的數(shù)值有修改都會將改動的地方變?yōu)榧t色,以示區(qū)別)。通過單步操作,程序?qū)贓XI_WAIT子程序中循序執(zhí)行,等待外部中斷信號。如圖2.7所示。此時通過修改寄存器的值,來模擬外部中斷信號的產(chǎn)生,進(jìn)而觀察程序的運(yùn)行情況。圖2.8 調(diào)試示意圖2圖2.9 調(diào)試示意圖3具體方法:將光標(biāo)停留在P6端口的第1位上面,然后單擊鼠標(biāo)左鍵,此時第1位和第2位之間將會出現(xiàn)閃爍的光標(biāo)。通過輸入0來模擬外部中斷的下降沿信號。每修改一個數(shù)字,系統(tǒng)均會立即更改“軟件模擬器”的緩沖存儲器。人工修改后的值自動以“藍(lán)色”顯示,以示區(qū)別。操作的示意圖如圖2.8。此時點(diǎn)擊單步運(yùn)行一次,就會看到PC指針已經(jīng)指向了地址0x08,這是中斷的入口地址,操作示意圖如圖2.9。2.3 Simulator系統(tǒng)常用命令匯總(1)自定義寄存器變量的視窗Watch圖2.10 添加變量到觀察窗通過選擇View菜單命令,選擇Watch選項(xiàng),可以打開觀察窗(Watch Window)。剛打開時是一個空窗口,可以添加所需觀察的寄存器變量。操作步驟如下:利用菜單命令ProjectDump to ICE ,將目標(biāo)文件裝載到模擬器的虛擬緩沖器內(nèi)。利用菜單命令DebugAdd label to watch,即可打開一個如圖2.10所示的對話框,在“File”窗口顯示源程序及其存放路徑。在“Label”窗口中,選中其中的變量,然后點(diǎn)擊“Add to watch”按鈕,此時在該變量前面就會出現(xiàn)一個“*”,表明該變量已經(jīng)比添加到了Watch窗口。(2)Get 1FFF Code Space(獲取程序存儲器占用信息)圖2.12 寄存器顯示格式對話框圖2.11 輸出視窗獲取關(guān)于程序存儲器各個頁面空閑情況的統(tǒng)計(jì)信息,并且顯示在輸出信息窗口中。例如在調(diào)試示例2的集成模擬環(huán)境中,在Tool下拉菜單命令中點(diǎn)擊此條內(nèi)容,則會顯示如下如圖2.11里面的內(nèi)容。該內(nèi)容表示程序存儲的位置以及沒有使用的地址范圍,其中Start與End表示沒有使用的起始地址與結(jié)束地址,Size表示是沒有使用的地址的范圍。需要說明的是,這里面說顯示的剩余空間是指在0x50前面的地址,而在其后面的地址是沒有給出的。在0x50后面的地址是存放主程序的。(3)Register view(寄存器視圖)設(shè)定部分常用寄存器的顯示格式,是以十六進(jìn)制還是以二進(jìn)制格式顯示。方法是在Option選擇命令中選擇其選項(xiàng)。在彈出的對話框中,把打算二進(jìn)制顯示的寄存器進(jìn)行勾選,沒有勾選的默認(rèn)為以十六進(jìn)制顯示,如圖2.12所示。(4)Debug(調(diào)試類操作命令)在Debug下拉菜單如圖2.13所示,從上到下依次代表的含義是:1、Go:連續(xù)運(yùn)行2、Reset:系統(tǒng)復(fù)位圖2.13 調(diào)試類操作命令3、Step into:單步進(jìn)入4、Step over :單步跨越5、Go to Cursor:運(yùn)行到光標(biāo)處6、Animation:自動單步運(yùn)行7、Run from selected line:選定行作為運(yùn)行的起點(diǎn)8、Toggle Brakpoint :設(shè)置、刪除斷點(diǎn)9、Show all breakpint:顯示所有的斷點(diǎn)10、Add label to watch:添加標(biāo)號到觀察窗11、Reset and Free run:復(fù)位和自由運(yùn)行12、Reset and Go:復(fù)位和連續(xù)運(yùn)行13、Clear all breakpoint :清除所有的斷點(diǎn)14、Clear watch:清除觀察窗15、Trace back:反向追蹤16、Track forth:正向追蹤2.4 Simulator仿真中的常見問題1、仿真時候出現(xiàn)執(zhí)行完一些語句后,但相應(yīng)的寄存器并沒有修改?【方法】一般情況下是軟件自身問題,需要關(guān)閉軟件后再重新打開仿真。2、在程序中設(shè)置端口的值,執(zhí)行完相關(guān)語句后,端口的值并沒有改變?【方法】需要明確的是先設(shè)置的端口值還是先設(shè)置的端口輸入輸出狀態(tài),如果是先設(shè)置的是端口值,那么要等設(shè)置完端口的輸入輸出狀態(tài)后,才會在寄存器窗口中顯示出來。一般先設(shè)置端口的輸入輸出狀態(tài)再設(shè)置端口值,那么就不會出現(xiàn)這種情況了。3、編譯的時候提示找不到頭文件?【方法】把頭文件放到在工程文件的目錄下面,再次編譯既可以。4、編譯時出現(xiàn)地址超過多少范圍的提示?【方法】對于EM78P153地址最大可以到1FFH,而EM78P153S則可以到3FFH。仿真軟件只能夠仿真EM78P153,所以如果程序的存儲地址超過了1FFH,就會出現(xiàn)錯誤提示。如果需要仿真EM78P153S的程序,而且程序的存儲地址已經(jīng)超過了1FFH,那么只能夠通過硬件仿真器來實(shí)現(xiàn)了。5、頭文件的調(diào)用由于仿真軟件只能夠仿真型號為EM78P153的芯片,而不能夠仿真EM78P153S芯片,所以仿真時在調(diào)用頭文件的時候,要注意調(diào)用的是EM78P153.INC頭文件,而不是EM78P153S.INC頭文件。這兩個頭文件只是里面的定義方式有不同,在程序調(diào)用中,不存在差別。當(dāng)要燒錄EM78P153S芯片程序的時候,只要在另一款義隆單片機(jī)的編譯軟件(Wice Plus)中,新建一個工程并且將之前仿真時候建立的以“.DT”為后綴的文件添加進(jìn)來,然后將頭文件改為EM78P153S.INC,編譯通過之后就可以通過燒錄軟件給芯片燒錄程序了,具體的過程燒錄程序章節(jié)介紹。6、在調(diào)試程序時,若采取程序延時且延時時間比較長就會出現(xiàn)程序亂跑的情形?【方法】將延時函數(shù)循環(huán)變量的值設(shè)小些,再次調(diào)試,如果不行,就需要設(shè)置更小。一般調(diào)試的時候是設(shè)置為1,便于程序的調(diào)試。出現(xiàn)這種問題的原因可能是軟件自身的缺陷所致。所以,一旦程序中需要延時功能,盡可能采取硬件定時手段(定時器)。第三章 EM78系列單片機(jī)的匯編指令EM78系列單片機(jī)共有指令47條(EM78P447、EM78P 451、EM78P 458各有48條),指令碼寬度為13位。一條指令的指令碼一般可以分成兩部分:第一部分為操作碼,代表指令的功能;第二部分為操作數(shù),表示指令操作的對象,或運(yùn)算時所需要的參數(shù)。3.1 尋址方式指令是CPU執(zhí)行特殊運(yùn)算的代碼,它是程序語句的核心,一般在程序語句中還包含有操作數(shù),對操作數(shù)的操作就需要明確操作數(shù)的屬性,即究竟是源操作數(shù)還是目的操作數(shù)?究竟是參與運(yùn)算的數(shù)據(jù)還是數(shù)據(jù)所在的存放地址?總體而言就是需要對操作數(shù)尋址。尋址就是尋找操作數(shù)的存放地址,尋址方式就是尋找操作數(shù)或者操作數(shù)所在地址的方法或形式。根據(jù)操作數(shù)來源的不同,有5種尋址方式。(1)立即數(shù)尋址:操作數(shù)為立即數(shù),直接從指令中獲取。例 MOV A,0x16;將常數(shù)0x16送給寄存器A(2)直接尋址:若是要存取寄存器的內(nèi)容,需要通過累加器A來過渡。例 將寄存器0x20的內(nèi)容,復(fù)制到寄存器0x21中。MOVA, 0x20MOV0x21, A(3)間接尋址:通過寄存器R4來實(shí)現(xiàn),R4的bit0-5是用來選擇寄存器(地址:00-06,0F-3F)若是使用者所需要存取的寄存器,有位址相鄰的特性,使用間接尋址是很方便的。例 寫一個程序,將寄存器0x20 0x3F的值都填0。MOVA, 0x20 ;設(shè)定A=0x20MOV0x04, A ;設(shè)定間接尋址寄存器0x04AGAIN:CLR0 ;清除0x04所指的寄存器INC 0x04 ;遞增間接尋址寄存器0x04MOVA, 0x04 ;將0x04寄存器的值送AXOR A, 0x3F ;比較間接尋址的地址是否到0x3fJBS 0x03, 2 ;若到了則結(jié)束JMPAGAIN ;否則繼續(xù)循環(huán)執(zhí)行END(4)隱含尋址:采用隱含尋址方式的指令,在指令碼中不必指明存放著操作數(shù)的存儲地址。如CONTR指令,它將控制寄存器CONT的內(nèi)容讀取之后,送累加器A中,CONT寄存器沒有統(tǒng)一的地址編碼,這個與眾不同。(5)位尋址:位尋址是對寄存器中的任一位(bit)進(jìn)行操作。例 BS0x12,2;將寄存器0x12的第2位置為“1”。3.2 偽指令偽指令指出了要求匯編編譯器在翻譯期間執(zhí)行的動作,偽指令如表3.1所示。表3.1 偽指令介紹符 號說 明例 子ORG 設(shè)定后續(xù)代碼的起始地址 ORG 0x010 ;定義地址從010H開始 MOV A ,0xFF ;此條指令放置在010H地址 MOV P6 ,A ;此條指令放置在011H地址 EQU 符號或常數(shù)定義TCC = 0x01 TCC EQU 0x01 = EOP 宣告本頁結(jié)束(一個程序頁為1K)ORG 0x000 NOP EOP ;宣告上頁結(jié)束 NOP ;此條指令放置在400H(下頁起始地址) END程序結(jié)束END之后的程序不被編譯ORG 0x10 MOV 0x20,A END MOV A ,0x11;此條指令將不被編譯INCLUDE 插入別的檔案讓程式更為簡潔INCLUDE“C:EMCTESTTEST153S.INC” MACRO 表達(dá)式 ENDM巨集定義指令帶的參數(shù)不能大于9個BANK0 MACROBC 0x04,6ENDM3.3 指令速查表表3.2中將EM7系列的單片機(jī)的指令歸納并且分類。其中符號“R”代表

溫馨提示

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

評論

0/150

提交評論