作为一名使用PIC单片机近三十年的工程师,我最早从PIC16F87X系列起步,后来为了应对小型化、低成本的项目需求,又陆续使用了6脚、8脚、14脚等PIC单片机。
在众多PIC单片机中,PIC16F1824和PIC12F1822是我认为最适合入门的两个型号。
它们不仅易于上手,而且引脚兼容性极佳——PIC16F1824的1-4脚和11-14脚与PIC12F1822完全重合,这意味着在设计初期,你可以灵活替换,无需重新绘制电路板。
下图清晰展示了两款芯片的引脚对应关系
今天就以PIC16F1824为例,先从振荡器和定时器Timer1开始简单讲解
一、时钟系统:PIC的“心跳”配置
时钟是单片机运行的基础,PIC16F1824的振荡器模块支持8种模式,适应不同场景需求:
1. ECL——外部时钟低功耗模式
(0 MHz至0.5 MHz)
2. ECM——外部时钟中等功耗模式
(0.5 MHz至4 MHz)
3. ECH——外部时钟高功耗模式
(4 MHz至32 MHz)
4. LP——32 kHz低功耗晶振模式
5. XT——中等增益晶振或陶瓷谐振器模式
(最高4 MHz)
6. HS——高增益晶振或陶瓷谐振器模式
(4 MHz至20 MHz)
7. RC——外部阻容(RC)
8. INTOSC——内部振荡器(31 kHz至32 MHz)
配置方法:通过FOSC<2:0>(配置字1)选择时钟源。我个人最常用的是HS模式(外接晶振)和INTOSC模式(内部振荡器),后者无需外接元件,特别适合对成本敏感的小型项目。
下面以内部振荡器16MHz为例给出配置字和振荡器控制寄存器的赋值
#include<pic16f1824.h>
__CONFIG(0x083c); //选内部振荡器,配置位是2-0位,100是内部振荡器(最高32M),010是外部高速振荡器(最高20M)
void main()
{
OSCCON=0x78; //内部时钟16MHZ
//其他初始化
}
二、Timer1:16位定时器应用
Timer1是PIC中常用的16位定时器/计数器,可用于定时、计数或捕获功能。以下是一个完整的中断式定时示例,实现每0.5秒计数一次(16M主频),具体配置及程序如下:
#include<pic16f1824.h>
__CONFIG(0x083c);
unsigned int half_sec,time_2s;
//中断服务程序
voidinterruptisr(void){
if(TMR1IF){//判断是否为Timer1中断
TMR1L=0xBF;//重载定时初值(低位)
TMR1H=0xF9;//重载定时初值(高位)
half_sec++;
if(half_sec>1249){//累计0.5秒
time_2s++;//计数器+1
half_sec=0;
}TMR1IF=0;//清除中断标志
}}voidmain(){
//初始化I/O
TRISA=0x1A;
TRISC=0x0C;
PORTA=0x00;
PORTC=0x03;
//外设功能选择
APFCON0=0x84;//设置RA0为TX,RA1为RX
//模拟输入关闭(除指定引脚)
ANSELA=0x10;
ANSELC=0x00;
PIE1=0x01;
INTCON=0x40;//使能外围中断
OSCCON=0x78;//内部时钟16MHz
//以下为Timer1配置
T1CON = 0x60;//预分频器设为1:4,Timer1关闭
TMR1IF = 0;TMR1L = 0xBF;//定时初值
TMR1H = 0xF9;
TMR1IE = 1;//使能Timer1中断
T1CON |= 0x01;//启动Timer1
GIE=1;//全局中断使能
while(1){
//主循环,可加入其他任务
}}三、本系列文章规划
本文是《PIC单片机入门实战》系列的第一篇,后续将逐步展开以下内容,带你从零构建一个完整的嵌入式控制系统:
序号 | 主题 | 内容概要 |
1 | 振荡器与Timer1 | 时钟配置与定时中断 |
2 | I/O输出控制 | 驱动2路继电器与4路LED |
3 | I/O按键输入 | 3路按键扫描与电平变化中断 |
4 | UART通信 | RS232/RS485数据交互 |
5 | A/D转换应用 | 1路电位器电压读取 |
6 | 温度传感器采集 | 1路DS18B20输入 |
7 | EEPROM存储 | 数据存储与读取 |
8 | MODBUS-RTU集成 | 功能码01/03/05/06数据读写 |
《PIC单片机入门实战》这8片文章内容来源于我自己画的电路原理图及程序,有对PIC单片机感兴趣想学习的朋友可以关注我,免费赠送资料(包括原理图、数据手册、各种例程等)。
有需要这款开发板的朋友也可以关注联系我。
后续干货不断,咱们一起在单片机的世界里,共同进步。