本帖最后由 倪大德 于 2011-1-13 08:41 编辑  
 
      一些初涉PIC单片机的朋友,面对林林总总的不同系列各种型号,觉得无从下手,恐怕三分钟热血后,初始的兴趣也会消耗殆尽。其实和AVR,51芯片一样,贵在坚持,入门不难。 有幸得到几片PIC12F675,DIP8封装。看似简单,但是:“麻雀虽小,五脏齐全”。在12系列中,如果说PIC12F629是基本级的话,PIC12F675即为中档级。(虽只是多了几路AD,但 芯片可玩性大大增加).最近做了些小实验,以后将玩所得,慢慢和大家分享!共同学习!  
 由于12f675引脚有限,实验板也极其简洁。简简单单的焊上几根线,就可做实验。图一是网友自制的实验板,戏称“最小的单片机实验系统”。   
 
 
 
    ***************提示:以下内容较长,但很重要****************        个别初玩PIC12F675的朋友。常有这样疑问:不知为什么?下载了已成熟的实验程序,就是运行不了。 于是到处发贴求助。而结果往往无人作答。不知道的想知道,知道的也不告诉你。。。。。! 其实不是不愿意告诉你,有些问题,看似简单,但却是一时很难说得清,道得明。如果你化时间仔细阅读PIC12F675手册。也许就不是问题。。。。。。  玩任何一种单片机,化些时间读一读对应的手册,也许一切问题就会迎刃而解!       一. 关于12F675 振荡器校准值        由于12F675引脚有限,一般应用以选择内部晶振,(可以多二个IO口)但由于工艺原因,各芯片会有差异。实际应用时必须进行校正,工厂在芯片出厂前,已将振荡器校准设置值写入到最后一个程序内存位置。        由于此校准值是在正常的程序内存区域,而一般下载程序是先中是先擦除再写入,初用12F675如不仔细地阅读手册,就可能擦除芯片的振荡器校准设置值。因此后果很严重,这样内部 4 Mhz 振荡器不会在正确的频率运行。更糟的是,有可能导致程序代码下载后无法正常运行,全面崩溃。         虽有的烧写软件有此保护。  虽在程序中,可专门写入一保护校验值的代码,但不一定每个编程员的都会这么做!        因此还是要养成习惯:在烧录程序时,一定要先读出本芯片的振荡器校准设置值。以便保存好! 
 正确的方法是: 1. 
在应用前一定要先用软件读出校准设置值。  
 2. 
然后下载程序时将其和该写入的 PIC 的程序数据合并,一并写入芯片中。  
 3.查找地址 0x3FF 的最后程序内存位置,见下图2  
 如下面的屏幕转储中的红色带圆圈条目。请记下在此地址的十六进制值。 0X348C 
10001100 
 
 
 
 
 
 如何让每个芯片校准设置值获得永久标记,觉得一些国外的PIC玩家的方法十分可取。  
 1.先读出校准值。  
 2.再将其转换为二进制数。  
 在此示例中 8 C 二进制文件是 10001100。    3.12F675刚好是8引脚,以1脚为高位,按顺时针方向做标记, 如图3。  
 
 
  
对于一些校验值已擦除的芯片。想恢复可以参照如下方法:  
请参阅:http://ledchasers.co.uk/projects/recal/recal.htm#PIC_code_for_recalibration  
 
二.关于PIC12F675的烧录       现在的版本很多,比较简单的可以可参阅 电子制作10-3期自制 
 
 
 
 
 三.关于配置位  
有的程序没有写配置位,下载后,也是程序运行出错的原因之一。  
初涉PIC的朋友经常碰到配置位的问题,总感觉手动设置配置位非常麻烦,而且容易出错。   
 
本人习惯于在源程序中设定配置位,这样编译后,无论是用什么烧写工具,都不需要再进行配置位的设定了。更重要的是便于程序移植!
  
有关配置位的内容, 可参阅按装文件C:\HT-PIC\include 打开找到的pic12rf675文件。摘录如下。  
#define CONFIG_ADDR 
0x2007
 // Bandgap Calibrations  #define BGHIGH 
0x0x3FFF #define BGLOW 
0x0x0FFF // Protection of data block  #define UNPROTECT 
0x3FFF #define CPD 
0x3EFF // Protection of program code  #define UNPROTECT 
0x3FFF #define PROTECT 
0x3F7F // Brown out detection enable  #define BOREN 
0x3FFF #define BORDIS 
0x3FBF // Memory clear enable  #define MCLREN 
0x3FFF #define MCLRDIS 
0x3FDF // Power up timer enable  #define PWRTDIS 
 
0x3FFF #define PWRTEN 
0x3FEF // Watchdog timer enable  #define WDTEN 
0x3FFF #define WDTDIS 
0x3FF7 // Oscillator configurations  #define RCCLK 
0x3FFF #define RCIO 
0x3FFE #define INTCLK 
0x3FFD #define INTIO 
0x3FFC #define EC 
0x3FFB #define HS 
0x3FFA #define XT 
0x3FF9 #define LP 
0x3FF8  
 
说明:  
1. 
以上仅是个人观点,有些资料源于网上。  
2. 
欢迎大家共同学习,交流!  
 3.下次将介绍简洁的电压电流表的制作! 
 
 
 
      
  
 
 
  
  
    |