本帖最后由 倪大德 于 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.下次将介绍简洁的电压电流表的制作!
|