PIC單片機原理及應用_第1頁
PIC單片機原理及應用_第2頁
PIC單片機原理及應用_第3頁
PIC單片機原理及應用_第4頁
PIC單片機原理及應用_第5頁
已閱讀5頁,還剩146頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PIC單片機原理及應用1主講:許輝郵箱:xuh@《PIC單片機原理及應用》實驗內(nèi)容安排:全校任選課(☆)PIC單片機原理介紹(10學時※)工具軟件及實驗 (4學時※)系統(tǒng)基本功能設計及實驗(12學時※)綜合設計實驗 (4學時※)2西安電子科技大學國家電工電子教學基地西電-MICROCHIP公司聯(lián)合實驗室(E樓II-406)PIC單片機原理及應用第1章概述31.1PIC單片機簡介什么是單片機?

單片機(MCU)是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的計算機系統(tǒng)。

PIC單片機是由MicrochipTechnologyInc.(美國微芯科技公司)推出的系列產(chǎn)品。41.2PIC單片機產(chǎn)品系列PICmicro?

單片機

Microchip的8位/16位/32位PIC單片機系列具有高性能、低成本和封裝體積小等特點,是業(yè)界性價比最佳的產(chǎn)品。據(jù)業(yè)界權(quán)威研究機構(gòu)Dataquest資料,全球8位單片機(MCU)付運量排名第一。dsPIC?

數(shù)字信號控制器

dsPIC?

數(shù)字信號控制器(DSC)系列具備一個完全實現(xiàn)的數(shù)字信號處理器(DSP)引擎。該系列dsPIC30F和dsPIC33F16位閃存DSC具有業(yè)界最高的性能,適用于電機控制、功率轉(zhuǎn)換、傳感器和通用應用等。51.2PIC單片機產(chǎn)品系列61.3主要應用領域77辦公設備工業(yè)控制通信系統(tǒng)電子玩具金融電子儀器儀表汽車工業(yè)家用電器艦船設備航空航天1.4常見單片機比較51:通用性,用的最多,主要是內(nèi)核是公布的,很多情況下,各個廠家做了自己特有的外設擴展,比如aduc51的ad,da,,高頻發(fā)射模塊,cpress的usb功能等等,PIC:工業(yè)穩(wěn)定性,適用于用量大,檔次低,價格敏感的產(chǎn)品.在辦公自動化設備,消費電子產(chǎn)品,電訊通信,智能儀器儀表,汽車電子,金融電子,工業(yè)控制不同領域都有廣泛的應用;MSP430:低功耗應用,經(jīng)常被電池、儀表應用設計師所選用81.5PIC單片機特點91、結(jié)構(gòu)1.5PIC單片機特點2、RISC技術(shù)/指令集(匯編指令)RISC技術(shù)(RedudedInstructionSetComputer--精簡指令集計算機):改善結(jié)構(gòu),更加合理的提高運算速度。除判斷轉(zhuǎn)移指令,其他指令都是單周期指令。尋址方式簡單,指令代碼壓縮率高101K字節(jié)的存儲器空間——PIC系列單片機能夠存放1024條指令——MCS-51系列單片機大約只能存放600條指令1.6PIC單片機特點3、內(nèi)嵌DSP引擎: dsPIC?

數(shù)字信號控制器(DSC)系列內(nèi)嵌DSP引擎,具備實現(xiàn)數(shù)字信號處理器的基本功能,如FFT、FIR濾波等。4、CMOS工藝特性功耗低電壓范圍寬工作溫度范圍寬:-40~

+125攝氏度5、驅(qū)動能力強每個輸出引腳可以驅(qū)動多達20-25mA的負載一般端口總驅(qū)動能力約60-70mA111.5PIC單片機特點6、接口豐富,能實現(xiàn)各種功能I/O口具有20mA的驅(qū)動能力8路、10位的AD轉(zhuǎn)換I2C,SPI,USART,USB,CAN,以太網(wǎng)接口WDT(看門狗)CCP(脈寬/捕捉/比較)內(nèi)置EEPROM3路定時器多種中斷源支持休眠的低功耗模式流式的并行接口內(nèi)置LCD控制器芯片加密……121.6

PIC單片機命名規(guī)則1、PIC單片機編號包括下列5個部分:2、器件類型和代號關系

代號類型CCMOSLC低功耗CMOSCRCMOSROMLCR低功耗CMOSROMLV低電壓FFLASH程序存儲器FRFLEXROM13PICXXXXXXX-XXX/XXXXX

器件類型振蕩頻率溫度封裝存儲器編程方式1.6

PIC單片機命名規(guī)則3、振蕩方式/頻率和代號關系:4、溫度與代號關系:代號振蕩方式/頻率LP低頻低功耗晶體振蕩RC低成本阻容振蕩XT標準晶體/陶瓷振蕩HS高速晶體/陶瓷振蕩022MHZ084MHZ2020MHZ2525MHZ3333MHZ代號溫度空白0~

70I-40~+85E-40~

+125141.6

PIC單片機命名規(guī)則5、程序存儲器編程方式EPROM:可反復擦寫,紫外線照射20分鐘以上除去片上信息E2PROM或FLASH:可在線進行程序的反復擦寫OTP:一次編程方式:一個產(chǎn)品周期后降低成本用,專用設備完成燒寫,適合小批量非定型產(chǎn)品QTP:快速批量編程SQTP:連續(xù)批量編程ICSP:電路內(nèi)連續(xù)編程掩模ROM:一個產(chǎn)品周期后降低成本用,適合大批量定型產(chǎn)品,必須請制造商借助專用設備完成151.6

PIC單片機命名規(guī)則dsPIC30/33F產(chǎn)品器件編號規(guī)則161.7單片機開發(fā)流程確定任務確定待開發(fā)產(chǎn)品的功能、所實現(xiàn)的指標成本,進行可行性分析。完成時間總體設計機型選擇

外型設計、功耗、使用環(huán)境軟、硬件任務劃分,方案確定硬件設計確定功能

繪制原理圖及布線圖選購元器件、焊接線路板、組裝、調(diào)試軟件設計建立數(shù)學模型,進行資源分配及結(jié)構(gòu)設計

繪制流程圖設計、編制個子程序模塊

仿真、調(diào)試,固化樣機聯(lián)調(diào)軟硬件結(jié)合起來調(diào)試

找錯、修改軟硬件進行軟硬件測試,進行老化實驗、高低溫實驗、振動實驗產(chǎn)品定型17PIC單片機原理及應用第2章

結(jié)構(gòu)182.1內(nèi)部結(jié)構(gòu)系統(tǒng)集成外設CPU內(nèi)核CPU內(nèi)核是器件運行所必需的基本部分。CPU數(shù)據(jù)存儲器程序存儲器DSP引擎中斷19系統(tǒng)集成可以降低系統(tǒng)成本提高系統(tǒng)可靠性提高設計靈活性。振蕩器復位看門狗定時器和低功耗模式閃存和EEPROM編程器件配置低電壓檢測

外設功能是允許器件與外界交換信息。1.I/O端口 2.定時器 3.輸入捕捉模塊4.輸出比較模塊 5.正交編碼器接口(QEI)6.10位AD轉(zhuǎn)換器7.12位AD轉(zhuǎn)換器 8.UART模塊 9.SPITM模塊10.I2CTM模塊 11.CAN模塊 12.數(shù)據(jù)轉(zhuǎn)換器接口(DCI)模塊

2.2CPU內(nèi)核CPU內(nèi)核采用(8/16/32位數(shù)據(jù))改良的哈佛架構(gòu),并帶有增強型指令集,dsPIC系列包含對DSP的有力支持。CPU指令字帶有長度可變的操作碼字段。程序計數(shù)器(PC),可以尋址用戶程序存儲器空間。單周期指令預取機制用來幫助維持吞吐量并提供可預測的執(zhí)行。222.2.1算術(shù)邏輯單元(ALU)ALU能進行加、減、單位移位和邏輯運算。除非特別指明,算術(shù)運算一般是以2進制補碼形式進行的。根據(jù)所使用的指令模式,ALU可以執(zhí)行8/16/32位操作。根據(jù)指令的尋址模式,ALU操作的數(shù)據(jù)可以來自W寄存器陣列或數(shù)據(jù)存儲器,輸出數(shù)據(jù)可以被寫入W寄存器陣列或數(shù)據(jù)存儲單元。根據(jù)不同的操作,ALU可能會影響SR寄存器中的進位標志位(C)、全零標志位(Z)、負標志位(N)、溢出標志位(OV)和輔助進位標志位(DC)的值。232.2.2DSP引擎DSP引擎由一個高速17位x17位乘法器、一個桶形移位寄存器和一個40位加法器/減法器(兩個目標累加器、舍入邏輯和飽和邏輯)組成。dsPIC30/33

器件采用單周期指令流,可以執(zhí)行DSP指令或MCU指令。許多硬件資源可以被DSP和MCU指令共用。DSP引擎的功能如下:

1.小數(shù)或整數(shù)DSP乘法(IF)。

2.有符號或無符號DSP乘法(US)。

3.常規(guī)或收斂舍入(RND)。

4.ACCA自動飽和使能/禁止(SATA)。

5.ACCB自動飽和使能/禁止(SATB)。

6.對于寫數(shù)據(jù)存儲器,自動飽和使能/禁止(SATDW)。

7.累加器飽和模式選擇(ACCSAT)。24252.2.3除法支持16/16位有符號小數(shù)除法運算,以及32/16位、16/16位有符號和無符號整數(shù)除法運算,除法形式均為單指令迭代除法。支持以下指令和數(shù)據(jù)長度:

1.DIVF——16/16有符號小數(shù)除法

2.DIV.sd——32/16有符號除法

3.DIV.ud——32/16無符號除法

4.DIV.s——16/16有符號除法

5.DIV.u——16/16無符號除法262.2.4CPU寄存器描述SR:CPU狀態(tài)寄存器低字節(jié)SRL包含了所有的MCUALU操作狀態(tài)標志,加上CPU中斷優(yōu)先級狀態(tài)位IPL<2:0>和REPEAT循環(huán)有效狀態(tài)位RA(SR<4>)。高字節(jié)SRH包含DSP加法器/減法器狀態(tài)位、DO循環(huán)有效位DA(SR<9>)和輔助進位標志位DC(SR<8>)。CORCON:內(nèi)核控制寄存器CORCON寄存器包含控制DSP乘法器和DO循環(huán)硬件操作的位。還包含IPL3狀態(tài)位,它與IPL<2:0>(SR<7:5>)相連形成CPU中斷優(yōu)先級。27MODCON:模控制寄存器MODCON寄存器用于使能并配置模尋址(循環(huán)緩沖)。XMODSRT,XMODEND:X模起始和結(jié)束地址寄存器XMODSRT和XMODEND寄存器保持X數(shù)據(jù)存儲地址空間中執(zhí)行模(循環(huán))緩沖的起始和結(jié)束地址。YMODSRT,YMODEND:Y模起始和結(jié)束地址寄存器YMODSRT和YMODEND寄存器保持Y數(shù)據(jù)存儲地址空間中執(zhí)行模(循環(huán))緩沖的起始和結(jié)束地址。XBREV:X模位反轉(zhuǎn)寄存器XBREV寄存器用于設置位反轉(zhuǎn)尋址的緩沖區(qū)大小。282.3數(shù)據(jù)存儲器2.3.1數(shù)據(jù)地址空間數(shù)據(jù)寬度為8/16/32

位的單片機其內(nèi)部寄存器、數(shù)據(jù)空間存儲器都是以8/16/32位寬度組織的。dsPIC30/33

器件的數(shù)據(jù)存儲器具有兩個數(shù)據(jù)空間X和Y數(shù)據(jù)空間。數(shù)據(jù)空間可以看作是獨立的或者看作是統(tǒng)一的線性地址范圍。Y空間是X空間的子集,Y空間完全包含在X空間中。X和Y空間要有連續(xù)的地址。使用兩個地址發(fā)生單元(AGU)和獨立的數(shù)據(jù)路徑訪問這兩個數(shù)據(jù)空間。290x0000到0x07FF之間的地址空間保留用于器件的特殊功能寄存器SFR,包含CPU和器件上的外設的控制和狀態(tài)位。RAM從地址0x0800開始,分成兩個區(qū)塊,分別為X和Y數(shù)據(jù)空間。對于數(shù)據(jù)寫操作,總是將X和Y數(shù)據(jù)空間作為一個線性數(shù)據(jù)空間訪問。對于數(shù)據(jù)讀操作,可以分別單獨訪問X和Y存儲器空間或?qū)⑺鼈冏鳛橐粋€線性空間訪問。0x0000到0x1FFF之間8KB的地址空間稱為Near數(shù)據(jù)存儲器??赏ㄟ^所有文件寄存器指令中的13位絕對地址字段直接對Near數(shù)據(jù)存儲器尋址。30312.3.2數(shù)據(jù)存儲器訪問方式

2.4程序存儲器程序地址空間程序存儲器映射空間被劃分為用戶程序空間和用戶配置空間訪問程序空間有三種可用的方法:

1.通過23位PC。

2.通過讀表(TBLRD)和寫表 (TBLWT)指令。

3.通過把程序存儲器的32KB

段映射到數(shù)據(jù)存儲器地址空間。32

2.4.1程序計數(shù)器PC用在程序存儲器空間中對連續(xù)指令字尋址。PC以2為增量,且LSb置為“0”以使之與數(shù)據(jù)空間尋址相兼容。程序存儲器地址的LSb(PC<0>)保留為字節(jié)選擇位,用于從使用程序空間可視性或表指令的數(shù)據(jù)空間訪問程序存儲器。33

2.4.2表指令方式讀寫表指令用于將字節(jié)或字大小的數(shù)據(jù)在程序空間和數(shù)據(jù)空間之間傳送。讀表指令用于把數(shù)據(jù)從程序存儲器空間讀入數(shù)據(jù)存儲器空間。寫表指令可以把數(shù)據(jù)從數(shù)據(jù)存儲器空間寫入程序存儲器空間。程序存儲器可以視作并排放置的兩個16位字寬的地址空間,每個地址空間都有相同的地址范圍,TBLRDL和TBLWTL訪問程序存儲器的LS數(shù)據(jù)字,而TBLRDH和TBLWTH訪問高位字。34

2.4.3來自數(shù)據(jù)空間的程序空間可視性可選擇將數(shù)據(jù)存儲器地址空間的高32KB空間映射到任何16K字程序空間頁,這種操作模式被稱為程序空間可視性(PSV),它提供對存儲在X數(shù)據(jù)空間的常數(shù)數(shù)據(jù)的透明訪問,而無需使用特殊指令(即,TBLRD和TBLWT指令)。當PSV(CORCON<2>)使能時,在數(shù)據(jù)存儲器映射空間上半部分的每個數(shù)據(jù)空間地址將直接映射到一個程序地址。35PIC單片機原理及應用第3章

系統(tǒng)集成36

3.1復位復位模塊結(jié)合了所有復位源并控制器件的主復位信號SYSRST。以下列出了器件的復位源:.POR:上電復位。在檢測到VDD電壓上升時會產(chǎn)生內(nèi)部上電復位脈沖。復位脈沖會產(chǎn)生10μs短時間的延時,以確保內(nèi)部器件偏置電路穩(wěn)定。.EXTR:引腳復位(MCLR)。只要MCLR引腳拉為低電平,輸入脈沖比規(guī)定的最小寬度更長,當CLR引腳被釋放后,在下一個指令時鐘周期將產(chǎn)生SYSRST信號并開始復位向量取指。.SWR:RESET指令。只要何時執(zhí)行了RESET指令,器件都會產(chǎn)生SYSRST信號,從而將器件置于特殊復位狀態(tài)。37.WDTR:看門狗定時器復位。只要何時發(fā)生看門狗超時,器件將異步產(chǎn)生SYSRST信號。.BOR:欠壓復位。主要用途是在發(fā)生欠壓條件時產(chǎn)生器件復位。欠壓條件通常由AC電源上的干擾信號或接入大負載時過電流造成電壓下降產(chǎn)生的。.TRAPR:陷阱沖突復位。只要同時有多個硬陷阱中斷源待處理,就會產(chǎn)生器件復位。.IOPR:非法操作碼復位。.UWR:未初始化的W寄存器復位38393.2振蕩器振蕩器系統(tǒng)包含時鐘源、時鐘倍頻器、可編程時鐘后分頻器、時鐘監(jiān)視器等模塊。振蕩源.帶多時鐘模式的主振蕩器.輔助振蕩器(低功耗的32kHz晶振).FRC振蕩器:快速內(nèi)部RC(8MHz).LPRC振蕩器:低功耗內(nèi)部RC(512kHz)40PLL時鐘倍頻器:.與XT或EC時鐘模式的主振蕩器配合工作.某些器件允許PLL與內(nèi)部FRC振蕩器配合工作.輸入頻率范圍為4MHz-10MHz.4倍頻增益模式(Fout=16MHz-40MHz).8倍頻增益模式(Fout=32MHz-80MHz).16倍頻增益模式(Fout=64MHz-120MHz).帶有“失鎖”陷阱選項的PLLVCO鎖定提示.HS/2和HS/3主振蕩器模式允許選擇更高的晶振頻率(在某些器件上提供)時鐘分頻選項:.器件時鐘的通用后分頻器(分頻比為4、16和64)41423.3低壓檢測(LVD)LVD模塊可應用于電池供電的應用場合。當電池消耗能量時,電池電壓緩慢下降。電池的源阻抗也隨著能量的損耗而不斷增大。LVD模塊用于檢測電池電壓(即器件的VDD電壓)何時低于閾值,即通常所認為的接近是電池使用壽命的終點。這使應用程序有足夠的時間關閉。LVD模塊使用內(nèi)部參考電壓與供電電池電壓進行比較。閾值電壓VLVD,可在運行時編程。433.3看門狗定時器(WDT)和低功耗模式有兩種低功耗模式,可以通過執(zhí)行PWRSAV指令進入:

休眠模式:CPU、系統(tǒng)時鐘源和任何依靠系統(tǒng)時鐘源工作的外設都被禁止。這是器件的最低功耗模式。模式退出:中斷源、器件復位。

空閑模式:CPU被禁止,但是系統(tǒng)時鐘源繼續(xù)工作。外設繼續(xù)工作,但可以有選擇地禁止。模式退出:中斷源、器件復位、

WDT超時。WDT在使能時使用內(nèi)部LPRC時鐘源工作,而且如果WDT沒有被軟件清零,它可以通過復位器件來檢測系統(tǒng)軟件的異常情況。可以使用WDT后分頻器選擇不同的WDT超時周期。WDT也可用于將器件從休眠或空閑模式喚醒。44PIC單片機原理及應用第四章工具451、快速入門芯片數(shù)據(jù)手冊:可在

查找及下載,目前大多數(shù)新的芯片均有中文數(shù)據(jù)手冊免費的集成編譯調(diào)試環(huán)境MPLABIDE

集成了工程管理、語法高亮顯示的文本文件編輯器、匯編編譯器、功能強大的軟仿真調(diào)試器等,同時可外掛多種C編譯器、硬件仿真調(diào)試器、燒寫器等。下載地址:/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW0070023.主要的C語言編譯器:

目前MPLAB支持所列的所有C編譯器的內(nèi)嵌調(diào)試,單步,全速都沒問題。

不同的單片機系列必須使用不同的編譯器,目前大多數(shù)編譯器都有免費的試用版或限制版本下載,正版的也不貴。介紹及下載網(wǎng)址:/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en534868&page=wwwCompilers

4.低成本下載器、在線調(diào)試器:

PICKIT2:是廉價的產(chǎn)品,本身保護電路設計不完善,比較容易出問題。好處是可以支持脫機燒寫和KEELOQ的片子燒寫ICD2:現(xiàn)在市場上的都是國產(chǎn)授權(quán)的ICD2,價格中等,之前很多人采用,編程速度顯的有點慢,連接上比較容易出現(xiàn)問題。PICKIT3是PICKIT2的升級版,可支持脫機編程,價格跟國產(chǎn)ICD2相當,編程速度方面有提高,性價比比較好的調(diào)試器。ICD3算是中端的調(diào)試器,采用FPGA內(nèi)核,支持軟件斷點多,編程速度快,而且本身的穩(wěn)定性比較好,可以看作是一款簡化版的REAL

ICE。

2、MPLAB?C30C編譯器MPLABC30是一個遵循標準的優(yōu)化C編譯器,它包括針對dsPIC嵌入式控制應用的語言擴展。MPLABC30帶有一個完整的ANSI標準函數(shù)庫。這個函數(shù)庫包括字符串處理、動態(tài)存儲器分配、數(shù)據(jù)轉(zhuǎn)換、計時和數(shù)學函數(shù)(三角、指數(shù)和雙曲線函數(shù))、用于文件處理的標準I/O函數(shù)。MPLABC30對C源文件進行編譯,生成匯編語言文件。由編譯器生成的文件與其他目標文件和庫文件進行匯編和鏈接以產(chǎn)生最終的應用程序。與編譯器有關的目錄假定編譯器安裝在c:驅(qū)動器的pic30-tools目錄中處理器頭文件定義了每個dsPIC器件中可用的特殊功能寄存器(SpecialFunctionRegister,SFR)。處理器頭文件指定了每個器件的所有SFR,但并未定義SFR的地址。鏈接描述文件定義了SFR的地址。舉例:兩數(shù)相加的簡單C程序#include<p30f4011.h> /*這個頭文件提供了該器件的所有特殊功能寄存

器的定義*/intmain(void); /*可無*/unsignedintAdd(unsignedinta,unsignedintb); /*函數(shù)定義*/unsignedintx,y,z;Intmain(void) /*主程序*/{x=2;y=5;z=Add(x,y);return0;}unsignedintAdd(unsignedinta,unsignedintb) /*函數(shù)調(diào)用*/{return(a+b);}舉例:編譯多個文件文件1/*ex1.c*/#include<p30f4011.h>intmain(void);unsignedintAdd(unsignedinta,unsignedintb);unsignedintx,y,z;intmain(void){x=2;y=5;z=Add(x,y);return0;}

通過庫管理器和鏈接器,可以將兩個文件編譯鏈接生成可執(zhí)行文件文件2/*add.c*/#include<p30f4011.h>unsignedintAdd(unsignedinta,unsignedintb){return(a+b);}3、MPLABIDE工具語言入門安裝MPLABIDE(集成開發(fā)環(huán)境)8.56

要求:系統(tǒng)用戶賬戶名為英文,

安裝文件夾路徑中不能有中文

存放文件名必須為英文安裝C30編譯器MPLABC30V1.30MPLABC30V2.00Upgrade

三、MPLABIDE工具語言入門MPLABIDE軟件環(huán)境使用分為下面幾步驟進行:

創(chuàng)建文件使用項目向?qū)??使用項目窗口 ?設置編譯選項3. 編譯項目 ?編譯錯誤疑難解答使用MPLABSIM軟件模擬器進行調(diào)試使用MPLABICD2進行在線調(diào)試

1、生成源程序文件新建源文件:選擇File>New打開一個新的空白的源文件。保存源文件

創(chuàng)建文件使用項目向?qū)??使用項目窗口 ?設置編譯選項(可以選擇默認)3. 編譯項目 ?編譯錯誤疑難解答使用MPLABSIM軟件模擬器進行調(diào)試使用MPLABICD2進行在線調(diào)試選擇Project>ProjectWizard來創(chuàng)建新項目。將出現(xiàn)一個歡迎頁面。點擊Next>繼續(xù)。在“StepOne:SelectaDevice”中,通過下拉菜單選擇dsPIC30F6014芯片,點擊Next>繼續(xù)。在“StepTwo:Selectalanguagetoolsuite”中,選擇“MicrochipC30Toolsuite”在“StepThree:Nameyourproject”中,鍵入項目名MyProject并點擊BROWSE進入MPLABC30安裝目錄下的\examples文件夾。然后點擊NEXT>繼續(xù)在“StepFour:Addanyexistingfilestoyourproject”中,將添加兩個文件到項目中。在Summary(摘要)窗口中重新檢查“項目參數(shù)”,驗證芯片、工具包和項目文件的位置是否正確設置編譯選項現(xiàn)在已經(jīng)可以用dsPIC30F工具來編譯項目,但是,需要檢查項目和工具編譯選項。選擇Project>BuildOptions并點擊“Project”顯示整個項目的BuildOptions(編譯選項)對話框。

創(chuàng)建文件使用項目向?qū)??使用項目窗口 ?設置編譯選項(可以選擇默認)3. 編譯項目 ?編譯錯誤疑難解答使用MPLABSIM軟件模擬器進行調(diào)試使用MPLABICD2進行在線調(diào)試選擇Project>BuildAll對項目進行編譯、匯編和鏈接。如果有任何錯誤或警告消息,會顯示在輸出窗口中。如果在項目編譯后出現(xiàn)錯誤,可雙擊顯示錯誤消息的行直接進入導致該錯誤的源代碼行。如果您使用的是例子中的代碼,那么最常見的錯誤就是拼寫錯誤、漏掉了分號或大括號不匹配創(chuàng)建文件使用項目向?qū)??使用項目窗口 ?設置編譯選項(可以選擇默認)3. 編譯項目 ?編譯錯誤疑難解答使用MPLABSIM軟件模擬器進行調(diào)試使用MPLABICD2進行在線調(diào)試通過選擇Debugger>SelectTool>MPLABSIM將MPLABSIM軟件模擬器作為調(diào)試工具。設置斷點:方法一:在源文件中,將光標移動到行上,然后通過鼠標右鍵選擇“SetBreakpoint”設置斷點。方法二:將光標移動到行上,雙擊設置斷點。選擇View>Watch打開Watch窗口。從AddSymbol旁邊的下拉擴展菜單中選擇counter,然后點擊AddSymbol。點擊工具欄中的RUN運行程序。

程序?qū)⒃趫?zhí)行設置了斷點的語句之前停下。源代碼窗口左邊空白處的綠色箭頭指向下一個要執(zhí)行的語句。Watch窗口中紅色字體顯示,表明變量的值發(fā)生了變化。創(chuàng)建文件使用項目向?qū)?. 編譯項目

使用MPLABSIM軟件模擬器進行調(diào)試使用MPLABICD2進行在線調(diào)試 ICD2連接 ICD2設置及目標板配置在集成開發(fā)環(huán)境中選擇Debugger>SelectTool>MPLABICD2選擇Debugger>MPLABICD2SetupWizard安裝ICD2對ICD2設置:選擇Debugger>Setting對目標板配置:選擇Configure>ConfigureBitsPIC單片機原理及應用第五章I/O端口66671、I/O端口特點1、所有I/O輸入端口都是施密特觸發(fā)器輸入,以便增強抗干擾性。2、外設復用:所有的器件引腳(除VDD、VSS、MCLR和OSC1/CLKI之外),均為外設與I/O端口所共用。

如果外設使能,并且外設正在使用相關引腳時,該引腳將不再作為通用I/O引腳使用。3、優(yōu)先級:I/O與多個外設復用時I/O引腳的名稱定義了與該引腳相關的各個功能的優(yōu)先級,如:I/O引腳與兩個外設復用(“外設A”和“外設B”)外設A對引腳的控制具有最高優(yōu)先權(quán),若外設A和外設B同時使能,外設A將控制I/O引腳。684、電平變化通知引腳:電平變化通知引腳(CN)內(nèi)接輸入電平變化通知模塊,使得dsPIC30F器件能夠向處理器發(fā)出中斷請求,以響應所選輸入引腳上的狀態(tài)變化。即使是在休眠模式下、時鐘被禁止時,該模塊也能檢測輸入的狀態(tài)變化。692、I/O引腳及連線70713、I/O端口控制寄存器所有的端口引腳,都有三個與端口引腳的操作直接相關的寄存器。TRISx:數(shù)據(jù)方向寄存器。決定各個引腳是輸入引腳還是輸出引腳。若某個I/O引腳的TRIS位為“1”,則該引腳是輸入引腳。某個I/O引腳的TRIS位為“0”,則該引腳被配置為輸出引腳。復位以后,所有端口引腳被定義為輸入。PORTx:I/O端口寄存器。訪問的是I/O引腳上的數(shù)據(jù)。讀的是端口引腳值;寫端口引腳,寫的是端口數(shù)據(jù)鎖存器(LATx)。LATx:I/O端口鎖存寄存器。讀的是數(shù)據(jù)鎖存器里鎖存的值;寫鎖存值,寫的是端口數(shù)據(jù)鎖存器(LATx)72舉例1:第38引腳(RE0)接發(fā)光LED;

點LED燈,持續(xù)一定時間后滅掉。

#include"p30f4011.h“intmain(){ unsignedlonginti=0;

TRISE=0x00;//RE0-RE5設置為輸出;1輸入,0輸出

PORTE=0x01; //RE0輸出高電平+5V,點燈 for(i=0;i<650000;i++){}//延時

PORTE=0x00; //RE0輸出低電平0V,滅燈}73RE8RE5RE4RE3RE2RE1RE0TRISE=(0000000000000000)2RE8RE5RE4RE3RE2RE1RE0PORTE=(0000000000000001)2舉例2、RE0-RE5配置為輸出,連接6個LED;循環(huán)點亮#include"p30f4011.h“

intmain(void){

intled=0x01; unsignedlonginti=0; TRISE=0x00; //RE0-RE5配置為輸出 PORTE=led; //點亮第一個燈(連接RE0的燈) while(1) {

PORTE=led; for(i=0;i<65000;i++){};//延時

led=led<<1; //當?shù)?個LED燈亮后,重新從第1個LED燈點亮if(led==0x40) led=0x01; } return0;}RE8RE5RE4RE3RE2RE1RE0TRISE=(0000000000000000)2RE8RE5RE4RE3RE2RE1RE0PORTE=(0000000000000010)2PORTE=(0000000000000100)2PORTE=(0000000000001000)2PORTE=(0000000000010000)2PORTE=(0000000000100000)2RE8RE5RE4RE3RE2RE1RE0PORTE=(0000000000000001)275舉例3、硬件描述:RE0-RE5配置為輸出,連接LED,RE8配置為輸入連接按鍵S8

功能描述:RE8按鍵按下時循環(huán)點亮LED燈

#include"p30f4011.h“intmain(void){ intled=0x00; while(1) {

TRISE=0x0100; //將RE0-RE5配置為輸出0,RE8配置為輸入 1

if((PORTE&0x0100)==0x0000) //查詢按鍵S8是否按下

{ for(i=0;i<10000;i++){} //延時消抖

if((PORTE&0x0100)==0x0000)//再次查詢按鍵S8是否按下 led=led+1; } if(led==0x40) //當?shù)?個LED燈亮后,重新從第1個LED燈點亮

led=0x01;

PORTE=led; } return0;}

RE8

RE5RE4RE3RE2RE1RE0TRISE=(0000000100000000)2

RE8RE5RE4RE3RE2RE1RE0PORTE=(00000000/1?00000001)2PIC單片機原理及應用第六章中斷77

4.1中斷概述1、中斷的定義:中斷是指如下過程:CPU與外設同時工作,CPU執(zhí)行主程序,外設做準備工作,當外設準備好時向CPU發(fā)中斷請求信號,若條件滿足,則CPU終止主程序的執(zhí)行,轉(zhuǎn)去執(zhí)行中斷服務程序,在中斷服務程序中CPU與外設交換信息,待中斷服務程序執(zhí)行完后,CPU再返回剛才終止的主程序繼續(xù)執(zhí)行。

2、中斷源:⑴中斷源的定義:中斷源是指引起中斷請求的來源。⑵中斷源的分類:①軟中斷和②硬中斷3、中斷處理的全過程中斷處理的全過程分成3個階段:中斷請求、中斷響應和中斷服務。4、多重中斷與中斷優(yōu)先級⑴當系統(tǒng)中有多個設備提出中斷請求時,多個外設的中請信號要通過門電路送到CPU的中請輸入端,使CPU能收到多個外設提出的中請。⑵CPU在收到多個外設的請求后,按優(yōu)先級原則處理中斷。通過指令引起的中斷??梢园l(fā)中斷請求信號的外設或過程。如打印機、驅(qū)動器、故障源和A/D轉(zhuǎn)換器等。中斷請求1.CPU都有中請輸入線。中請輸入線有2類:非屏蔽中請輸入線和可屏蔽中請輸入線;2.CPU的開、關中斷。

CPU內(nèi)有1個中斷請求觸發(fā)器IF,當IF=1時,稱CPU開中斷,此時CPU可以處理收到的可屏蔽中請;當IF=0時,稱CPU關中斷,雖然CPU收到了可屏蔽中請,但不處理(響應)它。3.CPU內(nèi)有中斷請求檢測電路。

CPU每執(zhí)行一條指令,其內(nèi)的中斷請求檢測電路都要檢測中斷請求輸入端的狀態(tài)對于非屏蔽中請輸入線上的中請,CPU無條件的響應。對于可屏蔽中請輸入線上的中請,只有在CPU和中斷源都開中斷的情況下才能響應。中斷響應1.中斷響應定義

中斷源向CPU發(fā)出中斷請求,若其優(yōu)先級別最高,CPU在滿足一定的條件下,可以中斷當前程序的運行,保護好被中斷的主程序的斷點及現(xiàn)場信息。然后,根據(jù)中斷源提供的信息,找到中斷服務子程序的入口地址,轉(zhuǎn)去執(zhí)行新的程序段,這就是中斷響應。2.中斷響應條件

CPU響應中斷是有條件的,如內(nèi)部允許中斷、中斷未被屏蔽、當前指令執(zhí)行完等。3.任何CPU在中斷響應階段一定做如下工作:①保護斷點和②給出中斷服務程序入口地址(將中斷服務程序的首地址送給PC,為CPU執(zhí)行裝段服務程序創(chuàng)造條件);有的CPU還會做自動關中斷等操作4.給出中斷服務程序入口地址的方法有2種:⑴固定入口式(中斷服務程序的首地址固定,直接將此規(guī)定地址送給PC)⑵矢量式。中斷服務

中斷服務子程序是由用戶根據(jù)自己的需要編制的,編制時要注意如下問題:1.保護現(xiàn)場:

目的是為了保護那些與主程序中有沖突的寄存器,如果中斷服務子程序中所使用的寄存器與主程序中所使用的寄存器等沒有沖突的話,這一步驟可以省略。2.開/關中斷:對相應中斷位置1或置0實現(xiàn)。目的是為了能控制中斷。3.中斷服務:與中斷源實現(xiàn)信息交換。4.恢復現(xiàn)場:是與保護現(xiàn)場對應的,但要注意數(shù)據(jù)恢復的次序,以免混亂。5.返回:返回主程序中斷服務子程序結(jié)構(gòu)圖保護現(xiàn)場開中斷與外設交換信息恢復現(xiàn)場中斷返回中斷服務子程序結(jié)構(gòu)圖中斷處理原則1.當多個中斷源同時提出中請時,CPU按優(yōu)先級的高低有高到低依次為外設服務。2.當CPU正為某外設服務又有新外設提出中請時,⑴若新外設級別高則CPU終止為原外設服務轉(zhuǎn)去為新外設服務,為新外設服務完后,再為原外設服務。⑵若新外設級別低或與原外設同級,則CPU繼續(xù)為原外設服務,為原外設服務完后,再為新外設服務。84中斷向量表(IVT)IVT位于程序存儲器中,起始單元地址是0x000004。IVT包含62個向量,這些向量由8個不可屏蔽陷阱向量和最多54個中斷源組成。每個中斷源都有自己的向量。每個中斷向量都包含24位寬的地址。即每個中斷向量單元的值是有關中斷服務程序(ISR)的起始地址。2、dsPIC30F中斷特性85中斷優(yōu)先級可以為每個外設中斷源分配7個優(yōu)先級之一。可用的優(yōu)先級從1開始為最低優(yōu)先級,7級為最高優(yōu)先級。如果與中斷源有關的IPC位被全部清零,則中斷源被有效禁止。由于特定的優(yōu)先級會被分配給一個以上的中斷請求源,所以在給定的用戶分配級別內(nèi)提供了一種解決優(yōu)先級沖突的方法。根據(jù)每個中斷源在IVT中的位置,它們都有一個自然順序優(yōu)先級。中斷向量的編號越低,自然優(yōu)先級越高,而向量的編號越高,自然優(yōu)先級越低。任何待處理的中斷源的總優(yōu)先級都首先由該中斷源在IPCx寄存器中用戶分配的優(yōu)先級決定,然后由IVT中的自然順序優(yōu)先級決定。86中斷控制和狀態(tài)寄存器INTCON1和INTCON2寄存器:全局中斷控制功能來自這兩個寄存器。IFSx中斷標志狀態(tài)寄存器:所有中斷請求標志都保存在IFSx寄存器中,每個中斷源由各自的外設和外部信號置1并通過軟件清零。IECx中斷允許控制寄存器:所有中斷允許控制位都保存在IECx寄存器中,這些控制位用于分別允許來自外設或外部信號的中斷。IPCx中斷優(yōu)先級控制寄存器:每個用戶中斷源都可以分配為7個優(yōu)先級之一。IPC寄存器用于為每個中斷源設置中斷優(yōu)先級。SRCPU狀態(tài)寄存器:它包含IPL<2:0>狀態(tài)位(SR<7:5>),該位顯示當前CPU的優(yōu)先級。用戶可以通過寫IPL位改變當前CPU的優(yōu)先級。

CORCON內(nèi)核控制寄存器:它包含IPL3狀態(tài)位,該位顯示當前CPU的優(yōu)先級。IPL3是只讀位,因此陷阱事件就不能被用戶軟件屏蔽。使用方法:查數(shù)據(jù)手冊例:模板文件的元素#include"p30F4011.h“ /*針對處理器特殊功能寄存器定義的頭文件*/#defineCONSTANT110 /*常量定義*/intarray1[CONSTANT1]__attribute__((__space__(xmemory),__aligned__(32))); /*數(shù)組定義,表明了如何定義數(shù)組的各種屬性,指定

其在存儲器中的段,以及它在dsPIC的存儲器結(jié)構(gòu)中

的對齊方式*/intarray5[CONSTANT2]; /*個簡單的數(shù)組*/intvariable1__attribute__((__space__(xmemory))); /*為變量指定屬性*/intvariable3; /*不指定屬性*/intmain(void) { /*Applicationcodegoeshere*/}void__attribute__((__interrupt__(__save__(variable1,variable2))))_INT0Interrupt(void) /*中斷的代碼結(jié)構(gòu)*/{ /*InterruptServiceRoutinecodegoeshere*/}關鍵字__attribute__用來指定變量或結(jié)構(gòu)位域的特殊屬性。關鍵字后的雙括弧中的內(nèi)容是屬性說明。舉例:外部中斷INT0

描述:RE8當做外部中斷,無中斷時執(zhí)行流水燈,來中斷時6個燈全亮89#include"p30f4011.h“unsignedintLed=0x01;voidInitializeint0(){ IFS0bits.INT0IF=0; //清除INT0的中斷標志

IPC0bits.INT0IP=7; //中斷優(yōu)先級為7}void__attribute__((__interrupt__))_INT0Interrupt(void){

IFS0bits.INT0IF=0; //清INT0中斷標志

PORTE=0x3f; //6個LED燈全亮 for(i=0;i<65000;i++){}; //延時}intmain(){ Initializeint0(); TRISE=0x0100; //設置RE0~RE5為輸出

Led=0x01;

IEC0bits.INT0IE=1; //使能中斷

while(1) {PORTE=led; for(i=0;i<65000;i++){};//延時

led=led<<1; //循環(huán)點燈if(led==0x40) led=0x01; }}寄存器位操作中斷標志IFS0bits.INT0IF寄存器位操作中斷優(yōu)先級IPC0bits.INT0IP寄存器位操作中斷使能IEC0bits.INT0IE關鍵字__attribute__用來指定變量或結(jié)構(gòu)位域的特殊屬性。關鍵字后的雙括弧中的內(nèi)容是屬性說明。PIC單片機原理及應用第七章定時器9016位定時器功能:16位定時器/計數(shù)器區(qū)別:Timer1A類型定時器:?可以使用器件的低功耗32kHz振蕩器作為時鐘源工作?可以在使用外部時鐘源的異步模式下工作Timer2B類型定時器:可以和C類型定時器相連形成32位定時器Timer3C類型定時器:可以和B類型定時器相連形成32位定時器Timer4B類型定時器Timer5C類型定時器1、工作模式(1)定時器模式定時器的輸入時鐘由內(nèi)部系統(tǒng)時鐘(FOSC/4)提供。當使能為該模式時,對于1:1的預分頻器設置,定時器的計數(shù)值在每個指令周期都會加1。(2)使用外部時鐘輸入的同步計數(shù)器模式定時器的時鐘源由外部提供所選的定時器在TxCK引腳上的輸入時鐘的每個上升沿進行加1計數(shù)。對外部時鐘高電平和低電平有最短時間的要求。通過在一個指令周期內(nèi)的兩個不同時間對外部時鐘信號進行采樣,可以實現(xiàn)外部時鐘源與器件指令時鐘的同步。(3)使用外部時鐘輸入的A類型定時器異步計數(shù)器模式通過使用連接到TxCK引腳的外部時鐘源,A類型時基能夠在異步計數(shù)模式下工作。外部時鐘輸入不與器件系統(tǒng)時鐘源同步。該時基繼續(xù)進行與內(nèi)部器件時鐘異步的遞增計數(shù)。異步工作的時基對于以下應用是有益的:

時基可以在休眠模式下工作,并能夠在發(fā)生周期寄存器匹配時產(chǎn)生中斷,將喚醒處理器。在實時時鐘應用中,可以使用低功耗32kHz振蕩器作為時基的時鐘源。(4)門控時間累加模式定時器時鐘源來自于內(nèi)部系統(tǒng)時鐘。當加在TxCK引腳上的信號出現(xiàn)上升沿時,門控控制電路開始工作;當加在TxCK引腳上的信號出現(xiàn)下降沿時,門控控制電路終止工作。當外部門控信號為高電平時,對應的定時器將進行遞增計數(shù)。引腳狀態(tài)從高電平到低電平的轉(zhuǎn)變會將TxIF中斷標志位置1。門控信號的下降沿會終止計數(shù)工作,但是不會復位定時器。如果想讓定時器在門控輸入信號的下一個上升沿出現(xiàn)時從零開始計數(shù),用戶必須復位該定時器。門控信號的下降沿產(chǎn)生中斷。2、定時器預分頻器什么是定時器預分頻器

就是把對應模塊的時鐘的頻率按倍數(shù)減小,那么其周期就變大。比如說TMR0模塊,原本是4個時鐘周期(1個指令周期)計一次數(shù),如果把它的預分頻器設為1:4后,那它就是16個時鐘周期計一次數(shù)所有16位定時器的輸入時鐘(FOSC/4或外部時鐘)的預分頻比選項為1:1、1:8、1:64和1:256。預分頻器計數(shù)器清零:

寫TMRx寄存器;TON(TxCON<15>)清零;

任何器件復位3、定時器中斷根據(jù)工作模式的不同,16位定時器可以在發(fā)生周期匹配或外部門控信號的下降沿出現(xiàn)時產(chǎn)生中斷。即TxIF位置1。TxIF位必須用軟件清零。通過對應的定時器中斷使能位TxIE,可以將定時器使能為中斷源。為了使該定時器成為中斷源,必須對中斷優(yōu)先級位(TxIP<2:0>)寫入非零值4、與定時器模塊相關的特殊功能寄存器定時器開控制位1=啟動定時器0=停止定時器定時器門控時間累加使能位1=門控時間累加使能0=門控時間累加禁止定時器輸入時鐘預分頻選擇位11=預分頻比是1:25610=預分頻比是1:6401=預分頻比是1:800=預分頻比是1:1定時器門控時間累加使能位1=門控時間累加使能0=門控時間累加禁止定時器外部時鐘輸入同步選擇位當TCS=1時:1=同步外部時鐘輸入0=不同步外部時鐘輸入當TCS=0時,Timer1使用內(nèi)部時鐘。B類型中:32位定時器模式選擇位1=TMRx和TMRy形成32位定時器0=TMRx和TMRy為獨立的16位定時器1005、定時器周期值計算1、當外部晶振為fosc=20MHz,此時單片機的指令周期為0.2us:

指令周期=1/(fosc/4)

2、如果采用以上的設置,則定時器的周期值可以這樣計算:

定時器周期值=所需定時時間/(指令周期×分頻比)3、具體初值還需要經(jīng)過硬件的測試后才能最終使用,在軟仿真狀態(tài)下可以采用下面的方法來測試舉例:循環(huán)點亮六個貼片發(fā)光二極管,時間間隔1s#include<p30f4011.h>unsignedintLed=1;voidInitializeTMR1(){TMR1=0;//定時器1計數(shù)寄存器TMR1=0T1CON=0x0030; //關閉定時器,使用內(nèi)部時鐘,預分頻比為1:256PR1=0x1c20;//定時器Timer1周期寄存器值1s

IFS0bits.T1IF=0;//清除TMR1的中斷標志

IPC0bits.T1IP=7;//中斷優(yōu)先級為7IEC0bits.T1IE=1;//使能中斷}void__attribute__((__interrupt__))_T1Interrupt(void){TMR1=0; IFS0bits.T1IF=0;//清定時器中斷標志

Led=Led<<1;if(Led==0x40)Led=1;}intmain(){InitializeTMR1();TRISE=0x00;

T1CONbits.TON=1;while(1){PORTE=Led;}}外部晶振為fosc=7.3728MHz指令周期=1/(fosc/4)=1/1843200≈0.00000054s定時器周期值=所需定時時間/(指令周期×分頻比)=1s/(1/1843200*256)=7200=0x1c20102菜單Debuger>stopwatch調(diào)出秒表來觀察執(zhí)行時間103實驗四、定時器實驗一、實驗目的實驗三的主要目的是進一步了解掌握PIC單片機的結(jié)構(gòu)和定時器功能,學習通過定時器寄存器的控制完成的定時/計數(shù)及中斷響應的編程技巧,用C語言編寫外部中斷程序,并在MPLAB開發(fā)環(huán)境中對工程進行編譯鏈接和進行調(diào)試。二、實驗要求了解掌握PIC單片機的結(jié)構(gòu)和定時器功能。應熟練掌握MPLAB開發(fā)環(huán)境的使用方法。熟練掌握PIC單片機的程序編寫方法。掌握MPLABIDE硬件調(diào)試的技巧。104三、練習:1、循環(huán)點亮六個貼片發(fā)光二極管:(1)在軟仿真模式下練習調(diào)試程序(2)用ICD2調(diào)試程序2、在上面程序基礎上修改程序,調(diào)試并在實驗板運行。要求:定時時間為1秒根據(jù)不同的時間級別分別在LED上點燈,如:第1個紅燈表示10秒時間到(累計定時器時間)第2個紅燈表示10秒時間到第3個紅燈表示10秒時間到調(diào)試程序,在實驗板運行PIC單片機原理及應用第八章輸入撲捉105106什么是輸入捕捉?

輸入捕捉模塊用于在輸入引腳上有事件發(fā)生時,捕捉來自兩個可選時基之一的定時器值。定時器可以選擇TMR2、TMR3。定時器可以被設置為使用內(nèi)部時鐘源(FOSC/4)或使用在TxCK引腳上外接的同步外部時鐘源。

每個dsPIC30F器件可能有一個或多個輸入捕捉通道。如何應用?

輸入捕捉功能在需要進行頻率(時間周期)和脈沖測量的應用中是相當有用的。107輸入捕捉事件模式

當ICx引腳上有事件發(fā)生時,輸入捕捉模塊捕捉所選的時基寄存器的16位值??梢员徊蹲降氖录譃橄铝?類:簡單捕捉事件模式在ICx引腳輸入電平的下降沿捕捉定時器值在ICx引腳輸入電平的上升沿捕捉定時器值每個邊沿(上升和下降)都捕捉定時器值預分頻捕捉事件模式在ICx引腳輸入電平的第16個上升沿捕捉定時器值在ICx引腳輸入電平的第4個上升沿捕捉定時器值108(1)簡單捕捉事件模式輸入捕捉邏輯電路根據(jù)內(nèi)部相位時鐘檢測和同步捕捉引腳信號的上升或下降沿。如果出現(xiàn)上升/下降沿,捕捉模塊邏輯將會把當前時基值寫入捕捉緩沖器并發(fā)信號給中斷產(chǎn)生邏輯。當發(fā)生的捕捉事件的數(shù)量與ICI<1:0>控制位指定的數(shù)量匹配時,那么相應的捕捉通道中斷標志位ICxIF將會在捕捉緩沖器寫事件之后2個指令周期置1。如果捕捉時基在每個指令周期都加1的話,捕捉到的計數(shù)值將會是ICx引腳有事件發(fā)生后1或2個指令周期出現(xiàn)的值。109(2)邊沿檢測模式和簡單捕獲事件模式一樣,輸入捕捉邏輯電路根據(jù)內(nèi)部相位時鐘檢測和同步捕捉引腳信號的上升和下降沿。如果發(fā)生上升或下降沿,捕捉模塊邏輯電路將當前的時基值寫到捕捉緩沖區(qū),然后向中斷產(chǎn)生邏輯電路發(fā)出信號。相應的捕捉通道中斷狀態(tài)標志ICxIF,在捕捉緩沖寫事件后的2個指令周期后被置1。110(3)預分頻器捕捉事件在預分頻捕捉模式下,捕捉模塊每計數(shù)引腳的4或16個上升沿才發(fā)生一次捕捉事件。當預分頻計數(shù)器等于4或16個計數(shù)(取決于所選擇的模式)時,計數(shù)器將輸出一個“有效的”捕捉事件信號,隨后將該信號與指令周期時鐘同步。該同步了的捕捉事件信號將觸發(fā)一個捕獲緩沖寫事件,同時向中斷產(chǎn)生邏輯電路發(fā)出信號。各個捕捉通道中斷狀態(tài)標志ICxIF,在捕捉緩沖寫事件后的2個指令周期后被置1。如果捕捉時基在每個指令周期加1,捕捉到的計數(shù)值將是同步捕捉事件發(fā)生后1或2個指令周期出現(xiàn)的值。111輸入捕捉寄存器dsPIC30F器件中的每個捕捉通道都有以下寄存器,ICxCON:輸入捕捉控制寄存器ICxBUF:輸入捕捉緩沖寄存器輸入捕捉定時器選擇位1=捕捉事件時捕捉TMR2的內(nèi)容0=捕捉事件時捕捉TMR3的內(nèi)容每次中斷的捕捉次數(shù)選擇位11=每4次捕捉事件中斷一次10=每3次捕捉事件中斷一次11=每2次捕捉事件中斷一次10=每1次捕捉事件中斷一次ICM<2:0>:輸入捕捉模式選擇位111=當器件處于休眠或空閑模式時,輸入捕捉僅用做中斷引腳功能(只檢測上升沿,所有其他控制位都不適用。)110=未使用(模塊禁止)101=捕捉模式,每16個上升沿捕捉一次100=捕捉模式,每4個上升沿捕捉一次011=捕捉模式,每1個上升沿捕捉一次010=捕捉模式,每1個下降沿捕捉一次001=捕捉模式,每個邊沿(上升沿和下降沿)捕捉一次000=輸入捕捉模塊關閉次功能描述:測量從捕捉輸入端口輸入的信號的周期#include"p30f6014.h"#include"PulsePeriodMeasure.h"intmain(){InitializeSys();InitializeIC();InitializeTMR1();while(1){PORTD=PORTD&0xfff8; //RD2~RD0為000,KEYA=0,選通U24 PORTD=PORTD&0xfff8|0x0002; //RD2~RD0為000,LEDA=0,選通U27}}//文件名:PulsePeriodMeasure.h**//功能描述:函數(shù)原型的聲明,外部變量與常量的聲明和初始化**unsignedcharTable0[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};//不帶小數(shù)點的顯示段碼表unsignedintfailmemory[40];unsignedintCaptureValue[5]={0,0,0,0,0};//連續(xù)五次捕捉值暫存數(shù)組unsignedintCaptureDiffValue[4]={0,0,0,0};//保存相鄰兩次捕捉值的一階差分值voidInitializeSys();//初始化系統(tǒng)voidConfigIO_IN();//輸入捕捉通道組成的配置voidInitializeIC();//初始化輸入捕捉通道voidInitializeTMR1();//定時器1初始化voidInitializeTMR3();//定時器3初始化,TMR3的值為IC1捕捉時基void__attribute__((__interrupt__))_T1Interrupt(void);//聲明定時器T1中斷服務子程序void__attribute__((__interrupt__))_IC1Interrupt(void);//輸入捕捉通道IC1中斷服務子程序voidInitializeSys(){INTCON1=0x0000;

INTCON2=0x0000; //關中斷

IEC0=0x0000;

IEC1=0x0000;IEC2=0x0000;//IECx中斷禁止

}voidConfigIO_IN(){TRISD=TRISD&0xfdf8; //RD0~RD2,RD9配置為輸出

TRISD=TRISD|0x0100; //RD8配置為輸入

PORTD=PORTD&0xfff8; //RD2~RD0為000,KEYA=0,選通U24}voidInitializeIC(){ConfigIO_IN();InitializeTMR3();

IC1CON=0x0002; //捕捉Timer3,每1次捕捉事件中斷一次,每一個下降沿捕捉一次

IFS0bits.IC1IF=0; //清IC1中斷標志

IEC0bits.IC1IE=1; //使能中斷

IPC0bits.IC1IP=6; //設置中斷優(yōu)先級6}voidInitializeTMR1(){TMR1=0; //定時器1計數(shù)寄存器TMR1=0T1CON=0x0000; //使用內(nèi)部時鐘,預分頻比為1:1PR1=0x4e20; //定時器Timer1周期寄存器PR1=0x4e20,10ms初值

IFS0bits.T1IF=0; //清除TMR1的中斷標志

IPC0bits.T1IP=7; //中斷優(yōu)先級為7IEC0bits.T1IE=1; //使能中斷

T1CONbits.TON=1; //打開定時器TMR1}voidInitializeTMR3(){TMR3=0; //定時器3計數(shù)寄存器TMR3=0T3CON=0x0000; //使用內(nèi)部時鐘,預分頻比為1:1T3CONbits.TON=1; //打開定時器TMR3}void__attribute__((__interrupt__))_IC1Interrupt(void){unsignedinti=0;unsignedlongCaptureDiffValueTemp=0;for(i=0;i<4;i++) //求一階差分值

{CaptureDiffValue[i]=(CaptureValue[i+1]-CaptureValue[i]);if(CaptureDiffValue[i]==0){CaptureDiffValueTemp=0xffff+CaptureDiffValue[i+1]-CaptureDiffValue

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論