提到单片机入门,大部分人想到的都是51或者STM32,PIC好像是个"非主流"选项。但PIC单片机在工业控制、汽车电子、家电这些领域其实用得非常多,特点是抗干扰能力强、可靠性高、外设简单实用。而且Microchip的产品线全,从8位的PIC10/12/16/18系列到16位的PIC24/dsPIC,再到32位的PIC32,覆盖了从低成本到高性能的各种需求。今天就聊聊PIC单片机的入门,从开发环境到第一个点灯程序,手把手教你踩过PIC的坑。
首先是开发环境的搭建,PIC用的是Microchip官方的MPLAB IDE,现在最新版本是MPLAB X(基于NetBeans改的),编译器有免费的XC8(8位)、XC16(16位)、XC32(32位),Free版本虽然优化等级有限,但入门完全够用。安装过程不复杂,从Microchip官网下载MPLAB X和对应的XC编译器,一路下一步装完就行。然后需要一个仿真器/下载器,入门推荐PICkit 3或PICkit 4,便宜好用,支持在线调试和烧录;如果做工业量产,可以用ICD 4或者PM3。
MPLAB X的界面跟Keil、IAR差别挺大的,第一次用可能不太习惯。新建项目的流程是这样的:File→New Project→Standalone Project,然后选择芯片型号(比如最经典的PIC16F877A),选择工具(PICkit 4),选择编译器(XC8),给项目起个名字。新建完成后,在Source Files上右键→New→C Main File,就会生成一个带main函数的c文件模板。MPLAB X有个习惯要注意:项目配置(芯片型号、仿真器、编译选项)是保存在项目里的,不是全局的,切换项目时会自动跟着切,这点比Keil方便。
PIC16F877A的IO口操作跟51单片机不太一样。PIC的IO口有两个相关寄存器:TRISx寄存器是方向寄存器,写1表示输入,写0表示输出;PORTx寄存器是数据寄存器,输出时写1就是高电平,写0就是低电平,输入时读这个寄存器就是引脚的电平状态。举个例子,要让RC0口输出高电平,代码就是:TRISCbits.TRISC0 = 0; // 设为输出;PORTCbits.RC0 = 1; // 输出高。要读RB0口的状态,就是:TRISBbits.TRISB0 = 1; // 设为输入;if(PORTBbits.RB0 == 1) { ... }。这种分开的寄存器结构刚开始觉得麻烦,但用习惯了逻辑其实很清晰。
写第一个点灯程序,把一个LED接在RC0引脚(通过限流电阻接LED到地)。完整代码结构大概是这样的:首先#include
调试的话,把PICkit 4接到板子的ICSP接口(6个引脚:VPP、VDD、VSS、PGD、PGC),点击MPLAB X上的Debug Project按钮,就会编译、烧录、进入调试模式。调试界面可以设断点、单步运行、看寄存器和变量的值,跟其他IDE差不多。PIC入门常见的几个坑:第一,配置位没设对,尤其是时钟源,芯片没有时钟肯定不跑;第二,MCLR引脚的处理,有的PIC芯片MCLR脚是复用的,要设为复位模式或者禁用,不然芯片一直处于复位状态;第三,上电延时,PIC的IO口上电后需要一点时间才能稳定,建议初始化后加个小延时再操作IO。总的来说,PIC的外设设计比较简洁直接,没有STM32那么多寄存器要配,入门反而容易上手,做些简单的控制项目非常合适。
上一篇:Protel99SE元件库制作教程:老工程师分享的原理图库与PCB封装库实战技巧
下一篇:没有了