![嵌入式軟件設(shè)計及編程思想2_1_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/9c0ff711-5bd5-4724-a6b0-8660fc95bb45/9c0ff711-5bd5-4724-a6b0-8660fc95bb451.gif)
![嵌入式軟件設(shè)計及編程思想2_1_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/9c0ff711-5bd5-4724-a6b0-8660fc95bb45/9c0ff711-5bd5-4724-a6b0-8660fc95bb452.gif)
![嵌入式軟件設(shè)計及編程思想2_1_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/9c0ff711-5bd5-4724-a6b0-8660fc95bb45/9c0ff711-5bd5-4724-a6b0-8660fc95bb453.gif)
![嵌入式軟件設(shè)計及編程思想2_1_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/9c0ff711-5bd5-4724-a6b0-8660fc95bb45/9c0ff711-5bd5-4724-a6b0-8660fc95bb454.gif)
![嵌入式軟件設(shè)計及編程思想2_1_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/9c0ff711-5bd5-4724-a6b0-8660fc95bb45/9c0ff711-5bd5-4724-a6b0-8660fc95bb455.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、單片機軟件設(shè)計及編程思想李海全一個嵌入式設(shè)計系統(tǒng)一般包含一個嵌入式設(shè)計系統(tǒng)一般包含對外對外顯示、指示燈、按鍵顯示、指示燈、按鍵模擬量輸入(高低壓、交直流、多回路)模擬量輸入(高低壓、交直流、多回路)開關(guān)量輸入開關(guān)量輸入開關(guān)量輸出開關(guān)量輸出變送輸出變送輸出通信(通信(RS485DLT645ProfibusRS485DLT645Profibus)一個嵌入式設(shè)計系統(tǒng)一般包含一個嵌入式設(shè)計系統(tǒng)一般包含對內(nèi)對內(nèi)顯示驅(qū)動顯示驅(qū)動LED 595/IO/TM1629LED 595/IO/TM1629LCD 1621/1622LCD 1621/1622等等點陣、段式點陣、段式存儲驅(qū)動存儲驅(qū)動EEPROM/EEP
2、ROM/鐵電鐵電/FLASH/FLASH采樣采樣CPUCPU內(nèi)部內(nèi)部ADAD、ADAD芯片、測量芯片、測量SOCSOC控制控制+ +算法算法設(shè)計原則v1.可靠性v2.維護性(可讀性)v3.移植性功能模塊分類功能模塊分類編程時分文件處理,一般一個驅(qū)動、一個功編程時分文件處理,一般一個驅(qū)動、一個功能模塊一個文件能模塊一個文件原則:原則:1.1.一個驅(qū)動芯片相應(yīng)的操作封裝到一個文件一個驅(qū)動芯片相應(yīng)的操作封裝到一個文件中中2.2.一個算法,詳細(xì)描述計算公式,涉及優(yōu)化一個算法,詳細(xì)描述計算公式,涉及優(yōu)化后的公式,標(biāo)明原始和推導(dǎo)公式,做一個文件后的公式,標(biāo)明原始和推導(dǎo)公式,做一個文件3.3.文件不適合過多
3、,文件名應(yīng)一目了然,根文件不適合過多,文件名應(yīng)一目了然,根據(jù)文件名知其內(nèi)容據(jù)文件名知其內(nèi)容設(shè)計分類文件結(jié)構(gòu)v遵循一模塊一文件格式v注釋 特別是設(shè)計更改需注明 更改日期、更改人、更改記錄(頭、行) 文件頭加注釋說明功能文件結(jié)構(gòu)程序版式(易讀性)v以布局清晰為原則v不同函數(shù)體v不同功能(同一函數(shù)中、定義變量)v縮進縮進 (不要使用空格、使用TAB(4格)程序版式(易讀性)v推薦寫法vif (condition)vv / program codevvelsevv / program codevv不推薦寫法vif (condition)v / program codevvelse v / progra
4、m codev v少用if (width 15)keyDownDLy=0;KEY_DATA=KEY_OLD;SAM+; elseif(keyDownDLy99)keyDownDLy=0;KEY_DATA=KEY_OLD;SAM+ ;else KEY_OLD=keypress;SAM=0;keypress=9;菜單設(shè)計菜單層數(shù)菜單設(shè)計菜單層數(shù)不得超過4 層(原則上采用4 層結(jié)構(gòu)需要有4 行顯示),宜采用3 層結(jié)構(gòu),不可采用一層(一層但多排顯示)翻到底結(jié)構(gòu)。第一層為系統(tǒng)(SYS)、輸入(In)、通信(bUS)、報警(do)、變送(tr)、版本(Ver)等設(shè)置;第二層為第1 層下的子類細(xì)分,以報警為
5、例,第2層可以是報警閾值、死區(qū)、延時、報警功能選擇等;第三層為第2 層顯示的具體數(shù)據(jù)。注:選擇太多時可選擇數(shù)字加字母組合到方式,例:報警信號選擇0.UA 1.UB等菜單設(shè)計方法:1。函數(shù)指針,網(wǎng)上例程很多2。狀態(tài)機菜單設(shè)計switch(Setup_Data)case 0: if(KEY_DATA=KEY_Menu)Setup_Data=1;DS_SETUP(0);break; else if(KEY_DATA=KEY_Left)Display_Page=Get_Display_Page(Display_Page,0);else if(KEY_DATA=KEY_Right)Display_Pag
6、e=Get_Display_Page(Display_Page,1);else if(KEY_DATA=KEY_Enter)Display_Page=Get_Display_Page(Display_Page,2);elsebreak;Display_All_Page();return;菜單設(shè)計switch(Setup_Data)case 1: if(KEY_DATA=KEY_Menu)Setup_Data=0;Display_All_Page(); else if(KEY_DATA=KEY_Enter)Setup_Data=2;tmp_PASSWORD=9999;DS_INT_DATA(2,
7、0,tmp_PASSWORD);break;菜單設(shè)計switch(Setup_Data)case 2:if(KEY_DATA=KEY_Menu)Setup_Data=1;DS_SETUP(0);/PASSelse if(KEY_DATA=KEY_Enter)if(tmp_PASSWORD=PASSWORD.UWD |tmp_PASSWORD=8)Setup_Data=9;DS_SETUP(2);m1Keytmp=0;tmp_PASSWORD=PASSWORD.UWD;tmp_PT=PT.UWD;tmp_CT=CT.UWD;elsetmp_PASSWORD=Data_4IWD_Key_Do(tm
8、p_PASSWORD,1,9999);DS_INT_DATA(2,0,tmp_PASSWORD);break;菜單設(shè)計switch(Setup_Data)case Setup_DO1:case Setup_DO2:case Setup_DO3:case Setup_DO4:if(KEY_DATA=KEY_Menu)Setup_Data=9;DS_SETUP(2+m1Keytmp);else if(KEY_DATA=KEY_Enter)cnt=Setup_Data-Setup_DO1;Setup_Data=cnt*SetupD_NN;Setup_Data+=SetupD_DO1+m2Keytmp
9、;if(m2Keytmp=0)DS_SET_DAT(60+tmp_DOSelcnt);else if(m2Keytmp=1)DS_INT_DATA(2,0,tmp_DODlycnt);elseif(m2Keytmp=2)DS_INT_DATA(2,0,tmp_DOBandcnt);DsKeyDOSetPoint(tmp_DOSelcnt);else if(m2Keytmp=3)DS_INT_DATA(2,0,tmp_DOHDatcnt);DsKeyDOSetPoint(tmp_DOSelcnt);else if(m2Keytmp=4)DS_INT_DATA(2,0,tmp_DOLDatcnt)
10、;DsKeyDOSetPoint(tmp_DOSelcnt);elseDS_SET_DAT(50+tmp_DOZerocnt);elsem2Keytmp=Data_4IWD_Key_Do(m2Keytmp,0,5);DS_LINE(40+m2Keytmp); break;顯示小數(shù)點菜單設(shè)計switch(Setup_Data)case SetupD_DO1:case SetupD_DO2:case SetupD_DO3:case SetupD_DO4:cnt=Setup_Data-SetupD_DO1;cnt/=SetupD_NN;tmp_DOSelcnt=Data_4IWD_Key_Do(tm
11、p_DOSelcnt,0,31);DS_SET_DAT(60+tmp_DOSelcnt);break;case SetupD_DO1+1:case SetupD_DO2+1:case SetupD_DO3+1:case SetupD_DO4+1:cnt=Setup_Data-SetupD_DO1;cnt/=SetupD_NN;tmp_DODlycnt=Data_4IWD_Key_Do(tmp_DODlycnt,0,9999);DS_INT_DATA(2,0,tmp_DODlycnt);break;存儲設(shè)計按操作方式IIC(FM24C04)SPI(X5045) 地址數(shù)據(jù)總線總線(FLASH)中斷
12、中和主程序中不能均控制外設(shè),尤其注意定時器和通信的處理存儲設(shè)計按存儲介質(zhì) 我司常用的EEPROM鐵電(存儲電能)不推薦設(shè)計時使用芯片內(nèi)部FLASH做存儲存儲設(shè)計IIC 外部有上拉電阻,需考慮CPU的IO口屬性開漏輸入輸出普通IO做普通IO時,在時序不對時易產(chǎn)生大電流鎖死CPU,程序應(yīng)和常規(guī)不一樣存儲設(shè)計一存儲設(shè)計二存儲設(shè)計三注意事項:1.上電后,CPU開始運行后,不能立即讀寫外設(shè)2.一般延時3秒后操作,此時電源穩(wěn)定3.一般上電操作 滅-顯示版本-全亮-(讀數(shù)據(jù))-正常運行4.上電后推薦不進行寫操作5.推薦存儲數(shù)據(jù)分區(qū)間校驗,可以做累加和,如設(shè)置數(shù)據(jù)一組、校準(zhǔn)數(shù)據(jù)一組、電能數(shù)據(jù)一組等6.EEPR
13、OM上電默認(rèn)一般為FFFF,鐵電上電一般默認(rèn)為07.有條件做雙備份DI讀取注意,設(shè)計時最好IO默認(rèn)上拉(可以外部),考慮未安裝時設(shè)計為斷開狀態(tài),不能為不確定狀態(tài)1.常開常閉點IO狀態(tài)要么斷開、要么閉合中斷中讀取,延時消抖2.有源濕節(jié)點無信號時才完全斷開,有信號時時斷時續(xù)DI讀取1.常開常閉點if(READ2_DI1()if(DIDLY_On0DI_Read_TotalCnt)DIDLY_On0+;elseDI_DO_Status.DIDO.DI1=0;DIDLY_Of0=0;elseif(DIDLY_Of0800)if(DI_ON_DLY0400)Meas.T.DIStatus.Bits.Bi
14、t0=1;else Meas.T.DIStatus.Bits.Bit0=0;DI_OFF_DLY0=0; DI_ON_DLY0=0;DI讀取3.注意事項通信和DI和DO排在一起時操作DO時,DI不應(yīng)被更改MODBUS協(xié)議需要做02命令DO設(shè)置1.總線控制電平方式脈沖方式2.報警控制取各信號輸入延時死區(qū),不動作帶高報警、低報警為零時是否報警DO設(shè)置1.電平方式中斷中操作IOif(DI_DO_Status.DIDO.DO1)RELAY_SET_TDO1(); elseRELAY_CLR_TDO1();2.脈沖方式毫秒級需要要中斷中做,秒級主程序中做即可DO動作后,判斷延時到了修改相應(yīng)變量皆可 DI
15、_DO_Status.DIDO.DO1通信v通信編程需采用收數(shù)據(jù)幀方式處理,不同波特率延時不同,收幀最短幀間隔時間應(yīng)大于1.5個字符時間v以9600波特率為例,如果接收的2個字符間隔時間超過1.5毫秒則認(rèn)為是2幀。發(fā)送數(shù)據(jù)幀時應(yīng)有延時,從收到幀結(jié)束到發(fā)送幀開始最短間隔應(yīng)大于3.5個字符時間。波特率超過9600可以以9600的時間為準(zhǔn)。通信通信v設(shè)計時應(yīng)按幀接收v例:可用1毫秒定時器做,檢測是否有數(shù)據(jù)接收structunsigned short int INNUM,START;unsigned char R_ALL,S_Dly,S_Flag,R_Dly,R_Flag;unsigned char
16、inbuff100;unsigned char outbuff270;unsigned short int OUTNUM;unsigned char *sbuff;UartUD1;通信v設(shè)計時應(yīng)按幀接收v例:可用1毫秒定時器做,檢測是否有數(shù)據(jù)接收void USART1_SendRec_Dly(void)if(UartUD1.S_Flag)if(UartUD1.S_Dly=0)UartUD1.S_Flag=0;USART_ITConfig(USART1, USART_IT_TXE, ENABLE);USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);if
17、(UartUD1.OUTNUM!=0)UartUD1.OUTNUM-;USART_SendData(USART1,*UartUD1.sbuff);UartUD1.sbuff+;elseUartUD1.S_Dly-;else if(UartUD1.OUTNUM=0)USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);。通信v設(shè)計時應(yīng)按幀接收v例:可用1毫秒定時器做,檢測是否有數(shù)據(jù)接收void USART1_SendRec_Dly(void)。switch(Comm_Baud)case 3: if(UartUD1.R_Dly=4) UartUD1.R_Fla
18、g=1; if(UartUD1.START2)UartUD1.R_ALL=1; else UartUD1.R_Dly+; UartUD1.R_Flag=0; break;case 4:if(UartUD1.R_Dly=7) UartUD1.R_Flag=1; if(UartUD1.START2)UartUD1.R_ALL=1; else UartUD1.R_Dly+; UartUD1.R_Flag=0; break;case 5:if(UartUD1.R_Dly=14) UartUD1.R_Flag=1; if(UartUD1.START2)UartUD1.R_ALL=1; else Uart
19、UD1.R_Dly+; UartUD1.R_Flag=0; break;default:if(UartUD1.R_Dly=2) UartUD1.R_Flag=1; if(UartUD1.START2)UartUD1.R_ALL=1; else UartUD1.R_Dly+; UartUD1.R_Flag=0; break;通信v發(fā)送時設(shè)置延時v例:void USART1_Send_Ready(void)switch(Comm_Baud)case 5: UartUD1.S_Dly=19;break;case 4: UartUD1.S_Dly=8;break;case 3: UartUD1.S_D
20、ly=4;break;default:UartUD1.S_Dly=1; break;UartUD1.S_Flag=1;UartUD1.INNUM=0;UartUD1.START=0;UartUD1.R_ALL=0;UartUD1.sbuff=UartUD1.outbuff;通信MODBUS通信v按GBZ19582.1-2004標(biāo)準(zhǔn)執(zhí)行,以下需特別注意v地址范圍1-247,波特率推薦1200-38400,奇偶校驗位v 03H 命令讀功能默認(rèn)最少允許用戶從地址0開始讀125個數(shù)據(jù),如只用到20個地址,其他地址宜默認(rèn)填0。地址125以上超過設(shè)定的地址如果未默認(rèn)為0,則需返回異常碼,不推薦無通信。v10H 命令寫功能寫寄存器時對數(shù)據(jù)需要有范圍判斷,如超過范圍需返回異常碼,如設(shè)備地址范圍為1-247,寫248應(yīng)為超范圍,返回異常碼,不存儲。寫多個寄存器時,如其中一個地址的數(shù)據(jù)超范圍需認(rèn)定整個命令幀無效,同時需給出異常碼,禁止給其他符合范圍的地址進行存儲數(shù)據(jù)。已經(jīng)遇到多個客戶需要、645協(xié)議需要MODBUS通信vDI 通信讀取v除設(shè)計任務(wù)書明確指定部分命令不做外(需返回異常碼),帶DI功能需02H和03H命令均可讀開關(guān)量輸入狀態(tài),未安裝或選配功能的開關(guān)量輸入對應(yīng)的通信和顯示應(yīng)顯示為0,斷開狀態(tài)。超過總個數(shù)可回復(fù)異常碼(推薦保留一定的開關(guān)量數(shù)目)。v例如:儀表只有5個開關(guān)量輸入,設(shè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球離網(wǎng)房車行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球高脈沖能量皮秒激光器行業(yè)調(diào)研及趨勢分析報告
- 月齡嬰兒情緒情感與社會性親子活動設(shè)計創(chuàng)造性撫觸游戲講解
- 2025【合同范本】建筑工程設(shè)計協(xié)議書
- 蔬菜配送合作合同范本
- 分期付款合同模板集錦
- 會簽單合同模板
- 全新對講機服務(wù)合同下載
- 勞務(wù)出資合伙協(xié)議合同
- 個人租車租賃合同范本
- 區(qū)域經(jīng)理年終工作總結(jié)匯報
- 2019版新人教版高中英語必修+選擇性必修共7冊詞匯表匯總(帶音標(biāo))
- 初中八年級音樂-勞動號子《軍民大生產(chǎn)》
- 中層領(lǐng)導(dǎo)的高績效管理
- 小小銀行家-兒童銀行知識、理財知識培訓(xùn)
- 機械基礎(chǔ)知識競賽題庫附答案(100題)
- 閱讀理解特訓(xùn)卷-英語四年級上冊譯林版三起含答案
- 國庫集中支付培訓(xùn)班資料-國庫集中支付制度及業(yè)務(wù)操作教學(xué)課件
- 屋面及防水工程施工(第二版)PPT完整全套教學(xué)課件
- 2023年上海青浦區(qū)區(qū)管企業(yè)統(tǒng)一招考聘用筆試題庫含答案解析
- 2023年高一物理期末考試卷(人教版)
評論
0/150
提交評論