作为一名使用PIC单片机近三十年的工程师,我最早从PIC16F87X系列起步,后来为了应对小型化、低成本的项目需求,又陆续使用了6脚、8脚、14脚等PIC单片机。
在众多PIC单片机中,PIC16F1824 和PIC12F1822 是我认为最适合入门的两个型号。
它们不仅易于上手,而且引脚兼容性极佳------PIC16F1824的1-4脚和11-14脚与PIC12F1822完全重合,这意味着在设计初期,你可以灵活替换,无需重新绘制电路板。
下图清晰展示了两款芯片的引脚对应关系


今天就以PIC16F1824为例,先从振荡器和定时器Timer1开始简单讲解
一、时钟系统: PIC 的 " 心跳 " 配置
时钟是单片机运行的基础,PIC16F1824的振荡器模块支持8种模式,适应不同场景需求:
- ECL------ 外部时钟低功耗模式
(0 MHz 至 0.5 MHz)
- ECM------ 外部时钟中等功耗模式
(0.5 MHz 至 4 MHz)
- ECH------ 外部时钟高功耗模式
(4 MHz 至 32 MHz)
-
LP------32 kHz 低功耗晶振模式
-
XT------ 中等增益晶振或陶瓷谐振器模式
(最高 4 MHz)
- HS------ 高增益晶振或陶瓷谐振器模式
(4 MHz 至 20 MHz)
-
RC------ 外部阻容 (RC)
-
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;
// 中断服务程序
void interrupt isr(void) {
if (TMR1IF) { // 判断是否为Timer1中断
TMR1L = 0xBF; // 重载定时初值(低位)
TMR1H = 0xF9; // 重载定时初值(高位)
half_sec++;
if (half_sec > 1249) { // 累计0.5秒
time_2s++; // 计数器+1
half_sec = 0;
}
TMR1IF = 0; // 清除中断标志
}
}
void main() {
// 初始化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 单片机感兴趣想学习的朋友可以关注我,免费赠送资料(包括原理图、数据手册、各种例程等)。
有需要这款开发板的朋友也可以关注联系我。
后续干货不断,咱们一起在单片机的世界里,共同进步。