字體:小 中 大 | |
|
|
2015/03/05 06:00:41瀏覽653|回應0|推薦0 | |
8051單軸馬達微控器 — 開發程式說明四 壹, 前言 本文將介紹微控器的主程式,大致分為三個部份,前段是一些基本的變數與副程式的初始化工作,中間有一段是TIMER 2的初使化設定,最後才是微控器的主控制迥路程式碼。 貳,主控制迥路程式碼解說 主程式開始時,是先將相關的副程式初使化設定,接著可以看到定義訊息字串,然後是進行TIMER 2的初始化設定,還將來微控器可以定時的監湔外部的SENSOR或開關是否有特殊事件發生,最後就進入主迥路控制程式碼,判斷是否有UART送來任務的指令碼,如果當OnOff_flag被設定,則進行監控運作訊息迥路,並不斷更新訊息,在完成任務或特殊事件發生時,根據發生之事項處理之,其中最後仍有一段是微控器在完成處理後,會將處理的結果利用UART傳送回一個回報給主機,最後再回頭至主控制迥路,等待下一個任務。 /*------------------------------------------------ 主程式 ------------------------------------------------*/ main() { unsigned char j; LCD_Init(); //初始化液晶 DelayMs(20); //延時有助於穩定 LCD_Clear(); //清除LCM營幕 Init_Timer0(); //TIMER0 起啟 UART_Init(); //UART 起啟 Coil_0 Err_Table0= " SYSTEM BUSY "; //系統忙碌中 Err_Table1= " Waiting "; //系統等待中 Err_Table2= " Step Count Over "; //步進數設定超出 0 ~ 65535 Err_Table3= " Speed Was Over "; //馬達速度設定超出 2 ~ 20 Err_Table4= " HOME POSITION "; //馬達至HOME位置 Err_Table5= " LIMIT POSITION "; //馬達至LIMIT位置 Err_Table6= " STOP SYSTEM "; //系統暫停 Err_Table7= " POSITION OVER "; //位置超出範圍 Err_Table8= " Waiting Sync "; //等待SYNC同步信號 Err_Table9= " RESET CONTROL "; //系統重置 Clearn = " "; LCD_Write_String(0,1,"Step Motor Ctrl v1.0"); //系統名稱 & 版本 timesx=timesy=SensorCnt=0; //指令步進數,現行步進數與Sensor計數 EX0=1; //外部中斷#0,緊急按鈕鍵 IT0=1; //中斷#0邊緣觸發 ET1=0; // // ************* Timer 2 init*********** 初使化,設定自動reload 數值 T2MOD &= 0xFC; // T2OE=0;DCEN=1; T2MOD |= 0x01; EXF2=0; // reset flag TCLK=0;RCLK=0; // disable baud rate generator EXEN2=0; // ignore events on T2EX TH2=MSB_reload_value; TL2=LSB_reload_value; RCAP2H=MSB_reload_value; /* reload msb_value */ RCAP2L=LSB_reload_value; /* reload lsb_value */ C_T2=0; // interrupt mode CP_RL2=0; // reload mode TR2=1; // timer2 run ET2=1; /* enable timer2 interrupt */ EA=1; ES=1; //打開串口中斷 Sensor_flag=0; START: //*******主控制迥路******* j=0; if(Rcv_Get==1) //判斷是否有UART指令碼被傳送 { ES=0;Rcv_Buf[j]=SBUF;Rcv_Get=0; j++; if (j>Rcv_Buf_Size) Rcv_Buf_Index=0; ES=1; //RS232 INTR. ENABLE } FunChar(); //判讀指令碼之功能,並設定相關旗號與訊息 timesz=0; DispScreen(); //LCM顯示字幕副程式 while(OnOff_flag==1) //如果OnOff_flag 被啟動 { Busy_flag=1; OnOff_Flag=1;Busy_Flag=1;FR_Flag=FR_flag; DispScreen(); //更新微控器隨時的資訊於LCM字幕 Msg_flag=0; } if((timesx==0 || Err_flag>=0) && Msg_flag==0) //當完成任務或有特殊事件發生時 { ES=0; //利UART傳送回報之訊息給主機 SendStr(Rcv_Buf); ES=1; Msg_flag=1; } if(Rcv_Buf_Index>=(Rcv_Buf_Size-1))Rcv_Buf_Index=0; goto START; //回至主控制迥路 } 參,結論 在此已將微控器部份的程式碼公開分享,希望同好者能夠留言提供指教,如需將其商品化,也可讓本人知曉,當然各位一定心中有一個疑問,那麼"多軸主機"的程式碼何時將會發表,這部份因為從部落格中的照片櫃中有看到兩張DEMO的照片,而在主機的部份只是暫時撰寫一個測試用的小程式碼讓微控器能不斷的正轉與反轉至定位而已,仍未完成整體的開發工作,只好在此讓各位再等待了,後續仍不知何時可以完成,只有讓各位隨時等候發表了,請見諒了。 再者之後會考慮增加有關I2C EPROM 24C04介面,I2C主從架構取代RS232傳輸,讓微控器進展到另一個層面,或是增加一些如步進馬達秏電流檢測,溫度檢測模組,陀螺儀模組,超音波測距模組等功能,也希望同好者能提拱意見來發展這塊園地,最後在此祝福所有有緣者身體健康,後會有期了。 PS:在YOUTUBE有分享的VIDEO(抱歉經驗仍待精進) https://www.youtube.com/watch?v=Z9qZBGY7jaQ 單軸微控器 |
|
( 興趣嗜好|其他 ) |