PIC单片机高阶实战(三):PIC32MX电平变化中断输入

作为一名使用PIC单片机近三十年的工程师,我最早从PIC16F87X系列起步,逐步深入至更集成、功能更丰富的型号。在智慧农业、工业控制等实际项目中,PIC32MX 系列 是我频繁使用的核心芯片。其丰富的外设与六串口设计,非常适合构建多通道通信与控制系统。本次我将以一款实际投产数年的核心控制板为例,控制板MCU型号为PIC32MX534F064H,讲解一下I/O输入电平变化中断。

该控制板集成了以下6大功能:

1、2路RS485数据收发(可接LED屏、各种传感器、或与其他控制板通信);

2、1路UART-TTL(可接摄像头等);

3、1路4G模块数据收发(移远或中移4G模块);

4、1路LORA无线数据收发或RS485数据收发;

5、2路无源开关量输入;

6、太阳能供电(带充电管理)或直流电源直接供电;

一、硬件电路 与库函数:

Key1、key2分别接电平变化中断管脚CN0、CN1,PIC32MX系列的编译软件自带库函数,只需要配置参数即可。

电平变化函数:

mCNOpen(CN_ON | CN_IDLE_CON, CN0_ENABLE|CN1_ENABLE,CN0_PULLUP_ENABLE|CN1_PULLUP_ENABLE);

有多个中断则再或即可,示例如下:

mCNOpen(CN_ON | CN_IDLE_CON, CN0_ENABLE|CN1_ENABLE|CN11_ENABLE,CN0_PULLUP_ENABLE|CN1_PULLUP_ENABLE|CN11_PULLUP_ENABLE);

二、 电平变化中断 例程

PIC单片机输入输出寄存器的控制字设置与其他如MSP430系列单片机不一样,一般其他系列单片机某一I/O口输出置1、输入置0;PIC则相反,输出置0、输入置1,你可以把0想成O(对应OUT),把1想成I(对应IN),这样会不容易设置错。

具体配置及程序如下:

#include<p32mx534f064h.h>

复制代码
#pragma config FPLLMUL=MUL_20,FPLLIDIV=DIV_2,FPLLODIV=DIV_1,FWDTEN=OFF
复制代码
#pragma config POSCMOD=HS,FNOSC=PRIPLL,FPBDIV=DIV_1
复制代码
复制代码
#define SYS_FREQ                          (80000000L) //80M主频
复制代码
复制代码
void delay(unsigned int a)
复制代码
               {
复制代码
               int i,j;
复制代码
               for(i=0;i<a;i++)
复制代码
                               for(j=0;j<100;j++)
复制代码
                                              ;
复制代码
               }
复制代码
复制代码
void main() {
复制代码
unsigned int i,j; 
复制代码
                               AD1PCFG=0XFFFF;
复制代码
                               
复制代码
                               TRISB=0x0180;
复制代码
               
复制代码
                               PORTB=0x0000;
复制代码
                               TRISC=0X6000;
复制代码
                               PORTC=0x0000;
复制代码
                               TRISD=0x0204;
复制代码
                               PORTD=0x0000;
复制代码
                               TRISE=0x0000;
复制代码
                               PORTE=0x0000;
复制代码
                               TRISF=0x0010;
复制代码
                               PORTF=0x0000;
复制代码
                               TRISG=0x0280;
复制代码
                               PORTG=0x0000;
复制代码
                               DDPCON = 0x00 ;  //关闭EJTAG口,
复制代码
                               OSCCON&=0xfffd;
复制代码
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
复制代码
ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_5 | T1_INT_SUB_PRIOR_1);
复制代码
INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
复制代码
mCNOpen(CN_ON | CN_IDLE_CON, CN14_ENABLE,CN14_PULLUP_ENABLE);
复制代码
j = mPORTGRead();
复制代码
ConfigIntCN(CHANGE_INT_ON | CHANGE_INT_PRI_3); //电平变化中断使能
复制代码
//其他初始化
复制代码
INTEnableInterrupts();
复制代码
                           OpenTimer1(T1_ON | T1_PS_1_1 | T1_SOURCE_INT,4000); //分频设置为1
复制代码
复制代码
    while(1) {
复制代码
        // 主循环,可加入其他任务
复制代码
    }
复制代码
}
复制代码
void __ISR(_TIMER_1_VECTOR, ipl3) _Timer1Handler(void) //Timer1中断子程序
复制代码
复制代码
{
复制代码
复制代码
 //      DisableIntT1;
复制代码
复制代码
       
复制代码
                               
复制代码
复制代码
复制代码
//       EnableIntT1;
复制代码
复制代码
}
复制代码
void __ISR(_CHANGE_NOTICE_VECTOR, IPL3SOFT) ChangeNotice_Handler(void)
复制代码
{
复制代码
               unsigned int temp;
复制代码
复制代码
   
复制代码
               temp = mPORTCRead(); //先读电平变化的I/O口
复制代码
               
复制代码
               //temp = mPORTGRead();
复制代码
//在此加入程序判断是哪个I/O口电平变化,
复制代码
    mCNClearIntFlag(); //清电平变化标志,
复制代码
复制代码
    
复制代码
}
三、本系列文章规划

本文是《PIC单片机高阶实战》系列的第一篇,后续将逐步展开以下内容:

|----|-------------------|-----------------|
| 序号 | 主题 | 内容概要 |
| 1 | 振荡器与定时器 | 时钟配置与定时中断 |
| 2 | UART 通信 | 串口配置、波特率转换、数据透传 |
| 3 | I/O 按键输入 | 电平变化中断 |
| 4 | 4G 模块数据收发 | AT指令控制、4G模块数据透传 |
| 5 | 数据存储 | 数据存储与读取 |

PIC 单片机入门实战》共 8 篇文章与《 PIC 单片机进阶实战》共 6 篇文章与《 PIC 单片机高阶实战》 5 篇内容来源于我自己画的电路原理图及程序,有对 PIC 单片机感兴趣想学习的朋友可以关注我,免费赠送资料(包括原理图、数据手册、各种例程等)。

有需要这款开发板的朋友也可以关注联系我。

后续干货不断,咱们一起在单片机的世界里,共同进步。

相关推荐
Devlab4 小时前
LVGL设计大师——网页版anyui来了!!
嵌入式硬件·物联网·低代码·ui·iot
Dr.kangder8 小时前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式
zlinear数据采集卡9 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
ACP广源盛1392462567310 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
Rocktech_ruixun11 小时前
机器人端侧大模型部署对主板有哪些要求?瑞迅主控板分级方案对比
人工智能·嵌入式硬件·机器人
振南的单片机世界12 小时前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
Lzh编程小栈13 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Rocktech_ruixun13 小时前
机器人数据采集能力取决于什么?瑞迅科技RK3588/3576核心板方案深度解析
人工智能·嵌入式硬件·机器人
水果里面有苹果13 小时前
28-DRV8825PWPR步进电机驱动器
单片机
恒锐丰科技韩生13 小时前
率能 SS6625E|3.0~20V 单通道 H 桥直流电机驱动 SOP8 电子锁玩具机器人分享
嵌入式硬件·硬件工程