Proteus仿真PIC的C語言程序_第1頁
Proteus仿真PIC的C語言程序_第2頁
Proteus仿真PIC的C語言程序_第3頁
Proteus仿真PIC的C語言程序_第4頁
Proteus仿真PIC的C語言程序_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Proteus仿真PIC的C語言程序目錄PICC開發(fā)環(huán)境配置1使用USART同步發(fā)送數(shù)據(jù) 5使用MSSP模塊的SPI模式擴展接口 8ADC模塊應(yīng)用示例 12TMR0計數(shù)器16TMR1時鐘(使用內(nèi)部時鐘) 21TMR1時鐘(使用外部晶振) 25TMR2中斷產(chǎn)生方波29CCP輸出比較模式應(yīng)用 33CCP捕捉模式應(yīng)用 38PICC開發(fā)環(huán)境配置2009年5月2日目前已有2,086人讀過本文閱讀評論發(fā)表評論在前面的一段時間里,ANY電子使用Proteus軟件帶你一起學(xué)習(xí)了PIC單片機的匯編語言程序的書寫。但是目前在單片機的應(yīng)用開發(fā)中,絕大部分的應(yīng)用都是使用C語言程序?qū)崿F(xiàn)。所以,在學(xué)習(xí)匯編語言熟悉了PIC

2、單片機的基本結(jié)構(gòu)之后,我們就需要面對一個單片機開發(fā)的重要問題:使用 C語言開發(fā)應(yīng)用。在下面的一段時間里,我們將通過一個個具體的實例,一點點逐一向你介紹如何使用PIC單片機的C語言在PIC的C語言環(huán)境里開發(fā) C語言程序。需要注意的是,因為PICC開發(fā)工具應(yīng)用更為廣泛,所以在這里,我們將使用 PICC開發(fā)工具,而不是 PIC官方的C語言 開發(fā)工具。事實上,PICC開發(fā)工具其實更像 PIC官方MPLAB集成開發(fā)環(huán)境的一個插件,所有關(guān)于PICC開發(fā)PIC單片機C語言程序的使用幾乎都是在MPLAB中進行的;PICC沒有自己獨立的界面和環(huán)境。PICC開發(fā)工具是由Hi-tech 公司開發(fā)推出的,其官方網(wǎng)站地

3、址是:。目前在中國大陸,作為學(xué)習(xí)和科研之用,可以使用其簡易版本,或者是面向教育用戶的版本; 除此之外,你還可以在網(wǎng)上搜索并下載網(wǎng)友提供的各種破解版本。不過需要說明的是, 使用這些版本只可用來學(xué)習(xí)和科研,如果移作它用,請購買正式版本;否則,由此造成的一切后 果,ANY電子不負任何責(zé)任。安裝好PICC開發(fā)工具(ANY電子安裝的是9.60版本)之后,就可以打開 MPLAB集成開 發(fā)環(huán)境對開發(fā)語言進行配置了。首先說明,在以下的配置和講解中,我們假定你將MPLAB集成開發(fā)環(huán)境和 PICC開發(fā)工具都安裝到了 D盤的program files 文件夾下。配置的具體步驟如下:1. 首先進入MPLAB集成開發(fā)環(huán)

4、境,接著打開 MPLAB的Project主菜單,如下圖所示:在如上的Project主菜單下可以找到Set Language Tool Locations子菜單,單擊打開相應(yīng)的對話框,進入第2步。2.在如上第1步中,我們打開的Set Language Tool Locations對話框如下圖所示:在Registered Tools選項中找到其中的 HI-TECH Universal ToolSuite,然后展開其下的Executables ,找到并點擊其中的 HI-TECH C Compiler。如此,即可在下方Location方框中看到當(dāng)前語言工具(PICC )的目標地址。如果沒有設(shè)置,就點擊

5、右側(cè)的 Browse按 鈕,在新打開的 Select Lan guage-Tool Executable對話框中找到 picc.exe ,選中并點擊新對話框中的打開按鈕,即可成功設(shè)置。設(shè)置成功之后,點擊如上對話框中的OK按鈕,即最終設(shè)置完成。完成如上的配置之后,在建立具體工程之后,我們還需要手動 選擇工程使用的語言工具,這通過點擊Project菜單下的Select Language Toolsuite來實現(xiàn),點擊之后,系統(tǒng)跳出如F圖所示的對話框:HI-TECH Universal ToolSuieActive Toolsuite:T ooluite 匚 ontentsHI-TECH 匚 SB

6、Knudsen Data CC5X日 Knudsen Dda CC8EBjtte Assembler & C CompilerCCS C Corroiler for PI Cl 0/12/14/1 G/1B/24/dsPIC30/dsPIC33Hl4£CHUn(vefsalTbclSuiteLocationD:Program FilesVl-HelpLAR PIC18IAR Systems MidrangeMicrochip ASM30 T oohuitBMicrochip Ct? ToalsuiteMicrochip C1S TootsuteMiaochip C30 T o

7、olsuiteMicrochip MRASM TooluiteMicjochip PIC32 Assembler T ocdsuiteMicrochip PI匚32 C-Ccimijiler Tcolsui館snyi)Z,com在對話框的 Active Toolsuite 項中,從下拉列表里選擇 HI-TECH Universal Toolsuite 在Toolsuite Contents 和Location 項中確認C語言編譯器及其位置。選擇并設(shè)置好之后, 點擊OK按鈕,回到 MPLAB開發(fā)環(huán)境中,即成功選擇設(shè)置了語言工具。最后,關(guān)于安裝上 PICC開發(fā)工具之后的 MPLAB集成開發(fā)環(huán)境,我

8、們需要特別說明幾點:1. 如上PICC編譯器的地址通常是在PICC安裝文件夾 HI-TECH Software 下的PICCstd9.60bin文件夾中,當(dāng)然,首先需要你定位到自己的PICC安裝文件夾中;2. 設(shè)置了 PICC C語言編譯器之后,對其他匯編語言程序的編譯鏈接和調(diào)試都沒有影響;3. 設(shè)置了 PICC C語言編譯器之后,如果在 MPLAB中建立了使用 C語言的PIC工程,在MPLAB集成開發(fā)環(huán)境的工具欄內(nèi)會新增一個Build Project 的PICC編譯圖標,代替原來的匯編語言工程界面上的 Make、Build All等按鈕。轉(zhuǎn)載原創(chuàng)文章請注明:文章轉(zhuǎn)載自:ANY 電子本文標題:

9、Proteus仿真PIC的C語言程序一一PICC開發(fā)環(huán)境配置本文地址:使用USART同步發(fā)送數(shù)據(jù)2009年6月29日目前已有1,842人讀過本文閱讀評論發(fā)表評論繼上一個例子的發(fā)出已經(jīng)半月有余,然而這一段時間實在太忙,一直抽不開身子,直到今天ANY電子 才為朋友們送上一個新的例子。需要說明的是,本例只是為了說明 PIC單片機的USART模塊的使用,故而十分簡單。例子的構(gòu)思如下:在PIC單片機的USART端口上外接一個74LS164串行轉(zhuǎn)并行轉(zhuǎn)換器,將由PIC單片機內(nèi)部USART模塊發(fā)出的串行數(shù)據(jù)轉(zhuǎn) 換為并行數(shù)據(jù),接著將其輸送給外接在 74LS164 上的數(shù)碼管,并在數(shù)碼管上將發(fā)送的數(shù)據(jù) 信息顯示

10、出來。還需要說明的一點是,例子中我們將PIC單片機的USART模塊的波特率設(shè)置為9600比特;并且輸出了從 0到F對應(yīng)的七段數(shù)碼管的段值。和以前的所有例子一樣,首先我們還是在本地的電腦上新建一個名為USART的文件夾,接著在MPLAB中新建一個名為 USART使用PICC語言工具的工程,并將該工程保存到前面 新建的USART文件夾中;然后在MPLAB中新建一個名為main.c的C語言源程序,源程 序的內(nèi)容如下圖所示:1include pic.h2/因數(shù)和數(shù)碼菅段碼數(shù)粗聲明3void initUSART> void/用始化U5ART4void display Int5void delay

11、int dl延時程停6const int disp = Bxfc.0x66.0xda.0xf2 ±0x66f 0xb6,70xbe , 0xe6.0xfe . Gx-FS皀0x3e f 0x9t.&x7a,0x9c.0x3e' fS廠數(shù)瑪管段瑪數(shù)裁/9void main ('/1011int counter = gjdl=±5Ef/怎義計數(shù)鶉”延時控制變量12initUSARTf),/創(chuàng)始化U5ART13ifhile(l)循環(huán)發(fā)送數(shù)據(jù)昱示14f15delay:dl i;“延時等發(fā)送完畢15display counter"岌送并昱ZF17+-

12、counter;準備下一1寧13counter>15 counter=ej 數(shù)字甚限.運回192021void initUSART/別始化U"RT22123TRISC=&x3f;"設(shè)冒PORT仁口上USART®用到的位為軻出24SPBRG-0X19;/)反持率9600-1000000/(4x (X+l) ) :X-0xl925TXSTfl 0x96./I0010e00 ;SYN匚=1; SPEIM=1;匸SRC-1; TXEN-02&RC5TA 0x86、/1&&00&027TXEN-1;使能U呂朋丁的發(fā)送功能2829

13、void disolav int counter“境送致斑芥戸廠子工,予30'八31DCREG-disp counter;數(shù)據(jù)轉(zhuǎn)換為段碼并發(fā)送32Tj33void delay int dl/SaMHz延時dlxlms 仿真時 1MHZ時34(35int i,j;3&foril=fl;l<dl +4i37forj<353;+1 打33上 * 1 (F39Janynz.cam編輯好C語言源程序的代碼之后,將其保存;隨后將其添加到我們在MPLAB中新建的USART工程中,接著將該工程保存,然后在MPLAB中對該工程進行編譯鏈接,生成源代碼以供我們下面仿真之用。準備好源程序

14、,接下來我們來繪制電路圖。本例的電路圖十分簡單,如下圖所示U1 J2140SCUCWNRBO/IKOSC2/CLKOUTRBIMCLRMjp/THVRB2R03/PGMRP0/ANQR&4RA1/AN1RB5RA2/AN2/?ff-RB0/FGCRB7/FGDRWTDCK1R悩/卻4/SSRGD/T1OSO/T1CKIRC1jTWS:I/CCR2RH)/AN5DRC2/CCP1R£1/AN6RC3/SCK/SCLRE2/AN7RC4/SDIZSDARC5/SDORC8/TWCKRC7/RX/DTRDO/PSRDROI/PSP5RraFSJSRD3/PSTORM/PSP4RD5

15、/FSKRDC/PSF?RD7/PSFV8103£iPIC16F877斗6373SJ5. 亙 17.1S1820 7T2E26anyiTZcom只是在PIC單片機的USART模塊端口上外接一個 74LS164 轉(zhuǎn)換器,并在轉(zhuǎn)換器的并行端 口外接一個七段數(shù)碼管,最終的電路圖效果如上圖所示。由源程序準備好源代碼,并在Proteus軟件中繪制好仿真所需的電路圖之后,我們接下來進行仿真操作。首先將源代碼裝入到如上圖所示電路圖的單片機中,然后點擊Proteus軟件的仿真開始按鈕,即可看到仿真得到的效果,如下圖所示:U1'130SC1/CIKNRBDANT SC2/CLKOUTRAJ/A

16、N0RA1/AN1RAJ/AN3ARff+RBIRB3/FDMRB4RB5 RB6/P0C RB7/PGDRWTOCKIR/«/AN4/S$RCO/TIOSOZTIICKRC1/T1OSVCCR2RBQ/AN5JR 訂RC2/CCPIREI/AN&MRC3/SCK7SCLRE2/AN7JCSRC4/SDI/SDARC5/SDORC6/WCKRC7ffiX/Dn-RIDD/PSRDRDUPSP1RIDjypSPgRDl/PSfRO5/PSF5RD6/PSABRDWPSP714*PIIC16F8778-33J536 37 3B 30日1.JJ3 ,4,74LS1&4192

17、D22 -2728293D.,2i. . U2 .R $RG8> C U- >1ID 11如上圖,因為在程序中我們設(shè)置的延時為1s,所以在仿真時可以看到,每隔1s數(shù)碼管上顯示的數(shù)字自動加1,直到達到最大值 F。很顯然,Proteus仿真的效果顯示,我們的程序 實現(xiàn)了預(yù)期的效果。盡管本例比較簡單,但在這里,ANY電子還是照例說明幾點:1. 注意學(xué)習(xí)PIC單片機的USART模塊的用法,及其注意事項,比如USART模塊發(fā)送串行 數(shù)據(jù)時低位在前(先發(fā)送);2. 注意串行轉(zhuǎn)并行轉(zhuǎn)換器 74LS164 等一系列器件的使用。使用MSSP模塊的SPI模式擴展接口2009年7月9日目前已有2,398

18、人讀過本文閱讀評論發(fā)表評論本文中,ANY電子帶你繼續(xù)來學(xué)習(xí)使用 Proteus仿真輔助學(xué)習(xí)PIC單片機的C語言程序。 今天我們要學(xué)習(xí)的內(nèi)容是使用Proteus軟件仿真輔助學(xué)習(xí) PIC單片機的MSSP模塊的SPI模式來擴展單片機的外部接口。本例構(gòu)思如下,在 PIC單片機的MSSP模塊SPI模式相應(yīng)端口,即 SCL( RC3 )和SDO (RC5)上外接一個串口轉(zhuǎn)并口的器件 一一74LS164 ,將從PIC單片機的SPI端口輸出的 串口信號轉(zhuǎn)化為并口信號,并輸出到接在74LS164上的七段數(shù)碼管,將數(shù)據(jù)在數(shù)碼管上顯 示出來。和以前所有例子一樣,首先在本地硬盤上新建一個名為MSSPSPI的文件夾,然

19、后在MPLAB中新建一個名為 MSSPSPI的工程項目,工程使用 PICC編譯器。然后將其保存到新建的 MSSPSPI文件夾中,接著在該工程中添加一個名為main.c的C語言文件,并在其中輸入如下圖所示的源程序:/創(chuàng)始化PORTC/創(chuàng)始化55P/中斷子程序 延時子融23456789101113141516171819202122232425262728293031323334353637383940414243444546474849505152#include <pich>/函數(shù)和數(shù)碼管段碼數(shù)組聲明 void initPORTC(void); void initSSP( void

20、 ); void senddata(int I;void interrupt SSPINT( void ; void delay(int dl);const int disp»0x3f0x06,0x5b,0x4f,0x66,0x6dj 0x7d,0x07 0x7f,0x6f,0x77,0x7c/0x39,0x5e,0x79,0x71; 八數(shù)碼管段碼數(shù)組(高位在前)Vvoid main()主程序int sdata-S initPORTC(), initSSP();for(;sdata=0xff;+ sdata)待轄/W始化 PCRTW始化5SP循環(huán)發(fā)送數(shù)揭senddata(disp s

21、data |); /發(fā)idelay(25);/延時等發(fā)送完畢和中斷 void initSSP(void )SSPSTAT=0x0e;SSPCON-0x3e,SSPIE-1; sspiF=e; PEIE=1;/設(shè)置SSP狀態(tài)控制器:輸出數(shù)據(jù)的中間采樣輸入數(shù)據(jù) /SCK上升沿發(fā)送數(shù)據(jù)(154是上升沿采樣數(shù)據(jù)) 設(shè)宣SSP控制器:使能SSP ,空閑時始終停留在高電平 /主控模式時鐘為f(osz)/4開相應(yīng)中斷清零中斷標志位GIE=1; void initPORTC (void)TRISC=0xd7;PORTC=0x0e;/別始化PORTC/1101 0111SDO. SCL端口設(shè)置為輸出,5DA設(shè)置

22、為輸入void senddata int sdata) SSPBUF=sdata;/發(fā)敷屠送入SSPBUF啟動發(fā)送void interrupt SSPINT(void).int rdata; sspiF=e; rdata=SSPBUF;void delay(int dl) int iJ; for(i=e;i<dl;+i) for(j-e;j<353;+4j);/中斷子程序/清零中斷標吉位/接收城,肴空緩沖器/20MHz延時Clxlms 仿真時 1MHz延時dlx20ms審千 -JanyDZ.com輸入完畢之后,將其保存,并保存MSSPSPI工程文件。然后將其在 MPLAB中使用PI

23、CC編譯器編譯鏈接并生成源代碼,以供下面仿真之用。編譯生成源代碼之后,我們在Proteus中繪制用于仿真使用的電路圖,如下圖所示U113' 14OSC1/CLMNRBMHTOSC2/CLKCJIR61MCLRA4>p/THVRB2RBG/POMRAJXANDR64RA1/AN1RB5RA2/AN2AflffRO&/F0CRA3/AH3A/RF+RB7/PGDRAVTOCKIRXC/AIWSSRCOmOSO/TICKlRci/nosuccraFt EVA用甬DRC2/CCP1REI/AH6hWRRC5/$CK/SCLRC4/SDI/SDARC5ZSDQRC6/TWCKRC7

24、/RWDTRDO/PSPDRDVPSPIRD2/PSPSRD3/PSF3凹即卩$閨RDUFSnRDB/PSnRD7/PSP71S20PIC16F877E724_9 Id15T72325_12 ._202122:3637383&401 U2> CU->74LS1C411iosnyDZ,corn本例的電路圖和 上一個例子 類似,比較簡單,只是用到一個簡單的 74LS164 和一個七段數(shù) 碼管。最終得到的電路圖如上圖。繪制好用于仿真的電路圖之后,我們將上面編譯生成的源代碼裝入單片機,并點擊Proteus的仿真按鈕來進行仿真。仿真中的效果圖如下所示:0SC1/CLK1NRBD/IM

25、T0SC2/CLK0UTRBIMCLRAt)p/THVF:細RB3JF0MRB4RA1/AN1R65ff+RBO/FBCRB7/PGDRAinBiCNRWAN4/SSRCD/TIOSOmCK) RC1/T10SI/CCP2R BQ/AN5 用口RC1/CCP1RIEII/jANBAnRRIEZ/AN7ORC3/SCK/SCLRC4ZSDI/SDARears doRC6/TWCKRC7/RX/DTRcopsroRD VP S P1IRD2/FSHRC3/PSR3 RD<VPSFMRD5/PSR5RDC/FSmRD7/PSF7PIC18F677-13141 - 2-3-4 5-6-7 

26、63;1®10A.IS202528U2SRG8283D574LS184"1113ID12 =r= 曲千W- W- B * a .J -anyDZnm可以看出,程序?qū)崿F(xiàn)了我們預(yù)期的功能。而且因為例子比較簡單,也無需太多的調(diào)試和修改??墒?,盡管本例比較簡單, 而且很多內(nèi)容和 上一個例子 類似,但還是需要注意一些關(guān)鍵性的 內(nèi)容:1. PIC單片機MSSP模塊的應(yīng)用;2. MSSP模塊的各種模式,比如本例使用的SPI模式;3. 本例涉及的其他一些內(nèi)容。ADC模塊應(yīng)用示例2009年6月13日目前已有2,249人讀過本文閱讀評論發(fā)表評論在前面的文章中,ANY電子 帶你一起學(xué)習(xí)了 PIC

27、單片機的CCP功能,包括 CCP輸入捕 捉模式的應(yīng)用以及CCP輸出比較模式的應(yīng)用,并使用Proteus仿真了相關(guān)例子來輔助學(xué) 習(xí)這些功能。今天,ANY電子帶你繼續(xù)學(xué)習(xí) PIC單片機的其他功能,并使用 Proteus軟件 仿真相應(yīng)例子來詳細講解相關(guān)內(nèi)容。本文我們要學(xué)習(xí)的內(nèi)容是PIC單片機中的ADC模塊的應(yīng)用。PIC單片機內(nèi)部集成了一個10位ADC模塊,只需在程序中將其啟用即可將ADC輸入接口中輸入的模擬信號轉(zhuǎn)化為相應(yīng)的數(shù)字信號。需要注意的還有,如PIC16F877 這種40腳封裝的器件,其 ADC模塊擁有8個模擬輸入通道,分別從 RA0-RA5 和RE0-RE2 輸入(記作 AN0-AN7 )。

28、本例的構(gòu)思如下,在 PIC單片機ADC模塊的AN0輸入通道接上一個滑動變阻器,變阻器上分得的電壓值作為輸入的模擬信號;通過改變滑動變阻器的阻值來改變其上電壓的大小,從而改變輸入模擬信號的大小。而輸入到PIC單片機ADC模塊AN0通道的模擬電壓信號即可被ADC模塊轉(zhuǎn)化為數(shù)字信號,我們將這個數(shù)字信號的大小直接顯示在接在PORTB和PORTC端口上的數(shù)碼管上。和以前的所有例子一樣, 首先在計算機硬盤上的 PIC文件夾下建立一個名為 ADC的子文件 夾;然后在MPLAB開發(fā)環(huán)境中以PICC為開發(fā)語言新建一個名為 ADC的工程項目,并將 其保存在ADC文件夾下;隨后在 MPLAB中新建一個名為 main

29、.c的源程序文件,并將其 添加到ADC工程中。然后,我們在 main.c源程序文件中輸入如下圖所示的C語言代碼:1匚Ludepic.h2打團數(shù)和全局變屋聲明3void in it PORT void/徹始化使用到的端口4void initADC void ,/WtADC5void MX START void);"后動AIK6void interrupt ADCINTvoid :;"AD匚中皓子程序7void display void ;融gint disp=E."躺ADC轉(zhuǎn)換的純9void main("主陽1011initPORT f/用鵬化使用到的端口

30、12initADC,i;/'如姑化AOC13while; 1)14AXSTART :/啟動ADC15display;1617IIBvoid initAO匚/WtotoCK:19j20AC<ONl-0x8e-"結(jié)果右對齊.設(shè)置為梯擬輸入21ADCONB 0x41.選擇通道a ,暫不啟動冷肚便能22ADIF-E./清零中薩標志位23ADIE-1,"使籠ADC中議3/7使轍卜設(shè)中斷25GIE-1,"開全局中斷26Jr27void ADCSTAR7)啟 StlADC25f29int i,延時籽樣30for(i«ieei>0i );31ADGC

31、l;/啟動ADC轉(zhuǎn)換3233void interrupt ADCINTi void)/執(zhí)DC中斷子程序3435ADIF-fi,"港零中斷標志位36disp ADRESH 3lADRESL.”保存ADC轉(zhuǎn)換得到的結(jié)果373Evoid39intj=e,k=E40"尸明慄存白位、十位*個位的變壘41i-disp 106,/百位42j- ;disp-i*10e/l;/txs43k-disp i*iee jle;"代44PORTB=k| i j«4) i"十位禾K位從PORTB輸出45PORTC=i;司立從PORTC鞘出4647void initPORT

32、O"SO抬化使用到的口 : PORTB、PORTC40斗號TRISH-0X0E, PORTB 0x06;S0TRI5C=0x0E; PORTC-0x0EiSt需要注意的是,如上圖的程序中,第52行是MPLAB要求的源程序末尾的一個空行,因為屏幕大小問題,截屏?xí)r不得不漏掉。如上源程序輸入完畢之后,將其保存。然后在MPLAB開發(fā)環(huán)境中編譯鏈接 ADC工程項目,生成仿真所需的源代碼。接著,我們在Proteus中繪制本例仿真所需的電路圖。電路圖中使用了一個滑動變阻器 (POT 或POT-LIN )和三個4511硬譯碼器,以及三個七段數(shù)碼管,略顯復(fù)雜,繪制時需要有一 定的耐心,最后繪制好的電路

33、圖如下圖所示:10140SC1/CLKJN 0SC2/CLK0UT&&n:/i mt LnElUJlnll f n Olli Lnffl rMCLR/M)p/THVR&2 IR«/.AN0 RA1/AN1 R期于 R«/AN3/RBZ+ IWTDM R的AJg馬inPUM rK EH rKtF3 Fhtw/ruv FrspfruUdn c n /th p 胡n tm I 】U A UFI 】J 冋 D p-1 HT1 O Q Irhj/ansMd REVAN6WRKU If 11D POLip口*1n VurRC5/SD0 RC6/WCK 卜RC7/

34、RWDTnUUronLi an i dd電 o 勺nu urirjnux/r irin U r inJRD-VPSFMRD5/PSP5RD6/PSR8RD7/PSP7.PICWF877.85161920212233343536jF3940ISACABQBccDU2QDQELTQFBl411Q0-L&STB'7'1AQABQBCU3QCDQDLT4611QE QFBl GL&STBAABQD.CIJ4QCDQDQELT-W11OFBlQGIE/STD悟121110215J41 1 « !« 瓏'恃iiiiio 1514'13&#

35、39;''12 .J1D9繪制好如上的電路圖之后,即可將前面編譯生成的源代碼裝入PIC單片機中進行仿真了。仿真時,我們可以點擊滑動變阻器的增大、減小阻值按鈕來改變阻值,從而改變輸入模擬信號的大小,并可以在數(shù)碼管上看到數(shù)字的改變,而且可以看出,隨著電阻值的改變,數(shù)碼管上顯示的數(shù)字反映,這是一個線性變化,如下圖:4i: : : uiPV13仝IkIDOS C 11/C LIONRBOflKaSC2/CLKOUTRBI蔽T盼p/lWRB2RB3/P0MRWJ/ANBRB4RA1/AN1RB5RA2/AN2M?ff-RB6/PGCR«/AN3A!ff* RMOTCKJRB7/

36、PGDR«/AN47$SRcomoso/ricw RCimosiccKRBD/AN5/RDRC2/CCRRE1/AN9AiWRC3/SCK/SCLRE2/AN7ORC4/SDIZSDARC5/SD0 RCCHXCK RC7/RWOTIRDO/ 卩 SRDIRD1ZP$P1IRD2/PSR2IRD3/PSR3RD4i,PSF4RD6/PSP5RD6/PSH6RD7/PSF?2DAD4511V3S402324 2&AQABQBCQCDU2QD<QELTQFBl4511GL&STB13 帀 jj1015U3PIC18F877157aBlLE/STBQA QB QC Q

37、D QE QF QGAQABQBCU4QCDQDLT4611QE QFB|QGLE/STB10.anyuZ.conia*15B14IKE13 Li ii915 14空12 11不過需要說明的是,這里數(shù)碼管上顯示的數(shù)字并沒有太大意義,因為程序中并沒有對采集轉(zhuǎn)化的數(shù)字信號進行任何處理。但如果對此稍加改進,在源程序中增加一些校正和處理的過程, 即可制作出一個測量電路中電壓大小的電壓表的雛形。好了,本例就是這樣,需要特別注意以下兩點:1. PIC單片機ADC模塊的應(yīng)用;2. 使用硬譯碼器時Proteus仿真數(shù)碼管的應(yīng)用;3. 如果你有興趣,可以將此例程序進行改進,制作出一個電壓表的雛形。轉(zhuǎn)載原創(chuàng)文章請

38、注明:文章轉(zhuǎn)載自:ANY 電子本文標題:Proteus仿真PIC的C語言程序一一ADC模塊應(yīng)用示例本文地址:TMR0計數(shù)器2009年5月5日目前已有2,279人讀過本文閱讀評論發(fā)表評論從本例開始,ANY電子將帶你學(xué)習(xí)使用 Proteus軟件仿真學(xué)習(xí)PIC單片機的C語言程序, 開發(fā)環(huán)境依然是 MPLAB,C語言編譯器使用的是 HI-TECH 的PICC。進行下面的講述之前,首先需要說明的是,因為這是PIC單片機的第一個 C語言程序示例, 所以,我們將盡可能詳細地為你呈現(xiàn)開發(fā)調(diào)試的全過程,希望你能學(xué)好,或者經(jīng)?;仡^復(fù)習(xí),并在以后的例子中按照這樣的步驟操作。 而且在以后的例子中, 我們將不會再這樣大

39、篇幅的 詳細介紹。今天的第一個例子,我們講述 PIC單片機的TMR0計數(shù)器的使用,例子的構(gòu)思如下:利用 TMR0的計數(shù)器功能,來記錄 PIC單片機外接按鍵的按鍵次數(shù),并在中斷程序中將按鍵次 數(shù)通過數(shù)碼管顯示出來。開始時,數(shù)碼管顯示0,一旦有按鍵按下,TMR0將記錄其次數(shù),并產(chǎn)生中斷,在TMR0的中斷子程序中將按鍵次數(shù)轉(zhuǎn)化為BCD碼,通過與PORTB 口相連的BCD to 7 Segment轉(zhuǎn)化器4511將BCD碼轉(zhuǎn)換為七段數(shù)碼管的輸入數(shù)據(jù),然后輸入到七段數(shù)碼管并在七段數(shù)碼管上將按鍵次數(shù)實時顯示出來。需要說明的一點是,為了簡化實例,我們只外接了一個七段數(shù)碼管,所以只能顯示0到9的數(shù)字;因此,當(dāng)按

40、鍵次數(shù)大于9次時,計數(shù)器將返回到 0,重新從0開始顯示。首先,在計算機上本地硬盤 PIC文件夾下新建一個名為 TMROCounter 的文件夾;接著在 確認語言工具已經(jīng)按照前文 Proteus 仿真PIC的C語言程序一一PICC開發(fā)環(huán)境配置中所 述選擇了 HI-TECH 的PICC的C語言開發(fā)工具之后,在 MPLAB中建立一個名為TMROCou nter 的工程,并將工程建立在前面的TMROCou nter 文件夾中,如下圖:接著,在MPLAB中新建一個名為 main.c的C語言源文件,并在其中輸入如下圖所示的源代碼:二 MPLABIDE Editor口回fgrmain, cXjf#inclu

41、de pic.h>12/函數(shù)和全局變星聲明fvoid initPORTB void ,/別始化PORTB鎬口Fvoid initTMRe(void/創(chuàng)始化TMR0fvoid interrupt TMR0INT void),/TMR0中斷子程序void display void :Eint counter二P;曲計數(shù)器9void main()10hinitPORTB:,/(tPORTByRDinitTMRe ),/別始化TMR0 hile(l)/循環(huán)等中斷,實際中可為冥他處理程二bI6void initPORTB<)化 portbB口1718TRISB-0x0e./設(shè)置PORTB為輸

42、出hPORTB=0x0e”/初出化PORTB出為020flvoid initTMRB )/TMR啣始化P223PSA=1;/分配預(yù)分頻器給顧禁止TMR瞼分瀕24T0C5=1;計數(shù)器惑25T0SE=1;下降沿軽26T0IF=e,清TMR0中斷標志27T0IE=1;使能TMR0中斷GIE=1,使能全局中斷1:TMRe=0xff, 設(shè)冒TMR0計數(shù)初值.開始計數(shù)31void interrupt TMR0INT(void) /TMR0中斷子程序3233gie=b;關(guān)閉中斷34T0IF=e;"W中斷標志位35counter+;36if (counter T)單個數(shù)瑪管蠱示,37counte-F

43、為筍化.設(shè)冒范圍為0與38display :;39GIE=1;開中斷40TT1Re-0xff,八重冒計數(shù)初值”開始不一次計數(shù)4142void display/昱 5?®4344int disp聲明保存匪闞的變量4Sdisp=CDLintpr£0x0-F :匚d5耳45PORTE-disp,送B匚陽昱示4711f佃anyDZ, com 切|u<ua然后,將如上的 mai n.c文件保存到前面我們建立的TMROCou nter 文件夾下,并將其添加到TMROCounter 工程中,添加完畢的工程(Project )窗口如下圖所示:至此,我們就準備好了工程所需的源程序,然后

44、點擊工具欄中的Build Project 按鈕(該按鈕只有選擇了 PICC的C語言編譯器之后才會出現(xiàn)),編譯鏈接工程并生成對應(yīng)的源代碼(.HEX 文件)。編譯生成源代碼之后,我們在Proteus中建立用于仿真的項目文件。電路圖比較簡單,只有一片PIC16F877 單片機,一個連接到單片機上的按鈕(Button ),一個將BCD碼轉(zhuǎn)換U1341"-35-36F? 13»ILTRBOJI1NTRBIRS3JPGM RB4ReSJPGCR67/PCDR12L2 S'A0COSC1/CLKft4OSC2JCLKOUT MCL/VpPiTHVREOJANSira)RE1血N6

45、I匿RE2/AN7CSRAQ/ANO RA1/AN1 RA2/AW2A/REF- RA3IAN3/VREF+ RA4fTOO<l_仏-L-r 10 A 世為七段數(shù)碼管輸入數(shù)據(jù)的4511以及一個七段數(shù)碼管。建立好的電路圖如下圖所示:RCO/T1CSO/T1 CK1RC1/nOSM:CP2RC2/CCP1RC3SCK/SCLRC4/SDWSDA RCSSDO RC6/TXCK RCPTRXTRDOPSPO fiDl JPSP1RD2JPSP2RD3JPSP3RD4SP4RD5JPSP5RD6JPSP6RD7dPSP7建立好電路圖之后, 將其以TMROCounter 之名保存在前面建立的 TM

46、ROCounter 文件夾 下,然后將前面的 MPLAB項目編譯生成的源代碼裝入單片機中,即可點擊Proteus的仿真按鈕進行仿真了。 仿真中的一個畫面可以從上圖中看出, 隨著我們一次次按下按鈕, 數(shù)碼 管上顯示的數(shù)字一個個累加,直到 9之后返回為0。本例其實相當(dāng)簡單,不過還是需要注意以下幾點內(nèi)容:1. PIC單片機TMR0的計數(shù)用法,當(dāng)然,與此對應(yīng),你也應(yīng)該學(xué)習(xí)PIC單片機其他定時器計數(shù)器的用法;2. PIC單片機的中斷程序的 C語言寫法;3. Proteus 軟件中的按鈕(Button )以及BCD to 7 Segment 器件4511的用法。轉(zhuǎn)載原創(chuàng)文章請注明:文章轉(zhuǎn)載自:ANY電子本

47、文標題:Proteus仿真PIC的C語言程序一一TMR0計數(shù)器本文地址:TMR1時鐘(使用內(nèi)部時鐘)2009年5月16日目前已有1,802人讀過本文閱讀評論發(fā)表評論在前面的例子 中,ANY電子為你送上了一個使用外接晶振的時鐘例子,但遺憾的是,不知 道到底是什么原因,那里的外接晶振始終沒有起振,我們沒有實現(xiàn)預(yù)期效果。希望有朋友能為我們指出原因,以便我們及時修改,以利于更多后來者學(xué)習(xí);當(dāng)然,我們自己也會努力修 正,以使其達到預(yù)期效果。本例,我們將上例中使用外接晶振修改為使用內(nèi)部時鐘,而其余部分相比前例則沒有任何變化,以完成另一個 TMR1時鐘的例子。本例構(gòu)思和上例相同,如下:通過使用TMR1產(chǎn)生0

48、.1S的定時,計時達到時產(chǎn)生一個中斷,在中斷子程序中累加與單片機RB 口相連的兩數(shù)碼管中代表個位數(shù)的顯示數(shù)字;當(dāng)個位數(shù)字累積到9時,則更新顯示兩個數(shù)碼管中代表十位的數(shù)字。單片機輸出數(shù)字的 BCD碼經(jīng)過與單片機連接的外部 4511硬譯碼器譯碼為數(shù)碼 管所需的七段數(shù)碼管的段值。本例使用PIC單片機內(nèi)部時鐘。首先,我們在本地PIC文件夾下新建一個名為 TMR1Second 的子文件夾;然后在 MPLAB 中新建一個使用 PICC的C語言的工程項目,將其命名為TMR1Second ,并保存到如上新 建的TMR1Second 文件夾中。然后新建一個名為 main.c的C語言源文件,文件源代碼如下:#include <pic h>/函數(shù)和全局變星聲明 void void void voidinitPORTB (void);/創(chuàng)始化 PORTB 端口initTMRl(void);/ 別始化 TMR1interrupt TMRlINT(void); /TMR1 中斷子程序 display (void);int second-8; void main()顯話/計initPORTBO, initTMRl(); while(l) void initTMRl()TlCON8=0xce;GIE

溫馨提示

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

評論

0/150

提交評論