|
該項(xiàng)目名稱(chēng)為工業(yè)控制急停模擬系統(tǒng),主要內(nèi)容是模擬工業(yè)控制急停系統(tǒng),通過(guò)檢測(cè)外部急停信號(hào),完成急?刂戚敵觯⒍〞r(shí)產(chǎn)生警報(bào)燈顯示,將警報(bào)數(shù)據(jù)傳輸?shù)接?jì)算機(jī)系統(tǒng)上。綜合運(yùn)用嵌入式系統(tǒng)與設(shè)計(jì)中微控制器外部中斷、定時(shí)器、GPIO 和串口等內(nèi)部資源,結(jié)合檢測(cè)技術(shù)、輸出控制技術(shù)以及串口通信傳輸?shù)闹R(shí)實(shí)現(xiàn)工業(yè)控制急停模擬系統(tǒng)的功能。
1、外部中斷檢測(cè)急停按鍵:將急停按鍵接到相應(yīng) GPI0 端口,設(shè)置 GPIO 為外部中斷模式,設(shè)置合適的優(yōu)先級(jí)和邊沿檢測(cè)方式,設(shè)計(jì)外部中斷服務(wù)程序;
2、定時(shí)驅(qū)動(dòng) LED 提示報(bào)警閃爍:為了影響主程序的運(yùn)行,LED 定時(shí)提示閃爍采用定時(shí)方式,選擇適合的定時(shí)器,設(shè)置其工作模式、分頻比、定時(shí)時(shí)間。編寫(xiě)定時(shí)中斷服務(wù)程序。使警示 LED閃爍提示;
3、利用串口傳輸信息到 PC 機(jī):選擇其中一個(gè)串行接口,設(shè)置波特率 9600,無(wú)校驗(yàn),停止位為 1 位,對(duì)應(yīng)將數(shù)據(jù)傳輸?shù)?PC 機(jī)的串口調(diào)試助手上,設(shè)計(jì)串口數(shù)據(jù)信息傳輸;
4、利用 GPIO 輸出控制繼電器(繼電器可用 LED 模擬):將 GPIO 設(shè)置為通用推挽輸出,控制繼電器輸出。通過(guò)綜合以上模塊軟件,實(shí)現(xiàn)以下功能:1 )未按下緊急按鍵時(shí),將正常運(yùn)行信息通過(guò)串口發(fā)生至上位機(jī);警示 LED常亮;2 )當(dāng)按下緊急按鍵時(shí),警示 LED 定時(shí)閃爍;將急停信息通過(guò)串口發(fā)生至上位機(jī);并將輸出控制的繼電器切斷(可用 LED 代替)。
單片機(jī)源程序如下:- #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(); //延時(shí)函數(shù)初始化
- 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);//設(shè)置NVIC中斷分組為2 , 2:2位搶占優(yōu)先級(jí),2級(jí)響應(yīng)優(yōu)先級(jí)
-
- if(flag)
- {
- PAout(8)^=1;
- PDout(2) =1;
- printf("警報(bào)警報(bào)\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);
- }
- }
復(fù)制代碼
原理圖: 無(wú)
仿真: 無(wú)
代碼:
程序.7z
(185.55 KB, 下載次數(shù): 10)
2023-10-20 22:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|