欢迎来到天天文库
浏览记录
ID:37447251
大小:263.31 KB
页数:31页
时间:2019-05-12
《单片机实用编程技巧值得学习》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机软件系统设计教程基础要求熟练运用C语言编程。熟练掌握和运用一款单片机。包括硬件结构、寄存器、外设、了解基本汇编指令等。熟悉一款集成开发环境及编译器。独立编写并调通2000行以上的小型程序。一、如何编写高质量软件合理划分函数功能,合并常用函数严格的函数、变量命名方法合理划分软件层次。如硬件隔离层、驱动程序层、功能函数层、应用层。合理运用宏定义,提高程序可移植性经常查看反汇编代码,练习优化指令。函数划分常用的功能集合,可以合理合并成一个函数利用参数传递,将多个函数合并。例如:某菜单需要将选中的菜单条反色显示,因此需要2个中文显示函数:Displa
2、yString(char*ptr,charx,chary);DisplayStringInvert(char*ptr,charx,chary);可以合并成一个函数DisplayString(char*ptr,charx,chary,boolInvertFlag);注意函数过分合并会造成运算性能下降。函数与变量命名严格按照模块名_功能名的方法命名,按正确的英文(甚至拼音也可)命名单词首字母大写例如:ADC_CailbrateZero()CPU_SleepDelay(intTime_ms)Flash_WriteWord(intAddr,intWord)软
3、件层次划分合理划分软件层次,将使程序结构清晰层次良好的软件,移植性强对软件开发者来说,便于管理和维护,甚至可实现“代码免维护”大大提高开发速度。例:在某液晶上需要做中文菜单、数字显示、波形显示、滚动条等。为该应用编写液晶驱动函数。LCD驱动层划分范例每一层含义明确,功能完整独立每一层只调用其下一层的函数,禁止跨层调用函数。所有变量对于非其它层函数不透明。禁止跨层使用全局变量层次划分越多,执行效率越低更改或更换任何一层的函数,不影响其它层函数的执行。合理运用宏定义1.用宏定义作硬件隔离#defineLED1_POUTP1OUT#defineLED1_P
4、DIRP1DIR#defineLED1_BIT(BIT2)/*更换IO只需改以上3行*/#defineLED_ONLED1_POUT
5、=LED1_BIT/*亮*/#defineLED_OFFLED1_POUT&=~LED1_BIT/*灭*//*更换单片机只需修改以上2行*/用宏定义自动运算#defineOSC(1000)#defineBAUD(9600)...UBR00=((long)OSC*1000/8)/BAUD;UBR10=0x00;...#defineTIMER_PERIOD12000...TH1=(unsignedint)(65536-TI
6、MER_PERIOD)/256;/*51单片机*/TL1=(unsignedint)(65536-TIMER_PERIOD)%256;...用宏定义作编译开关#defineAVE0#defineRMS1#definePEK2#defineUMODEAVE/AVE:平均值RMS真有效值PEK峰值*/...#if(UMODE==RMS)VAC_Ch1=(longint)TempIntV1*TempIntV1;VAC_Ch2=(longint)TempIntV2*TempIntV2;#endif#if(UMODE==AVE)VAC_Ch1=absv(Tem
7、pIntV1);VAC_Ch2=absv(TempIntV2);#endif...用宏定义作功能开关#defineON1#defineOFF0#defineHI_LO2#defineLEV_21#defineNONE0#defineMINORCUTOFF/*是否打开小值切除功能*/#defineRS485ON/*是否打开RS-485通讯功能*/#defineDACON/*是否打开变送功能*/#defineDEFAULTOFF/*是否打开参数备份功能*/#defineALARM_MODENONE/*报警模式NONE=无报警LEV_2=双限HI_LO=高
8、低限*/#defineOFFSETON/*是否打开偏移补偿功能*/#defineKEYTONEON/*按键音*/程序优化打开编译器自带的优化选项。注意高级别优化会删除部分“冗余”代码,或改动程序结构,应注意挥发性变量(volatile)查看反汇编代码,看汇编代码是否有冗余操作,合理修改。二、软件结构如何让CPU尽可能多地执行多项任务如何让CPU尽可能快地响应各个事件如何让程序尽可能少地占用RAM如何让程序具有尽可能强的可扩展性如何让编出的程序尽可能通用如何减少编程工作量?如何减少错误概率和调试工作量?好的程序结构,可以解决上述问题实时性实时性最高的任
9、务,需要零延迟立即响应。应考虑硬件实现。如用CPLD/FPGA、捕获等实现。实时性较高任务,允许微秒级延迟的
此文档下载收益归作者所有