該項目名稱為工業控制急停模擬系統,主要內容是模擬工業控制急停系統,通過檢測外部急停信號,完成急?刂戚敵,并定時產生警報燈顯示,將警報數據傳輸到計算機系統上。綜合運用嵌入式系統與設計中微控制器外部中斷、定時器、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)
2023-10-20 22:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|