導航:首頁 > 編程語言 > pic16f編程

pic16f編程

發布時間:2024-05-01 11:11:49

㈠ PIC16F630晶元是用什麼語言編程的,C語言或匯編語言

使用C語言或匯編語言都可以,使用官方提供的MPLAB開發軟體進行開發。
picc是這個軟體默認的C編譯器、是官方的。
此外還有ccs這款第三方C編譯器。
而匯編器都是官方的。

㈡ PIC16F66J60涓鐢–璇璦緙栫▼錛屽備綍鍔犲叆NOP寤舵椂錛屽姞鍏ユ彁紺烘垜娌$敤瀹氫箟錛屾垨澶存枃浠舵病鏈夈傘傘傝皝鑳藉府鎴戣В鍐充竴涓

鍙鑳介渶瑕佸姞鍏#pragma瀹氫箟涔嬬被銆傜粰浣犵偣鎻愮ず錛屾潵鑷充簬鍏朵粬鍗曠墖鏈恆侾IC涔熷簲璇ユ湁鐩稿簲鐨勬柟娉曘

1. 浣跨敤pragma
#pragma NOP
NOP();
2.浣跨敤asm鍑芥暟
asm("NOP");
3,浣跨敤奼囩紪宓屽叆
#pragma ASM
NOP;
#end ASM

'2013/04/29 by one from IBM

㈢ pic16F單片機如何配置熔絲位

配置方法如下:
(1)在AVR的器件手冊中,對熔絲位使用已編程(Programmed)和未編程(Unprogrammed)定義熔絲位的狀態,「Unprogrammed」表示熔絲狀態為「1」(禁止);「Programmed」表示熔絲狀態為「0」(允許)。因此,配置熔絲位的過程實際上是「配置熔絲位成為未編程狀態「1」或成為已編程狀態「0」」。
(2)在使用通過選擇打鉤「√」方式確定熔絲位狀態值的編程工具軟體時,弄清楚「√」表示設置熔絲位狀態為「0」還是為「1」。
(3)使用CVAVR中的編程下載程序時應特別注意,由於CVAVR編程下載界面初始打開時,大部分熔絲位的初始狀態定義為「1」,因此不要使用其編程菜單選項中的「all」選項。此時的「all」選項會以熔絲位的初始狀態定義來配置晶元的熔絲位,而實際上其往往並不是用戶所需要的配置結果。如果要使用「all」選項,應先使用「read->fuse bits」讀取晶元中熔絲位實際狀態後,再使用「all」 選項。
(4)新的AVR晶元在使用前,應首先查看它熔絲位的配置情況,再根據實際需要,進行熔絲位的配置,並將各個熔絲位的狀態記錄備案。
(5)AVR晶元加密以後僅僅是不能讀取晶元內部Flash和E2PROM中的數據,熔絲位的狀態仍然可以讀取但不能修改配置。晶元擦除命令是將Flash和E2PROM中的數據清除,並同時將兩位鎖定位狀態配置成「11」,處於無鎖定狀態。但晶元擦除命令並不改變其它熔絲位的狀態。
(6)正確的操作程序是:在晶元無鎖定狀態下,下載運行代碼和數據,配置相關的熔絲位,最後配置晶元的鎖定位。晶元被鎖定後,如果發現熔絲位配置不對,必須使用晶元擦除命令,清除晶元中的數據,並解除鎖定。然後重新下載運行代碼和數據,修改配置相關的熔絲位,最後再次配置晶元的鎖定位。
(7)使用ISP串列方式下載編程時,應配置SPIEN熔絲位為「0」。晶元出廠時SPIEN位的狀態默認為「0」,表示允許ISP串列方式下載數據。只有該位處於編程狀態「0」,才可以通過AVR的SPI口進行ISP下載,如果該位被配置為未編程「1」後,ISP串列方式下載數據立即被禁止,此時只能通過並行方式或JTAG編程方式才能將SPIEN的狀態重新設置為「0」,開放ISP。通常情況下,應保持SPIEN的狀態為「0」,允許ISP編程不會影響其引腳的I/O功能,只要在硬體電路設計時,注意ISP介面與其並接的器件進行必要的隔離,如使用串接電阻或斷路跳線等。
(8)當你的系統中,不使用JTAG介面下載編程或實時在線模擬調試,且JTAG介面的引腳需要作為I/O口使用時,必須設置熔絲位JTAGEN的狀態為「1」。晶元出廠時JTAGEN的狀態默認為「0」,表示允許JTAG介面,JTAG的外部引腳不能作為I/O口使用。當JTAGEN的狀態設置為「1」後,JTAG介面立即被禁止,此時只能通過並行方式或ISP編程方式才能將JTAG重新設置為「0」,開放JTAG。
(9)一般情況下不要設置熔絲位把RESET引腳定義成I/O使用(如設置ATmega8熔絲位RSTDISBL的狀態為「0」),這樣會造成ISP的下載編程無法進行,因為在進入ISP方式編程時前,需要將RESET引腳拉低,使晶元先進入復位狀態。
(10)使用內部有RC振盪器的AVR晶元時,要特別注意熔絲位CKSEL的配置。一般情況下,晶元出廠時CKSEL位的狀態默認為使用內部1MHz的RC振盪器作為系統的時鍾源。如果你使用了外部振盪器作為系統的時鍾源時,不要忘記首先正確配置CKSEL熔絲位,否則你整個系統的定時都會出現問題。而當在你的設計中沒有使用外部振盪器(或某鍾特定的振盪源)作為系統的時鍾源時,千萬不要誤操作或錯誤的把CKSEL熔絲位配置成使用外部振盪器(或其它不同類型的振盪源)。一旦這種情況產生,使用ISP編程方式則無法對晶元操作了(因為ISP方式需要晶元的系統時鍾工作並產生定時控制信號),晶元看上去「壞了」。此時只有使用取下晶元使用並行編程方式,或使用JTAG方式(如果JTAG為允許時且目標板上留有JTAG介面)來解救了。另一種解救的方式是:嘗試在晶元的晶體引腳上臨時人為的疊加上不同類型的振盪時鍾信號,一旦ISP可以對晶元操作,立即將CKSEL配置成使用內部1MHz的RC振盪器作為系統的時鍾源,然後再根據實際情況重新正確配置CKSEL。
註:不同AVR的熔絲也不同,使用前必須仔細查看晶元手冊。 要重視手冊學習,不僅是掌握如何使用,也是從根本上認識和掌握原理和結構。對於硬體工程師來將,數據手冊是真正的「經書」,其它都是「修練經驗」。不熟讀「經書」,你無法修煉成「仙」的。這也是《M128》、《M8》的目的之一!

㈣ 這個pic編程器怎麼樣燒寫pic16f877

照著這個圖可以做出PIC16F877的編程器的,這種是JDM編程器,要用IC-PROG燒寫軟體,網上可以免費下個。圖是的是18引腳的PIC編程器,但PIC16877編程也同樣只用到MCLR PGD PGM PGC VCC VSS 幾個引腳,你從網上找一個18引腳的單片機(如16F628),查一下它的MCLR PGD PGM PGC VCC VSS 引腳是接在圖上的哪個腳,然後找個40管腳的引腳座,上面的這些腳接到16F877的相同管腳就行了。

㈤ 璇烽棶PIC16F1938鐨勯棯瀛樼▼搴忓瓨鍌ㄥ櫒鎬庝箞榪涜屾摝闄ゅ拰鍐欐搷浣

/*******************************************************************************
* 鍚嶇О錛欶lashRead
* 鍔熻兘錛氳誨彇紼嬪簭瀛樺偍鍣ㄤ竴涓瀛
* 鍙傛暟錛歛ddr -> 紼嬪簭瀛樺偍鍣ㄥ瓧鍦板潃
* 榪斿洖錛氳誨彇鍒扮殑瀛樺偍鍣ㄥ
*******************************************************************************/
uint16 FlashReadWord(uint16 addr)
{
EEADRL = ((addr) & 0x00ff);
EEADRH = ((addr) >> 8);
CFGS = 0; //璁塊棶紼嬪簭瀛樺偍鍣╫r鏁版嵁EEPROM
LWLO = 0; //浠呰呰澆鍐欓攣瀛樺櫒浣
EEPGD = 1; //璁塊棶紼嬪簭瀛樺偍鍣
RD = 1; //鍚鍔ㄥ圭▼搴忓瓨鍌ㄥ櫒or鏁版嵁EEPROM鐨勮繪搷浣滐紝璇繪搷浣滃崰鐢ㄤ竴涓鍛ㄦ湡錛岀敱紜浠舵竻闆
asm("NOP");
asm("NOP");
return ((EEDATH)<<8 | (EEDATL));
}
/*******************************************************************************
* 鍚嶇О錛欶lashWriteWord
* 鍔熻兘錛氱紪紼嬬▼搴忓瓨鍌ㄥ櫒涓涓瀛
* 鍙傛暟錛歛ddr -> 紼嬪簭瀛樺偍鍣ㄥ瓧鍦板潃
* dat -> 瑕佺紪紼嬬殑鍊
* 榪斿洖錛氭棤
*******************************************************************************/
void FlashWriteWord(uint16 addr,uint16 dat)
{
uint16 value;
EECON1 = 0;
EEADRL = ((addr) & 0xff);
EEADRH = ((addr) >> 8);
value = dat & 0x3fff;
EEDATH = ((value) >> 8);
EEDATL = ((value) & 0xff);
EEPGD = 1; //璁塊棶紼嬪簭瀛樺偍鍣
CFGS = 0; //璁塊棶紼嬪簭瀛樺偍鍣╫r鏁版嵁EEPROM
WREN = 1; //浣胯兘緙栫▼/鎿﹂櫎鎿嶄綔
LWLO = 0; //鍔犺澆鍒扮▼搴忓瓨鍌ㄩ攣瀛樺櫒錛屽苟緙栫▼鍒扮▼搴忓瓨鍌ㄥ櫒
EECON2 = 0x55; //蹇呴』鐨勮В閿佸簭鍒
EECON2 = 0xAA; //蹇呴』鐨勮В閿佸簭鍒
WR = 1; //鍚鍔ㄧ紪紼嬫搷浣
asm("NOP");
asm("NOP");
WREN = 0; //紱佹㈢紪紼/鎿﹂櫎鎿嶄綔
}
/*******************************************************************************
* 鍚嶇О錛欶lashWriteLine
* 鍔熻兘錛氱紪紼嬬▼搴忓瓨鍌ㄥ櫒涓琛(32瀛)
* 鍙傛暟錛歛ddr -> 紼嬪簭瀛樺偍鍣ㄨ屽湴鍧
* dat -> 瑕佺紪紼嬬殑鍊
* 榪斿洖錛氭棤
*******************************************************************************/
void FlashWriteLine(uint16 addr,uint16 *dat)
{
uint8 i;
uint16 value;
EECON1 = 0;
EEADRL = ((addr) & 0xff);
EEADRH = ((addr) >> 8);
for(i=0;i<31;i++)
{
value = dat[i] & 0x3fff;
EEDATH = ((value) >> 8);
EEDATL = ((value) & 0xff);
EEPGD = 1; //璁塊棶紼嬪簭瀛樺偍鍣
CFGS = 0; //璁塊棶紼嬪簭瀛樺偍鍣╫r鏁版嵁EEPROM
WREN = 1; //浣胯兘緙栫▼/鎿﹂櫎鎿嶄綔
LWLO = 1; //鍙鍔犺澆鍒扮▼搴忓瓨鍌ㄩ攣瀛樺櫒
EECON2 = 0x55; //蹇呴』鐨勮В閿佸簭鍒
EECON2 = 0xAA; //蹇呴』鐨勮В閿佸簭鍒
WR = 1; //鍚鍔ㄧ紪紼嬫搷浣
asm("NOP");
asm("NOP");
EEADR++;
}
value = dat[31] & 0x3fff;
EEDATH = ((value) >> 8);
EEDATL = ((value) & 0xff);
EEPGD = 1; //璁塊棶紼嬪簭瀛樺偍鍣
CFGS = 0; //璁塊棶紼嬪簭瀛樺偍鍣╫r鏁版嵁EEPROM
WREN = 1; //浣胯兘緙栫▼/鎿﹂櫎鎿嶄綔
LWLO = 0; //鍔犺澆鍒扮▼搴忓瓨鍌ㄩ攣瀛樺櫒錛屽苟緙栫▼鍒扮▼搴忓瓨鍌ㄥ櫒
EECON2 = 0x55; //蹇呴』鐨勮В閿佸簭鍒
EECON2 = 0xAA; //蹇呴』鐨勮В閿佸簭鍒
WR = 1; //鍚鍔ㄧ紪紼嬫搷浣
asm("NOP");
asm("NOP");
WREN = 0; //紱佹㈢紪紼/鎿﹂櫎鎿嶄綔
}
/*******************************************************************************
* 鍚嶇О錛欶lashEraseLine
* 鍔熻兘錛氭摝闄ょ▼搴忓瓨鍌ㄥ櫒涓琛
* 鍙傛暟錛歛ddr -> 紼嬪簭瀛樺偍鍣ㄨ屽湴鍧
* 榪斿洖錛氭棤
*******************************************************************************/
void FlashEraseLine(uint16 addr)
{
EEADRL = ((addr) & 0xff);
EEADRH = ((addr) >> 8);
CFGS = 0; //璁塊棶紼嬪簭瀛樺偍鍣╫r鏁版嵁EEPROM
WREN = 1; //浣胯兘緙栫▼/鎿﹂櫎鎿嶄綔
EEPGD = 1; //璁塊棶紼嬪簭瀛樺偍鍣
FREE = 1; //鎵ц屾摝闄ゆ搷浣
EECON2 = 0x55; //蹇呴』鐨勮В閿佸簭鍒
EECON2 = 0xAA; //蹇呴』鐨勮В閿佸簭鍒
WR = 1; //鍚鍔ㄧ▼搴忓瓨鍌ㄥ櫒or鏁版嵁EEPROM緙栫▼/鎿﹂櫎鎿嶄綔
asm("NOP");
asm("NOP");
WREN = 0; //紱佹㈢紪紼/鎿﹂櫎鎿嶄綔
}

閱讀全文

與pic16f編程相關的資料

熱點內容
免費低吸指標源碼 瀏覽:180
MO命令是 瀏覽:46
python入門常見錯誤 瀏覽:408
改加密包名 瀏覽:783
程序員在線編譯器 瀏覽:247
山東兼職程序員收費標准 瀏覽:424
物業管理系統項目java源碼 瀏覽:8
林皋pdf 瀏覽:584
vue編譯後命名 瀏覽:729
可以發布命令的 瀏覽:954
安卓系統如何領取國旗 瀏覽:328
chromium編譯linux 瀏覽:469
exe在線反編譯工具 瀏覽:365
imbatest命令 瀏覽:410
android自動連接指定wifi 瀏覽:491
用紙做超簡單又解壓的東西 瀏覽:596
國密2演算法是對稱的嗎 瀏覽:465
nc65伺服器地址配置 瀏覽:522
單片機實驗報告電子琴 瀏覽:744
程序員恢復微信文件代碼 瀏覽:517