PIC单片机在工控领域用得挺多,特别是一些对稳定性要求高的场合,比如电机驱动、仪器仪表、汽车电子。学PIC通常有两个路线:汇编和C语言。新手入门建议直接上C,开发效率高,移植性好,不用死磕那些枯燥的指令周期。
开发环境首推Microchip官方的MPLAB X IDE,配上XC系列编译器。MPLAB X是基于NetBeans的跨平台IDE,Windows、Linux、macOS都能装,界面跟Eclipse类似,左边工程视图,中间编辑器,下面输出窗口。XC8是8位PIC的C编译器,XC16对应16位PIC,XC32对应32位PIC。个人学习用可以下免费版,功能上够用。
安装完MPLAB X之后,新建工程的流程是:File→New Project→Microchip Embedded→Standalone Project,选好芯片型号(比如PIC16F877A)和调试工具(如果是仿真器就选Pickit、ICD3这些,如果是纯烧录就选Pickit3、Pickit4)。XC编译器要单独装,MPLAB X不会自动带上。装完后IDE会自动识别,编译的时候调用的就是它。
PIC单片机的C语言跟标准C有点小差异,主要是寄存器定义和位操作。每个外设都有对应的头文件(比如pic16f877a.h),里面定义了所有寄存器的名字和位名。比如TRISB=0x00表示把B口全部设为输出,PORTB=0xFF表示B口全部输出高电平。位操作可以用RB0=1这样的写法,也可以用位域。头文件里这些都给你定义好了,直接用就行。
时钟配置是PIC编程的第一个坎。PIC16系列可以用内部振荡器或者外部晶振。内部RC振荡器精度不高,但省成本,工厂校准后误差大概±1%。外部晶振精度高,但要多两个引脚。在Config Bits(配置字)里设置,一般用IDE图形界面配置就行,不用手动算寄存器值。常见的频率是4MHz、8MHz、20MHz,看芯片支持范围。
写第一个程序通常就是跑马灯,控制LED轮流闪烁。代码很简单:先把IO口方向寄存器TRISB设为0(输出),然后在一个死循环里给PORTB赋不同的值,每个状态之间用延时函数隔几百毫秒。延时可以用编译器自带的__delay_ms()宏,前提是在工程里定义了时钟频率(_XTAL_FREQ)。比如__delay_ms(500)就是延时500毫秒。
代码示例大致长这样:TRISB=0x00;while(1){PORTB=0x01;__delay_ms(500);PORTB=0x02;__delay_ms(500);PORTB=0x04;__delay_ms(500);PORTB=0x08;__delay_ms(500);}如果B口接了4个LED,就会看到它们依次亮灭循环。这种入门程序熟悉了之后就可以加按键、串口、PWM这些。
烧录工具方面,入门最方便的是Pickit3或者Pickit4,价格一两百块,能烧能仿真。烧录就是把编译生成的HEX文件写进单片机的Flash里。仿真更高级,可以单步执行、设断点、看变量值,适合调试复杂的程序逻辑。如果是做产品量产,用编程器批量烧录效率更高。
常见坑:XC8对C语言标准支持不算完整,有些写法会报警告。比如指针操作、递归调用、动态内存分配这些,用得不好可能编译不过或者跑飞。PIC的栈深度也有限(8级或16级,看芯片),函数嵌套不能太深。学习的时候多看芯片数据手册,特别是中断向量、特殊功能寄存器、中断优先级这几章,写高级程序绕不开。
PIC的学习资料推荐Microchip官方的数据手册和应用笔记(AN文档),写得详细又权威。中文教材可以看《PIC单片机C语言编程入门与实战》这类入门书。再进阶可以学MCC(Microchip Code Configurator)插件,图形化配置外设,自动生成初始化代码,效率高很多。MPLAB X现在还集成了Harmony框架,适合做复杂项目的快速原型。
总的来说,PIC单片机C语言开发门槛不算高,关键是搭好环境、熟悉寄存器、动手写代码。从跑马灯开始,到按键扫描、数码管显示、串口通信、PWM调光,一步一步积累。等基础打牢了,再去碰USB、以太网、CAN这些高级外设,做一些有意思的项目就不难了。
上一篇:百兆宽带为什么下载只有10MB/s?带宽、网速、单位的那些坑
下一篇:没有了