导航:首页 > 编程语言 > 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编程相关的资料

热点内容
javajpgtiff 浏览:869
忻奇医用静脉曲张压缩袜 浏览:892
宁国压缩泡沫板 浏览:955
速8属于什么app 浏览:604
小米8手机照片视频文件夹 浏览:716
现代制造技术pdf 浏览:652
winftp命令大全 浏览:930
海南超市送货有什么app 浏览:576
迷你编程怎样切换账号 浏览:754
网络工程师ping命令 浏览:152
手机迅雷怎么下载解压视频 浏览:57
java多线程编程总结 浏览:872
什么app拍视频的时候可以修腿 浏览:811
什么app跨国转账 浏览:119
空调小压缩机贴大标签 浏览:696
冰冻压缩牛肉 浏览:499
菜鸟的服务器是什么 浏览:815
战地1日本服务器地址 浏览:726
有没有什么app看佛法的 浏览:789
建筑结构与选型pdf 浏览:409