说到单片机,大家第一反应可能是STM32或者51单片机,但Microchip的PIC单片机在工业控制、汽车电子、小家电这些领域其实用得非常多。PIC的优势是架构简单、抗干扰能力强、价格便宜、低功耗做得好,很多量产的消费电子产品里一颗PIC就搞定了。不过PIC的开发环境跟STM32差别比较大,新手刚上手时经常卡在环境搭建上,今天就从安装软件开始,一步步带大家跑通第一个PIC工程。
首先得选对开发工具。PIC单片机的官方IDE是MPLAB X IDE,最新版本已经到MPLAB X v6.x了,免费下载安装就行。编译器方面,8位PIC用MPLAB XC8,16位用XC16,32位用XC32,都是免费的,免费版虽然有优化等级限制,但初学者完全够用。仿真器和下载器推荐用官方的PICkit 4或者ICD 4,PICkit 4性价比高,支持大多数PIC芯片,入门用它就够了。如果不想买硬件仿真器,很多PIC芯片有Curiosity开发板,板载调试器,插上USB就能直接烧程序。
开发环境的安装顺序建议先装编译器,再装MPLAB X IDE。装编译器时记得勾选"Add to PATH",不然IDE可能找不到编译器。装好之后打开MPLAB X,新建一个Standalone Project,芯片型号要选对,比如常用的PIC16F877A或者PIC16F1829。调试工具选PICkit 4,编译器选XC8,工程名字和路径别用中文,很多老版本的工具链对中文路径支持不好,会出现莫名其妙的编译错误。
第一个工程当然是点灯了,这是单片机入门的"Hello World"。在工程里新建一个main.c文件,先写配置位(Configuration Bits),这个非常重要,PIC的时钟源、看门狗、上电延时这些都在配置位里设置,没配好的话芯片根本不运行。配置位可以直接在代码里用#pragma config写,也可以在MPLAB的Window -> PIC Memory Views -> Configuration Bits里图形化配置,然后生成代码复制到.c文件里。一般新手用内部RC振荡器就行,不用接外部晶振,省两个元件。
点灯的主程序逻辑很简单:先初始化GPIO方向,把LED对应的引脚设为输出,然后在while循环里翻转引脚电平,加个延时。PIC的GPIO操作跟51单片机不一样,要操作TRIS寄存器(方向寄存器)和PORT寄存器(数据寄存器)。比如RB0引脚接LED,就是TRISBbits.TRISB0 = 0设为输出,PORTBbits.RB0 = 1输出高电平点亮LED。延时函数可以用__delay_ms(),这个是XC8编译器内置的,只要在配置位里设对了系统时钟频率,延时时间基本是准的。
烧写程序的时候,先把PICkit 4插上电脑USB,另一端接目标板的ICSP接口(6个引脚:MCLR、VPP、VDD、VSS、PGD、PGC),注意VDD和VSS别接反了,不然烧不了甚至烧芯片。在MPLAB里点击Make and Program Device按钮,IDE会自动编译、连接仿真器、烧写程序。如果报错连接不上,先检查接线有没有问题,再看目标板有没有上电,PICkit默认是不给目标板供电的,需要在项目属性里勾选"Power Target Board From Tool",设置合适的电压(一般5V或3.3V)。
调试时常用的几个技巧:一个是断点调试,在代码行号旁边点击可以加断点,运行Debug Project后程序会停在断点处,查看变量值和寄存器状态。另一个是Watch窗口,把关心的变量加进去,实时观察数值变化。还有是Simulator仿真模式,如果手头没有硬件,可以把调试工具改成Simulator,在软件里模拟运行,看GPIO的输出状态,适合先验证逻辑再上板。PIC的开发流程跟其他单片机大同小异,主要是熟悉MPLAB的操作和寄存器命名习惯,跑通一两个项目之后就上手了。