PIC16F1823 笔记

文档:PIC16F1823.PDF

引脚图:

 

端口:

每个端口都有三个用于工作的标准寄存器。这些寄存器是:

TRISx 寄存器 (数据方向
PORTx 寄存器 (读取器件引脚的电平
LATx 寄存器 (输出锁存器

这些端口可能具有以下一个或多个额外的寄存器。这些寄存器是:

ANSELx模拟选择
WPUx弱上拉
INLVLx输入级控制

PORTA 是一个 6 位宽的双向端口。对应的数据方向寄存器是 TRISA。将 TRISA 某位置 1(= 1) 时,会将 PORTA 的相应引脚设为输入 (即,禁止输出驱动器)。将 TRISA 某位清零(= 0)时,会将 PORTA 的相应引脚设为输出(即,使能输出驱动器并将输出锁存器中的内容输出到选定的引脚)。 RA3 是个例外,它仅可作为输入引脚,其 TRIS 位总是读为 1。

 

振荡器模块:

振荡器模块可配置为以下 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)

时钟模式通过配置字1中的 FOSC<2:0> 位进行选择。

#pragma config FOSC = INTOSC

可通过设置 OSCCON 寄存器进行晶振频率设置

/*
* 晶振频率
* 125KHZ OSCCON = 0X28;
* 250KHZ OSCCON = 0X30;
* 500KHZ OSCCON = 0X38;
* 1MHZ OSCCON = 0X58;
* 2MHZ OSCCON = 0X60;
* 4MHZ OSCCON = 0X68;
* 8MHZ OSCCON = 0X70;
* 16MHZ OSCCON = 0X78;
*/

指令周期时间计算

例如,晶振频率为16MHZ,时钟周期即为 1/16MHZ,一条指令消耗4个时钟周期,即 1/16MHZ*4,结果为0.25us。晶振为125KHZ,指令周期为32us。

中断:

工作原理:

1)全局中断允许位 GIE 置1
2)设置特定中断事件的中断允许位
3)调用中断服务程序(ISR),通过判断中断标志位确认中断源

中断服务程序示例:(所有中断通过该入口)
void interrupt ISR() {
···
}

XC8 V2编译器中断服务程序已变更为:
void __interrupt() ISR() {
···
}

注:无论中断允许位状态如何,各中断标志位都会在中断发生时置 1,但如果没有设置中断允许位,则不会产生中断。

电平变化中断(只适用于 PORTA 寄存器):

电平变化中断允许位 IOCIE
电平变化中断标志位 IOCIF (反应所有引脚中断状态)
引脚上升沿检测位 IOCAPx
引脚下降沿检测位 IOCANx
引脚状态标志位 IOCAFx (反应对应引脚中断状态)

 

定时器/计数器:

TMR0 寄存器从 FFh 上溢到 00h 时,将产生 Timer0 中断
TMR0中断允许位 TMR0IE
TMR0 中断标志位 TMR0IF
TMR0 启动值设置 TMR0

预分频 OPTION_REG

初始值计算方法:

1、设置延时的时间 T

2、计算指令周期所用的时间 = 消耗N个时钟周期(单片机不同,N值也不同)

3、计算 T 所需要的指令周期数量M =  T/ 指令周期所用的时间

4、计数模块在每个指令周期递增,所以需要M个递增后延时产生中断

5、M = T / {(1/晶振频率F)*N},简化 M = T*F/N

6、PIC16 一个指令周期包含4个时钟周期,即 N = 4

7、初始值 TMR0 = 0xFF – M

TMR1 寄存器从 FFFFh 上溢到 00h 时,将产生 Timer1 中断
TMR1中断允许位 TMR1ON
TMR1中断允许位 TMR1IE
TMR1 中断标志位 TMR0IF
PEIE 也要设置
TMR1 初始值设置 TMR1H、TMR1L

SPI 通信

串行外设接口(SPI)总线是以全双工模式工作的同步串行数据通信总线。器件在由主器件启动通信的主 / 从器件环境中进行通信。从器件通过称为从选择的片选进行控制。

SPI 总线规定了4 种信号连接:
1、串行时钟 (SCK)
2、串行数据输出 (SDO)
3、串行数据输入 (SDI)
4、从选择 (SS)

正确初始化I/O端口数据方向
SDI 必须将相应的TRIS 位置1 SDI是MISO,指主器件数据输入,从器件数据输出
SDO 必须将相应的TRIS 位清零 SDO是MOSI,指主器件数据输出,从器件数据输入
SCK (主模式)必须将相应的TRIS 位清零
SCK (从模式)必须将相应的TRIS 位置1
SS 必须将相应的TRIS 位置1(从器件)