PIC单片机在嵌入式圈子里算是个老前辈了,比51单片机出道晚几年,但当年因为RISC架构精简、功耗低、抗干扰强,在工业控制、汽车电子、家电领域用得很广。今天虽然STM32、ESP32这些新势力风头更劲,但学一下PIC还是有价值的——它的开发思路和51、AVR一脉相承,掌握了PIC再学其他单片机也快。
PIC单片机的型号多到让人头晕,但其实分清楚几个家族就行:PIC10/12/16是8位基础型,引脚8-28个,适合简单控制(比如家电控制、玩具);PIC24和dsPIC是16位,中等性能,适合电机控制、信号处理;PIC32是32位,基于MIPS内核,性能接近ARM Cortex-M,适合复杂应用。新手入门建议从PIC16F877A或者PIC18F452这种经典型号开始,资料多、外围模块丰富、价格便宜(几块钱一片)。
开发环境的搭建是第一步。MPLAB X是Microchip官方的IDE(基于NetBeans),免费但体积大(几个G),启动慢。MPLAB Xpress是云端IDE,免安装但功能少。还有第三方IDE比如MPLAB IDE v8(老版本,但很多老工程师还在用)。编译器选XC8(8位PIC)、XC16(16位PIC)、XC32(32位PIC),都是免费的,有专业版和免费版,免费版有些优化限制但学习够用了。
硬件方面,需要准备:PIC开发板(淘宝几十块钱一大堆),或者最小系统板+下载器。下载器有PICkit 3、PICkit 4、PICkit 5,新手用PICkit 3就够用,二手几十块钱。注意下载接口是6 pin的排针,定义是MCLR、VPP、SDO、SDI、SCK、GND,接错可能烧芯片。
写第一个程序之前,要理解PIC的几个特点。PIC的寄存器分Bank0到Bank3(不同型号可能不一样),访问Bank1的寄存器要先设置BSR寄存器,这是PIC特有的"分页"机制,新手容易在这里踩坑。还有PIC的指令集是精简的,每条指令固定14位宽(16位指令),指令周期是4个时钟周期,所以同样晶振频率下执行速度比51慢(51是12个时钟周期一条指令)。
点亮LED的代码很简单,几乎所有PIC教程的第一个程序都是它。硬件上把LED正极通过限流电阻(比如330Ω)接到VDD,负极接到单片机引脚(比如RB0),让单片机输出低电平点亮LED。代码方面,先配置TRISB寄存器(把RB0设为输出),再清零PORTB的RB0位(输出低电平)。编译、运行,LED就亮了。这是嵌入式开发的"Hello World"。
配置字(Configuration Bits)是PIC特有的,必须在代码里设置,否则单片机可能不按预期工作。比如振荡器选择(内部RC还是外部晶振)、看门狗使能、低电压复位使能、上电延时定时器等。配置字一般用#pragma config语句设置,IDE会弹出图形界面帮助配置。如果程序莫名其妙不运行,先检查配置字是不是设错了。
IO口操作是基础。PIC的IO口有方向寄存器(TRISx,控制输入还是输出)和数据寄存器(PORTx,读引脚状态或者控制输出)。读引脚要读PORTx寄存器,写输出要写LATx寄存器(或者PORTx,但写LATx是推荐的,不会出现读-修改-写的问题)。比如点亮LED:TRISBbits.TRISB0 = 0; LATBbits.LATB0 = 0; 熄灭:LATBbits.LATB0 = 1; 非常简单。
延时函数是用定时器还是循环?新手一般用循环延时(比如for循环空转),简单但精度差,受中断影响。最规范的做法是用定时器中断。PIC16F877A的Timer0是8位定时器,可以设置预分频(1:2到1:256),配置好后开启中断,每隔一段时间进一次中断服务程序,在中断里维护一个计数器,就能实现精确延时。定时器时钟 = 指令时钟 / 预分频系数,1个tick的时间是已知的。
串口通信是PIC学习的重要一环。PIC16F877A有USART模块,可以配置成异步串口(RS232/RS485)。配置步骤:设置波特率寄存器SPBRG(根据晶振频率和波特率计算值)、配置TXSTA和RCSTA寄存器、使能发送和接收、设置中断。串口发送数据用TXREG寄存器,接收用RCREG寄存器。中断方式比轮询方式更高效,建议新手从中断方式学。
调试程序是每个嵌入式工程师的必备技能。MPLAB X内置调试器,配合PICkit可以单步执行、设置断点、观察寄存器和变量。新手调试程序时,建议先在仿真器(Simulator)里跑通逻辑,再用真机调试。仿真器能模拟单片机运行,调试IO口、定时器、中断都很方便,比直接烧片快得多。
常见问题排查:程序烧不进去?检查MCLR引脚电压(应该是VDD)、检查下载器连接、降低烧录速度试试。程序不运行?检查配置字(特别是看门狗、上电延时、振荡器选择)、检查电源电压是否稳定、检查晶振是否起振。LED不亮?检查IO口方向寄存器、检查限流电阻、检查LED极性、用万用表量引脚电压。
最后想说的是,PIC虽然老,但它的学习路径很适合新手——资料多、价格便宜、调试方便。等你学完PIC再去看STM32,会发现很多概念是通用的(寄存器配置、中断、定时器、串口),只是STM32功能更强大、寄存器更多而已。嵌入式学习是循序渐进的过程,把一个单片机学透,比泛泛接触十种单片机有价值得多。
上一篇:单片机最小系统电路图解析:从晶振到复位电路的设计要点
下一篇:没有了