pic16f887单片机GIE
时间: 2023-07-24 22:03:54 浏览: 155
PIC16F887是一款8位微控制器,具有全称为“全局中断使能”(GIE)的特性。在PIC16F887中,GIE用于启用或禁用所有中断。当GIE被启用时,所有中断都可以触发。而当GIE被禁用时,所有中断都被禁止。在编写中断服务程序时,需要注意是否启用了GIE,否则中断服务程序可能不会被执行。在C语言中,可以使用关键字“ei”和“di”来分别启用和禁用GIE。
相关问题
用PIC16F54单片机为例编写中断程序
在使用PIC16F54单片机编写中断程序时,你需要了解以下几个关键步骤:
1. **初始化中断系统**:首先,需要配置中断控制器(Interrupt Controller),比如设置中断优先级、使能相应的中断源。在PIC16F54中,INTCON寄存器用于管理中断控制。
```c
// 初始化中断
TRISB = 0; // 设置RB口为输入,作为中断触发口
INTCONbits.GIE = 1; // 启动全局中断使能
INTCONbits.RBIE = 1; // 开启RB口中断
```
2. **编写中断服务函数**:每个中断源对应的中断服务函数(Interrupt Service Routine, ISR)通常有特定的名称,例如RBIF对于RB口中断。在这个函数内部,处理接收到的中断事件。
```c
void RB_ISR(void) __interrupt() high // 高优先级中断
{
if (PORTBbits.RBIF) // 检查是否真的发生了中断
{
PORTBbits.RBIF = 0; // 清除中断标志位
// 这里放入具体的中断处理代码,如数据采集或执行操作
}
}
```
3. **外部中断事件处理**:如果中断是由外部设备产生的,如定时器溢出或串行通信接收完成等,需要相应地在主程序中配置并处理这些中断。
4. **返回主循环**:中断结束后,要记得通过`RETFIE`指令从中断上下文中返回到主程序,继续执行其他任务。
以下是一个使用 PIC16F54 单片机的 TMR0(定时器 0)的简单 C 语言程序示例
当使用 PIC16F54 系列单片机(一种常见的 8 位微控制器)时,TMR0(Timer 0)通常被用于计数、定时或生成特定频率的脉冲信号。以下是一个简单的 C 语言程序示例,展示了如何初始化 TMR0 并设置定时周期:
```c
#include <xc.h> // 包含 Microchip 驱动头文件
void setup_timer(void) {
// 初始化 Timer 0 为模式 1 (16位自动装载)
T0CON = 0b00010000; // T0CON 寄存器,M1 bit 设置为 1, G bit 清除
// 定义定时初值,例如 1s后溢出,取决于系统时钟频率
CCP0CON = 0b00000001; // CCP0CON 寄存器,设定 TOP=0x0FFF (取决于系统时钟)
// 开启 Timer 0 的溢出中断
PIE1bits.T0IE = 1;
INTCONbits.GIE = 1; // 全局中断使能
}
void main(void) {
TRISBbits.RB7 = 1; // 将 RB7 设定为输出,作为计数指示灯
setup_timer();
while(1) { // 无限循环
if(TMR0IF) { // 如果 Timer 0 发生溢出
TMR0IF = 0; // 清除溢出标志
PORTBbits.RB7 = !PORTBbits.RB7; // 刷新 LED 状态
}
}
}
阅读全文