




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机软件设计及编程思想李海全一个嵌入式设计系统一般包含一个嵌入式设计系统一般包含对外对外显示、指示灯、按键显示、指示灯、按键模拟量输入(高低压、交直流、多回路)模拟量输入(高低压、交直流、多回路)开关量输入开关量输入开关量输出开关量输出变送输出变送输出通信(通信(RS485DLT645ProfibusRS485DLT645Profibus)一个嵌入式设计系统一般包含一个嵌入式设计系统一般包含对内对内显示驱动显示驱动LED 595/IO/TM1629LED 595/IO/TM1629LCD 1621/1622LCD 1621/1622等等点阵、段式点阵、段式存储驱动存储驱动EEPROM/EEP
2、ROM/铁电铁电/FLASH/FLASH采样采样CPUCPU内部内部ADAD、ADAD芯片、测量芯片、测量SOCSOC控制控制+ +算法算法设计原则v1.可靠性v2.维护性(可读性)v3.移植性功能模块分类功能模块分类编程时分文件处理,一般一个驱动、一个功编程时分文件处理,一般一个驱动、一个功能模块一个文件能模块一个文件原则:原则:1.1.一个驱动芯片相应的操作封装到一个文件一个驱动芯片相应的操作封装到一个文件中中2.2.一个算法,详细描述计算公式,涉及优化一个算法,详细描述计算公式,涉及优化后的公式,标明原始和推导公式,做一个文件后的公式,标明原始和推导公式,做一个文件3.3.文件不适合过多
3、,文件名应一目了然,根文件不适合过多,文件名应一目了然,根据文件名知其内容据文件名知其内容设计分类文件结构v遵循一模块一文件格式v注释 特别是设计更改需注明 更改日期、更改人、更改记录(头、行) 文件头加注释说明功能文件结构程序版式(易读性)v以布局清晰为原则v不同函数体v不同功能(同一函数中、定义变量)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;菜单设计菜单层数菜单设计菜单层数不得超过4 层(原则上采用4 层结构需要有4 行显示),宜采用3 层结构,不可采用一层(一层但多排显示)翻到底结构。第一层为系统(SYS)、输入(In)、通信(bUS)、报警(do)、变送(tr)、版本(Ver)等设置;第二层为第1 层下的子类细分,以报警为
5、例,第2层可以是报警阈值、死区、延时、报警功能选择等;第三层为第2 层显示的具体数据。注:选择太多时可选择数字加字母组合到方式,例:报警信号选择0.UA 1.UB等菜单设计方法:1。函数指针,网上例程很多2。状态机菜单设计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;菜单设计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;菜单设计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;菜单设计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;显示小数点菜单设计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;存储设计按操作方式IIC(FM24C04)SPI(X5045) 地址数据总线总线(FLASH)中断
12、中和主程序中不能均控制外设,尤其注意定时器和通信的处理存储设计按存储介质 我司常用的EEPROM铁电(存储电能)不推荐设计时使用芯片内部FLASH做存储存储设计IIC 外部有上拉电阻,需考虑CPU的IO口属性开漏输入输出普通IO做普通IO时,在时序不对时易产生大电流锁死CPU,程序应和常规不一样存储设计一存储设计二存储设计三注意事项:1.上电后,CPU开始运行后,不能立即读写外设2.一般延时3秒后操作,此时电源稳定3.一般上电操作 灭-显示版本-全亮-(读数据)-正常运行4.上电后推荐不进行写操作5.推荐存储数据分区间校验,可以做累加和,如设置数据一组、校准数据一组、电能数据一组等6.EEPR
13、OM上电默认一般为FFFF,铁电上电一般默认为07.有条件做双备份DI读取注意,设计时最好IO默认上拉(可以外部),考虑未安装时设计为断开状态,不能为不确定状态1.常开常闭点IO状态要么断开、要么闭合中断中读取,延时消抖2.有源湿节点无信号时才完全断开,有信号时时断时续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不应被更改MODBUS协议需要做02命令DO设置1.总线控制电平方式脉冲方式2.报警控制取各信号输入延时死区,不动作带高报警、低报警为零时是否报警DO设置1.电平方式中断中操作IOif(DI_DO_Status.DIDO.DO1)RELAY_SET_TDO1(); elseRELAY_CLR_TDO1();2.脉冲方式毫秒级需要要中断中做,秒级主程序中做即可DO动作后,判断延时到了修改相应变量皆可 DI
15、_DO_Status.DIDO.DO1通信v通信编程需采用收数据帧方式处理,不同波特率延时不同,收帧最短帧间隔时间应大于1.5个字符时间v以9600波特率为例,如果接收的2个字符间隔时间超过1.5毫秒则认为是2帧。发送数据帧时应有延时,从收到帧结束到发送帧开始最短间隔应大于3.5个字符时间。波特率超过9600可以以9600的时间为准。通信通信v设计时应按帧接收v例:可用1毫秒定时器做,检测是否有数据接收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设计时应按帧接收v例:可用1毫秒定时器做,检测是否有数据接收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设计时应按帧接收v例:可用1毫秒定时器做,检测是否有数据接收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发送时设置延时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标准执行,以下需特别注意v地址范围1-247,波特率推荐1200-38400,奇偶校验位v 03H 命令读功能默认最少允许用户从地址0开始读125个数据,如只用到20个地址,其他地址宜默认填0。地址125以上超过设定的地址如果未默认为0,则需返回异常码,不推荐无通信。v10H 命令写功能写寄存器时对数据需要有范围判断,如超过范围需返回异常码,如设备地址范围为1-247,写248应为超范围,返回异常码,不存储。写多个寄存器时,如其中一个地址的数据超范围需认定整个命令帧无效,同时需给出异常码,禁止给其他符合范围的地址进行存储数据。已经遇到多个客户需要、645协议需要MODBUS通信vDI 通信读取v除设计任务书明确指定部分命令不做外(需返回异常码),带DI功能需02H和03H命令均可读开关量输入状态,未安装或选配功能的开关量输入对应的通信和显示应显示为0,断开状态。超过总个数可回复异常码(推荐保留一定的开关量数目)。v例如:仪表只有5个开关量输入,设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幕墙工程质量控制方案(3篇)
- 2025年地热能发电行业市场拓展与品牌建设报告
- 2025防疫人员试题及答案
- 新能源行业上市公司2025年研发创新与技术转化效率市场前景预测报告
- 2025年互联网广告精准投放算法在旅游摄影领域的用户口碑提升效果评估与优化方案报告
- 2025年电力法律法规试题及答案
- 新能源汽车电池循环利用2025年绿色物流碳减排技术创新
- 2025年《现代林学概论》试题库及答案
- 2025年防疫员网络考试题及答案
- 新能源汽车电池回收利用碳足迹评估与减排路径报告
- 仓库基础知识培训教材课件
- 曲臂式高空作业车专项施工方案
- 2025秋人教统编版二年级语文上册第一单元语文园地一【教案】
- SOP考试题及答案
- 高职院校实训室管理办法
- 旅行社安全应急救援预案
- 无痛人流患者护理查房
- DDI:制造业人才发展成功实践手册
- 电力施工安全管理办法
- 危险化学品生产许可证实施细则(一)(危险化学品无机产品部分)
- 德瑞斯D600变频器说明书
评论
0/150
提交评论