新闻  |   论坛  |   博客  |   在线研讨会
PIC开发笔记1 转载
笨笨的世界 | 2014-01-02 15:02:26    阅读:1931   发布文章

PIC开发笔记

前一阵说要写的,最近这几天不是很忙。抽时间写了一下。最近在整ARM7,过一阵再写个LPC23XX系列的开发笔记。

首先说一下 Microchip的datasheet的问题,各个寄存器都没给出复位后的值。这是一个让人很难受的事情。

 

关于硬件设计:

       PIC的硬件设计很简单,其实比51还简单。可以选择内部或外部的晶振。管脚分配比较自由,所有的外设功能都能随意分配到RPn上。烧写电路是必须的,烧写电路有5个管脚和ICD相连。分别是MCLR、VDD、GND、PGDx、PGCx.

其中PGDx和PGCx可以选择任意一个组合,只要x值相同即可。

 

关于振荡器:

有4个振荡源:主振荡器、FRC振荡器、LPRC振荡器、辅助振荡器。

最常用的是主振荡器和FRC振荡器。主振荡器为外接的晶振、如果对振荡精度要求不高的话则使用内部振荡器(FRC振荡器)。

       举一个内部振荡器的例子。FRC振荡器的输出为8MHz。然后经过一个可设置的后分频器,一个可选择的4×PLL,最后到达CPU。

       值得一提的是,PIC的一个指令周期是两个CPU时钟输入周期。定时器在分频器前端的频率也是同样。

 

关于配置字:

       配置字命令属于伪指令,在C语言中,需写在main函数开始之外。PIC24FJXX有两个配置字:配置字1和配置字2。他们的复位值为0xFFFF。配置字1可以配置JTAG、看门狗、仿真器(注意不是编程器)引脚选择等功能。配置字2主要配置的是时钟源和PLL倍频。

       下面给出一个我使用的配置命令

 

_CONFIG1(WDTPS_PS512 & JTAGEN_OFF & GCP_ON & GWRP_ON);  //内部看门狗设置&关闭JTAG

_CONFIG2(FNOSC_FRCPLL);                                                  //FRC_PLL*4

 

初次使用PIC不建议使用内部看门狗,不熟悉时莫名其妙的复位会使人很抓狂。

可以使用下面的配置命令

 

_CONFIG1(FWDTEN_OFF & JTAGEN_OFF & GCP_ON & GWRP_ON)

_CONFIG2(FNOSC_FRCPLL);                                                  //FRC_PLL*4

 

关于IO口:

       在使用IO口之前,需要将相应的管脚配置为数字模式。因为带有ANX的管脚默认的功能选择都是AD转换。这一点跟大多数处理器外设功能选择都不一样。很多刚接触PIC的人都会遇到这个问题。在datasheet中,在AD转换章节的某一个角落才介绍了这个几乎每个人都会遇到的问题,真不明白编写手册的人是怎么想的。

       关于IO的寄存器有以下:

TRISx是输入输出选择寄存器。0为输出、1为输入。很好记,0很像O,Output;1很像I,Input。

PORTx是引脚寄存器。

LATx是锁存器寄存器。

ODCx是数字开漏选择寄存器。0代表正常的数字输出;1代表OD门输出。

很多人搞不懂PORTx和LATx的区别,其实不用搞懂。只要记住下面一句话就好。采集的时候读PROTx寄存器,输出的时候写LATx寄存器。不然的话在高速的IO时,会出现一些奇怪的错误。

IO口功能配置:PIC的管脚外设功能配置很不一样。输入和输出功能配置截然不同。输入的配置是将输入映射到功能,即在固定功能的寄存器写入管脚的编号。与输入相反,输出是在固定管脚的寄存器写入功能的编号。

 

关于中断:

PIC的中断并没有太麻烦的地方。先将关于中断的寄存器进行配置使能之类的。然后遇到中断的条件,程序就会跑进去了。

在MPLAB C30环境中,中断的向量名是已经被定义好的。可以在相关的文档中查询(MPLAB C30  C编译器用户指南)。

举个例子:void _ISR _T2Interrupt();就是timer2的中断函数声明。

 

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
记录我的成长。。。
最近文章
芯片的信号输入管脚
2018-07-10 16:07:06
ICD3驱动更新
2018-02-23 14:30:36
串口的数据接收问题
2016-11-14 14:24:54
推荐文章
最近访客