该项目名称为工业控制急停模拟系统,主要内容是模拟工业控制急停系统,通过检测外部急停信号,完成急停控制输出,并定时产生警报灯显示,将警报数据传输到计算机系统上。综合运用嵌入式系统与设计中微控制器外部中断、定时器、GPIO 和串口等内部资源,结合检测技术、输出控制技术以及串口通信传输的知识实现工业控制急停模拟系统的功能。
1、外部中断检测急停按键:将急停按键接到相应 GPI0 端口,设置 GPIO 为外部中断模式,设置合适的优先级和边沿检测方式,设计外部中断服务程序;
2、定时驱动 LED 提示报警闪烁:为了影响主程序的运行,LED 定时提示闪烁采用定时方式,选择适合的定时器,设置其工作模式、分频比、定时时间。编写定时中断服务程序。使警示 LED闪烁提示;
3、利用串口传输信息到 PC 机:选择其中一个串行接口,设置波特率 9600,无校验,停止位为 1 位,对应将数据传输到 PC 机的串口调试助手上,设计串口数据信息传输;
4、利用 GPIO 输出控制继电器(继电器可用 LED 模拟):将 GPIO 设置为通用推挽输出,控制继电器输出。通过综合以上模块软件,实现以下功能:1 )未按下紧急按键时,将正常运行信息通过串口发生至上位机;警示 LED常亮;2 )当按下紧急按键时,警示 LED 定时闪烁;将急停信息通过串口发生至上位机;并将输出控制的继电器切断(可用 LED 代替)。
单片机源程序如下:- #include "delay.h"
- #include "led.h"
- #include "key.h"
- #include "usart.h"
- #include "exti.h"
- #include "TIM2.h"
- #include "sys.h"
- char flag;
- int main(void)
- {
- delay_init(); //延时函数初始化
- uart_init(9600); //串口初始化为9600
- LED_Init(); //初始化与LED连接的硬件接口
- KEY_Init(); // 按键端口初始化
- EXTIX_Init(); //外部中断初始化
- TIM2_TimBaseInit();
- while(1)
- {
- if(!flag)
- {
- led_zc();
- delay_ms(1000);
- printf("正常\r\n");
- }
- }
- }
- void TIM2_IRQHandler(void)
- {
- TIM_ClearFlag(TIM2 , TIM_FLAG_Update);//设置NVIC中断分组为2 , 2:2位抢占优先级,2级响应优先级
-
- if(flag)
- {
- PAout(8)^=1;
- PDout(2) =1;
- printf("警报警报\r\n");
- TIM_GetITStatus(TIM2,TIM_IT_Update);
- }
- }
- void EXTI0_IRQHandler(void)
- {
- delay_ms(10);
- if(WK_UP==1)
- {
- flag +=1;
- // if(flag>1)flag=0;
- EXTI_ClearITPendingBit(EXTI_Line0);
- }
- }
复制代码
原理图: 无
仿真: 无
代码:
程序.7z
(185.55 KB, 下载次数: 10)
|