国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年01月11日(星期六)

2021年01月11日 | PIC16F887 實戰(zhàn)編程 單片機編程 基礎(chǔ)實驗教程

發(fā)布者:JoyfulHearted 來源: eefocus關(guān)鍵字:PIC16F887  單片機編程  基礎(chǔ)實驗 手機看文章 掃描二維碼
隨時隨地手機看文章

基礎(chǔ)操作需要看一下以下的博客,跟著走一遍。
安裝MPLAB V4.05+XC8 V1.41,老師不會管你用什么版本,別的版本bug多,老版本反而好用:
https://blog.csdn.net/x1131230123/article/details/100907773
安裝proteus 8.9:
https://blog.csdn.net/x1131230123/article/details/106951776
做一個基礎(chǔ)實驗(想改寫到MPLAB V5+XC8 V2也看這里的博客6.3 移植操作指南):
https://blog.csdn.net/x1131230123/article/details/108757436


實物連接指南(持續(xù)更新):
https://blog.csdn.net/x1131230123/article/details/108780168

什么是編碼?
漢字編碼有哪些? UTF-8才是最常用的編碼,GB2312只是漢字編碼太局限了。
在這里插入圖片描述

完成后:
在這里插入圖片描述
4、
為新建的工程添加一個main.c:右鍵點source files --> 左鍵點new --> 左鍵點main.c…
在這里插入圖片描述
不要中文
在這里插入圖片描述
這樣就完成了!
在這里插入圖片描述
5、
這個時候就可以編寫單片機C程序了,寫個簡單的(下面這程序就是控制端口B的低四位輸出0101電平):

#include


// #pragma config statements should precede project file includes.

// Use project enums instead of #define for ON and OFF.

// CONFIG1

#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)

#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)

#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)

#pragma config MCLRE =ON      // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD)

#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)

#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

#pragma config BOREN = OFF      // Brown Out Reset Selection bits (BOR disabled)

#pragma config IESO = OFF       // Internal External Switchover bit (Internal/External Switchover mode is disabled)

#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)

#pragma config LVP = OFF        // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)


// CONFIG2

#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)

#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)


void main(void)

{


    TRISB=0b11110000;//高四位輸入 低四位輸出

    PORTB=0b00000101;//高四位的設(shè)置無效 低四位輸出0101

    while(1){

    }

}

在這里插入圖片描述

在所有的預處理指令中,#pragma

指令可能是最復雜的了,它的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作。#pragma指令對每個編譯器給出了一個方法,在保持與C和C++語言完全兼容的情況下,給出主機或操作系統(tǒng)專有的特征。依據(jù)定義,編譯指示是機器或操作系統(tǒng)專有的,且對于每個編譯器都是不同的


不用管前面那些#pragma,那些全是對xc8編譯器進行一些設(shè)置的,告訴編譯器怎么處理怎么處理。

6、
寫好程序后,怎么把程序弄到單片機里?單片機需要的是hex文件。
我們是C語言是人看的,我們需要需要借助MPLAB和XC8將C語言編譯成hex文件。
點擊下圖里的圖標就可以將C語言編譯好。

注意:這里是編譯,英文單詞是build,編譯的目的是將c語言轉(zhuǎn)換成hex機器文件,單片機只需要這個文件就能夠正確執(zhí)行我們的程序。
你如果需要聯(lián)調(diào)、調(diào)試、運行這幾個關(guān)鍵詞,英文單詞是debug或者run等字眼,這類操作只在看程序運行到哪里,運行成了什么情況,是嵌入式程序員在開發(fā)過程中所需要的一種模式(要是經(jīng)驗足夠也不需要這種模式)。這種事情要么需要proteus聯(lián)調(diào)設(shè)置,要么需要實物單片機連接仿真器后插入了你的電腦,不要去點這些,除非你在自己進行聯(lián)調(diào)操作或者調(diào)試實物操作。
在這里插入圖片描述
會在底下看到編譯提示:

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf

make[1]: Entering directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'

make  -f nbproject/Makefile-default.mk dist/default/production/helloworld.X.production.hex

make[2]: Entering directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'

"D:Program Files (x86)Microchipxc8v1.41binxc8.exe" --pass1  --chip=16F887 -Q -G  --double=24 --float=24 --opt=+asm,+asmfile,-speed,+space,-debug,-local --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist -DXPRJ_default=default  --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib   --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/main.p1  main.c 

"D:Program Files (x86)Microchipxc8v1.41binxc8.exe"  --chip=16F887 -G -mdist/default/production/helloworld.X.production.map  --double=24 --float=24 --opt=+asm,+asmfile,-speed,+space,-debug,-local --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist -DXPRJ_default=default  --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"      --memorysummary dist/default/production/memoryfile.xml -odist/default/production/helloworld.X.production.elf  build/default/production/main.p1     

Microchip MPLAB XC8 C Compiler (Free Mode) V1.41

Build date: Jan 24 2017

Part Support Version: 1.41

Copyright (C) 2017 Microchip Technology Inc.

License type: Node Configuration


:: warning: (1273) Omniscient Code Generation not available in Free mode


Memory Summary:

    Program space        used     Dh (    13) of  2000h words   (  0.2%)

    Data space           used     2h (     2) of   170h bytes   (  0.5%)

    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)

    Data stack space     used     0h (     0) of    60h bytes   (  0.0%)

    Configuration bits   used     2h (     2) of     2h words   (100.0%)

    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)



You have compiled in FREE mode.

Using Omniscient Code Generation that is available in PRO mode,

you could have produced up to 60% smaller and 400% faster code.

See http://www.microchip.com/MPLABXCcompilers for more information.


make[2]: Leaving directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'

make[1]: Leaving directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'


BUILD SUCCESSFUL (total time: 1s)

Loading code from C:/Users/xd_du/Desktop/PICproject/helloworld.X/dist/default/production/helloworld.X.production.hex...

Loading completed


我們的hex文件在哪里?編譯完成后,我們就可以在桌面那個工程文件夾里去找下圖里這個hex文件,這個文件就是機器文件。proteus加載這個文件就可以執(zhí)行我們寫的程序。!?。?!找到這個文件我們就已經(jīng)成功了!
在這里插入圖片描述
題外話:編譯的時候提示了一句話:

You have compiled in FREE mode.



題外話:所以如何才能不處于免費模式?右鍵工程–>properties–>按圖里的點擊。
題外話:作用:此選項選擇編譯器的基本操作模式??捎妙愋陀衟ro、std和free。在PRO模式下運行的編譯器使用完全優(yōu)化并生成最小的代碼大小。標準模式使用有限的優(yōu)化,而自由模式只使用最小的優(yōu)化級別,將生成相對較大的代碼。
提示:選擇PRO在很多時候都不是一個明智的選擇,PRO模式在編譯器會“智能地”改變一些C語言的匯編實現(xiàn)方法,這有時候會有益于代碼的最優(yōu)化,但有時候會顯得有些“智障”,會讓能你認為能好好工作的C代碼工作起來不正常。這個PRO主要是提供給有經(jīng)驗的嵌入式開發(fā)工程師用于優(yōu)化代碼的。
在這里插入圖片描述

7、
MPLAB中的事情已經(jīng)進行完了,現(xiàn)在你已經(jīng)知道怎么使用MPLAB建立工程,如何編寫程序和編譯程序,編譯后的hex文件目錄在哪里。
其實寫好程序后,就可以鏈接仿真器進行下載(燒寫)程序了。鏈接仿真器后,下面的run圖標或者debug圖標點一下,MPLAB都會自動講hex文件燒寫到實物單片機中,單片機就能夠運行起來。這一步的操作是在調(diào)試實物的時候所用到的,字眼是debug。這里只是順便提及一下,跟我們想要進行的仿真沒有絲毫聯(lián)系。
在這里插入圖片描述

現(xiàn)在可以談?wù)劻硪患虑?,如何proteus仿真?
Proteus軟件里面含有很多單片機和外部器件,能夠模擬實物電路的運行。如果我們在Proteus軟件里連接好需要的實物器件,然后將寫好的程序(hex文件)加載到Proteus軟件里的單片機器件里,那在Proteus軟件中我們就可以看到整個電路的工作情況。我們的關(guān)注點就放到了Proteus軟件中的器件連接中了。

8、
Proteus軟件的安裝和基礎(chǔ)使用參見這個鏈接:
https://blog.csdn.net/x1131230123/article/details/106951776
新建仿真圖–>添加器件PIC16F887
在這里插入圖片描述
將hex文件加載到Proteus軟件里的單片機器件里:雙擊單片機器件進入下圖這個設(shè)置界面—>點擊打開文件符號—>選擇桌面上工程里的hex文件—>打開—>點擊OK—>成功。這里沒有詳細截圖,看下圖里的左邊箭頭去找hex文件即可!
在這里插入圖片描述
此時可以看到Proteus軟件左下角,分別是開始仿真和停止仿真按鈕。我們點擊開始仿真。
在這里插入圖片描述
仿真運行后,可以看到單片機的端口B四位電平,藍色就是低電平的意思,紅色就是高電平的意思,這里就是0101的電平。如果這引腳連接了LED燈,LED燈就可以點亮。由此可見,程序生效了,單片機正常工作中。
在這里插入圖片描述

3 單片機基礎(chǔ)寄存器操作:

3.1 IO

設(shè)置一個端口為輸出 TRISA0=0
設(shè)置一個端口為輸入 TRISA0=1
設(shè)置一個端口輸出高電平 RA0=1
設(shè)置一個端口輸出低電平 RA0=0
同時設(shè)置8個端口響應(yīng)使用TRISA PORTA
設(shè)置B C D端口類似。

3.2 模擬輸入電壓讀取

設(shè)置某個引腳為輸入–>打開模擬輸入

3.3 外部中斷

詳細看書。

3.4 定時器中斷

詳細看書。

3.5 串口UART

詳細看書。

3.6 IIC通信

詳細看書。

4 實際項目

PIC16F887 單片機 PROTEUS 仿真 C程序 測溫系統(tǒng) TC74 DS18B20
PIC16F887 單片機 PROTEUS 仿真 C程序 信號發(fā)生器
PIC16F887 單片機 PROTEUS 仿真 C程序 溫控電機
PIC16F887 單片機 PROTEUS 仿真 C程序 數(shù)字時鐘 萬年歷 DS1302 陰歷顯示
PIC16F887 單片機 PROTEUS 仿真 C程序 搶答器
PIC16F887 單片機 PROTEUS 仿真 C程序 可存儲電子琴 PIC
PIC16F887 單片機 PROTEUS 仿真 C程序 模擬電話撥號計算器 密碼鎖
PIC16F887 單片機 PROTEUS 仿真 C程序 電子密碼鎖
PIC16F887 單片機 PROTEUS 仿真 C程序 智慧門鈴呼叫系統(tǒng) 門鈴一拖 3
PIC16F887 單片機 PROTEUS 仿真 C程序 病床呼叫系統(tǒng)
PIC16F887 單片機 PROTEUS 仿真 C程序 測溫系統(tǒng) DS18B20 TC74
PIC16F887 單片機 PROTEUS 仿真 C程序 數(shù)字點餐系統(tǒng)

5 如何閱讀代碼

整個程序結(jié)構(gòu)一般如下:

#include

//part 0//

可能會放置一些子函數(shù)的聲明

C語言嘛,子函數(shù)無非就是先聲明,后定義。



//part 1//

各種雜七雜八的子函數(shù)放在這個地方

顯示屏子函數(shù)

溫度傳感器子函數(shù)

報警判斷子函數(shù)

按鍵檢測子函數(shù)


void main( void )

{

    //part 2//

調(diào)用一些初始化程序

比如單片機引腳要讀取按鍵高低電平,就得把這個引腳設(shè)置為輸入方向

比如定時器中斷初始化,設(shè)置每隔2ms執(zhí)行一次中斷函數(shù)

while(1)

{

//part 3//

這里是一個死循環(huán)體

這個位置要寫單片機不斷重復在做的事情,永不停息

比如檢測按鍵輸入,有輸入了根據(jù)輸入處理一下

比如不斷調(diào)用溫度讀取函數(shù),然后把結(jié)果顯示出來

}

}


//part 3//

這里這個帶了interrupt 這個函數(shù)就是中斷函數(shù)

這個函數(shù)獨立于所有函數(shù)之外,單獨看這個函數(shù)

這個函數(shù)是需要被觸發(fā)的

都是要靠設(shè)置單片機寄存器來做到的

比如在main里初始化的時候設(shè)置了定時器1的2ms中斷,那么每過2ms就會執(zhí)行一次high_isr()函數(shù),在函數(shù)里面判斷寄存器TMR1IF 就可以知道是定時器的2ms事件。

void interrupt high_isr( void )

{

if ( TMR1IF )

{

TMR1IF = 0;//清除標志位

//part 4//

這里需要寫定時執(zhí)行的東西,

比如我設(shè)置了一個變量是秒針倒計時,每一秒就減少1

那么我得這么寫:

變量1 ++;

if(變量1加到了500)

{

變量1 = 0;

秒針 --;  (變量1每2ms執(zhí)行一次減少1,500次花費時間1s)

}


    }

}


看懂上面的框架后,我們就可以閱讀更多的代碼,我們可以依照以下幾個注意點去看程序:
(1)在MPLAB中建立好工程,利用好MPLAB去閱讀程序;
(2)MPLAB有個竅門,在工程已經(jīng)被編譯后,我們可以 按住ctrl 然后鼠標左鍵點函數(shù)名字或變量名字去跳轉(zhuǎn),直接跳轉(zhuǎn)到函數(shù)定義的地方。更需要提出的是,在子函數(shù)定義處再次ctrl+左鍵點函數(shù)名字,會跳轉(zhuǎn)到子函數(shù)聲明處。
(3)ctrl+F進入查找,可以通過Next去查看main.c整個文件中的這個查找字符串出現(xiàn)的每一個地方。方便看函數(shù)都在哪里用了。
在這里插入圖片描述

(4)注重函數(shù)或者變量名稱+注重分類。比如LCD1602驅(qū)動函數(shù)就是挨著的一堆,函數(shù)名都差不多有個LCD字樣。有意識地去多輸入一個回車,使得與其他代碼間隔遠一下,自己更好分清。

[1] [2] [3]
關(guān)鍵字:PIC16F887  單片機編程  基礎(chǔ)實驗 引用地址:PIC16F887 實戰(zhàn)編程 單片機編程 基礎(chǔ)實驗教程

上一篇:基于PIC16F877A單片機和SCA60C芯片實現(xiàn)帆船姿態(tài)儀的設(shè)計
下一篇:PIC16F887 MPLAB IDE 多個工程的建立 多機仿真

推薦閱讀

電子網(wǎng)消息,公布去年12月財報顯示,去年12月營收為新臺幣106.67億元,月減12.2%,為去年全年最低。聯(lián)電 2017 年營收為新臺幣 1,492.84 億元,較前年僅成長 0.9%。財報指出,聯(lián)電未來兩年并不會積極擴產(chǎn),將專注于提升產(chǎn)能利用率及強化財務(wù)結(jié)構(gòu)。繼去年10月營收創(chuàng)歷史新高后,受到季節(jié)性因素影響開始逐月下降,聯(lián)電第四季度比前季少2.83%。不過仍略優(yōu)...
伴隨改革開放40年,中國電視產(chǎn)業(yè)經(jīng)歷了從無到有,從小到大,從弱到強,從黑白到彩色,從單一的組裝生產(chǎn)到全產(chǎn)業(yè)鏈的配套。電視產(chǎn)品不斷更迭,見證了改革開放40年經(jīng)濟、科技、消費的持續(xù)變遷。那些我們曾經(jīng)耳熟能詳?shù)碾娨暺放浦挥泻苌僖徊糠执嬖谟谖覀兊囊暰€中,它們中的大多數(shù)已經(jīng)消失或者轉(zhuǎn)型。據(jù)奧維云網(wǎng)(AVC)數(shù)據(jù)顯示,目前9大電視品牌占據(jù)了市場80%...
電機啟動和停止瞬間波形會有一個快速變化的過程,啟停測試通常的做法是用示波器測試,但示波器精度偏低,無法準確的進行數(shù)據(jù)測量和計算,今天的文章就提出一種新的解決方案。01電機啟動測試現(xiàn)狀電機在我們生活中非常常見,電機技術(shù)對我們未來的發(fā)展有至關(guān)重要的意義。電機性能的測試對電機研發(fā)者而言有著重大意義。電機在正常工作時,人們往往會將電機控制...
埃隆·馬斯克一直在詬病激光雷達的成本,現(xiàn)在激光雷達便宜的競爭者來了,他應(yīng)該點贊哦。不過,特斯拉至今沒有搭載,咋的了? 埃隆·馬斯克的特斯拉打死也不搭載激光雷達(LiDAR)自有其道理,但也沒能找到讓尚處于自動駕駛起步階段的車輛發(fā)現(xiàn)未經(jīng)機器學習訓練的龐然大物的方法,以至于因“視而不見”而事故不斷,當然,無端突然加速又是另外一回事了。事...

史海拾趣

問答坊 | AI 解惑

一個在cortex-M3上運行的操作系統(tǒng),已經(jīng)過數(shù)十個產(chǎn)品驗證

代碼很短,如果不算注釋只有200行左右,及其短小,但很好用…

查看全部問答∨

LM3S8962調(diào)試通過的例程

使用LM3S8962開發(fā)板開發(fā)音樂的例程。本例程已經(jīng)調(diào)試通過,可以供大家研究學習! 歡迎大家指正!   好了,傳文件上來,下面是源文件! …

查看全部問答∨

WINCE下如何截取屏幕上某個RECT區(qū)域上的圖片?急

我現(xiàn)在有480*800的一個窗口 上面有背景圖和其他一些圖。。都貼在上面。 當我點擊任意一點。如何才能把點擊后規(guī)定的區(qū)域下的圖片拿出來可以用?…

查看全部問答∨

請教高手:micro C/os-ii 移植的問題

請高手幫幫忙: 最近想把「micro C/os-ii The Real-Time Kernel 」書中的 chapter 1 之example 1-4 移植 至 s3c2440 開發(fā)板子中,卻覺得不容易上手,請高手不吝多多指教,謝謝! …

查看全部問答∨

Verilog 中 INOUT 仿真

芯片外部引腳很多都使用inout類型的,為的是節(jié)省管腿。一般信號線用做總線等雙向數(shù)據(jù)傳輸?shù)臅r候就要用到INOUT類型了。就是一個端口同時做輸入和輸出。 inout在具體實現(xiàn)上一般用三態(tài)門來實現(xiàn)。三態(tài)門的第三個狀態(tài)就是高阻\'Z\'。當inout端口不輸出時 ...…

查看全部問答∨

ads和linux交差編譯環(huán)境的區(qū)別

這兩個不都是最終都是生成arm的識別的文件,有什么區(qū)別嗎,生成的格式不一樣?這兩個環(huán)境各生成什么格式文件,如何下載或者說用什么軟件下載?有人說ads一般用于裸機編程,是這回事嗎? 我是菜鳥,不要噴我,感謝啦…

查看全部問答∨

這個反相比例放大器怎么回事兒???

這個反相比例放大器怎么回事兒?。? …

查看全部問答∨

圓點博士微型四軸飛行器電路原理圖

圓點博士微型四軸飛行器電路原理圖 …

查看全部問答∨

正月十五鬧花燈!幾個簡單的LM317頻率可調(diào)的閃光燈電路圖

LM317常用作電壓穩(wěn)壓器中的調(diào)整元件,這里給大家介紹一個不尋常的應(yīng)用,只要配上不多的外部元件,可以使一個12V的小燈泡閃爍發(fā)光。 如圖,采用所給的元件參數(shù)值和信號,當電路接通以后,小燈泡將以4Hz的頻率閃爍,當然,若改變元件參數(shù)(R2或C ...…

查看全部問答∨

FLASH歷程的疑問

TI給的關(guān)于FLASH歷程 void main(void) {   unsigned long * Flash_ptrD;               // Initialize Flash pointer Seg D   unsigned long value;   WDTC ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved