ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:36.24KB ,
资源ID:19775902      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19775902.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机程序设计编程规范Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机程序设计编程规范Word文件下载.docx

1、就按雒来说,一般有Key buffer. Key FIFO或直接逬入APFIFO 三种设计方式。Key buffer:般用于保存数字按褪信息。例如:在 机的设计中,需要记录 按雒内容用于LCD显示、最后数字确认、数字存储等,这时候需要把按雒值的 信息(0123456789*#)记录在 Key buffer 中。Key FIFO:些功能按键可以将相应信息列入到Key FIFO中,等待应用层的取 用,这样可根据不同的工作模式进行不同的处理及动作。这些类似的观念可以应用在许多周边中:输入类:Key、RF Data input, UART data input. Switch input 等。输出类:

2、LCD display、LED display, UART data output 等。APPFIFO (应用界廁层):主要是将发生的事件储存在APPFIFO里面等待适当 的时间依序处理,不然有可能造成系统在某一程序物件里面循环,从而降低系统 的实时性(Real-Time )o4)每个子程序模块只能有唯一一个程序入地址在程序的首部,只能有唯 个程序出地址在程序的尾部。以下的写法是不标准的两个RET出口,存在调试时不易设立断点,程序可读性降低等问题:lable:bObtsO fzclr y应该改为只有一个出位置,标号为lable90,便于程序检查: lable:jmp lable90 lable

3、90:5 上电复位时要对所有的RAM空间进行初始化建议用户存放器清零,系 统存放器进行必要设定,不要使用未经初始化的变量。RAM未经过完整的初始 化,容易导致程序执行的不确定性,这一不良现象往往在批量生产中有所表达。 这点是工程师经常犯错的地方,须特别注意6 系统中如果需要等待一些未知的应答信号,如通信或等待输入信号时,必 须进行超时或异常处理,以防止程序进入“死等状态。例如在红外接收中,由于信号的突然消失或干扰从而无法得到一帧完整或正 确的信息,这时需要复位接收程序的入条件并退出接收程序,而不是一直等待 信号的来临。不然无法进行下次接收甚至会影响到其它程序的执行。7 通过对系统数据结构的划分

4、与组织的改良,以及对程序算法的优化来提高 空间效率。这种方式是解决软件空间效率的根本方法。8保证循环体内的工作量最小化。应仔细考虑循环体内的语句是否可以放 在循环体之外,使循环体内工作量最小,从而提高程序的执行效率。9 在多重循环中,应将最忙的循环放在最内层。10 中断处理程序应尽量愆。有效的作法为:在中断中进行标记,在主程序 中进行处理。但一些实时性要求较蒿的程序例外。此外,进入中断时应该保存涉 及到的变量和存放器。11 看门狗的正确使用。看门狗主要用于微控制器死机时的时间溢出复位, 需要程序适时去除。正确的处理方式为:整个系统程序中尽量保证只有一处清看 门狗位置,而且应处在主循环的主干位置

5、。切记不可在定时中断中清狗,因为微 控制器有时只是在主循环中死掉。所有AC电源的应用程序都必须强迫参加看 门狗选项尤其是条件式的看门狗有利于系统发生异常后的重启动二排版风格1、 程序采用缩进风格编写,缩逬为1个Tab键,1个Tab键定义为8个空格位。2、 程序中的标号要从第一列开始书写。以开头的预编译命令也要从第一列 开始书写,其他预编译命令采用缩进风格编写。1 以开头的预编译命令要从第一列开始书写,其他预编译命令采用缩 进风格书写。LIST ;从第一列开始书写.CONSTNUMBER EQU 55h.DATAwkOO DS 1.CODEORG Oh2 标号要从第一列开始书写。main: ;从

6、第一列开始jmp main ;缩进8个空格位3 变量或常量的定义采用缩进风格。keybuf DS 1NUMBER EQU 84 定义变量或常量时,变量色或常量名与命令符之间使用2个Tab键相 当于16个空格位分幵,命令符与后面的操作数用1个Tab键相当于8个空格 位分幵。5 操作码与操作数之间用1个Tab键相当于8个空格位分开。ORG 80hmov a,NUMBERtable:DW I234h6.程序中两个操作数之间用一个“,作为分隔符,“ #号与立即数之 间不需要分隔符。Mov a,#55h7 标号要单独占一行。8 相对独立的程序块之间必须加空行。ORG 10hINCLUDE i nt. a

7、smINCLUDE key. asm9程序语句后面假设有注释,所有的注释要遵守上下对齐的原那么。bOniovl,#7fh;use dpOx(hl) pointermova.#00set pointer = 007fli应该书写为:bOmovL#7fha,#00三、程序可读性与可维护性1程序中的语句、标号、变量使用小写英文字母,常量与预编译命令使用大写英 文字母,以便和一般的语句进行区分。accbuf DS 1a,#NUMBER2表示不同进制的立即数,要在立即数后面加上不同的进制符号。 例如:久#0010001 lba,#23h不建议使用:a,#Ox233般情况下变量和常量要分开定义.不要混在一

8、起。变量在“.DATA 段 中定义,采用命令符“DS,常量在.CONST 段中定义,采用命令符“EQU。Accbuf DS 14.程序中不使用未定义或意义不明确的常量G下面的赋值方法要防止使用:mov a,#3 ;不要直接使用意义不明确的数字在常量中做定义mov r,a建议采用如下赋值方法:NUMBER EQU 3 ;循环次数r,a5整个程序的结尾要以“ENDP语句结束。6当一段代码在程序中有多个地方使用时,建议采用子程序调用或宏命令的方式 来替代。如此,对该代码段的修改就可在一处完成,增强代码的可维护性。7.程序中关系较为密切的子程序代码尽可能相邻。&防止程序中的垃圾代码,预留代码应以注释的

9、方式出现。程序中的垃圾代码不 仅占用额外的空间,而且还可能影响到程序的功能与性能,很可能给程序的测试、 维护等造成不必要的麻烦。4.注释1 程序应该包括两个局部注释,说明局部和语句注释。一般情况下,源程序有效 注释量必须在30%以上。2 说明局部:1源文件说明局部位于每个源文件的最前面,主要描述:文件名、作者、生 成日期、联络方式、功能描述、版本号、软硬件平台、版权说明、修改记录等的 简要说明,以英文书写。文件名作者旧期邮箱地址功能描述版本号软硬件平台File name:Author:Date:Email:Description:Version:Hardware &IDECopyright (

10、C), SONIX TECHNOLOGY Co., Ltd.History:修改记录2子程序说明局部位于每个子程序的最前面,主要描述:子程序名称、功能. 设计原理、所用变量、入条件、出信息、调用模块、堆栈层数、影响资源、 算法简述、使用说明和修改记录等。Subroutine:;子程序名称子程序功能的描述Principium:Calls:程序设计原理被本子程序调用的子程序清单Variables:本子程序中所用到的临时变量Input:子程序调用所需要根本参数的说明Output:Stack:子程序调用后运算结果的说明占用的堆栈层数5C /3性。不再有用的注释要删除。4要防止在注释中使用缩写,特别是非

11、常用缩写。5程序在必要的地方必须有注释.注释要准确、易懂、简洁。注释要有意义.如果有需要,还要详细描述相关含义。例如:以下是无意义的注释mov a,#5把5赋给accmov wk00,a把acc赋给wkOO应该如下注释:设置循环次数为5次mov wk00,a 6注释应与其描述的代码相近,对代码的注释应放在其上方或右方对单条语句的注释的相邻位置.不可放在下方,如放于上方那么需与其上面的代码用空行隔 开。clr wkOO ;Check Read index = FiFo Limitcmprs a,r ;Is Read index = LimitJmp f7注释格式尽量统一,对多行注释建议使用“庐*

12、/,对单行的注释建议 使用“;。8注释应考虑程序易读及外观排版因素,语言尽量统一。对不能进行准确英文表 达的建议使用中文。9对有含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以 注释,说明其含义。五、变量命名规那么1 变量的名称要采用有意义的英文单词小写缩写。可以采用以下几种方式进行缩 写命名:1 去掉所有不在词头的元音字母。如screen可以简写为scrno2 使用每个单词的头几个字母。如channelactivation可以简写为chanactivo3 使用变量名中具有典型意义的单词。如numberofcycle可以简写为 cyclenumbero4 去掉无用的单词后缀in

13、g、ed等。如pagingrequest可以简写为pagreqo5 尽量使用标准或惯用的缩写形式,缩写应该保持一致性。如serial peripheralinterface 可以简写为 spio6部门已经完成函式的变量名称,如果没有特别原因,开展人员延续使用以 增加可读性2.在定义局部要参加注释来说明变量的含义。3变量的定义要在“.DATA段中。4.变量标识符的长度不超过16个字符。5序会用到起码三种变量1 全局变量名称前面不加任何修饰。2 局部变量利用wkOO , wkOl .wkOn来表示,每个独立程序里面用到的 Local var.可有效节省RAM。3 中断局部变量中断里面用的Inter

14、rupt local var.利用IwkOO, IwkOl以作为 区隔注意中断使用的变量必定要小心的跟主程序区隔开,不然影响系统稳定性相 当大。accbuf ds 1 ;全局变量Lnumber ds局部变量6位定义。程序多处会经常对存放器的某一位进行操作,可以在变量定义时对需 要用到的位进行定义,建议名称以 f_开头。7临时工作存放器的定义。程序中经常需要用到一些临时存储数据的存放器,我 们称之为临时工作存放器,这些临时工作存放器的命名方法为“wk加上一个 二位数字组成,这个数字可以从“00开始随着需要定义的临时工作存放器的数 量的增加而增加。需要特别说明的是,临时工作存放器的使用可以大量节省

15、 RAM空间,但是要注意相应的生命周期,必须在子程序退出之前,将空间释放 以便其它子程序使用。在中断处理程序中用到的存放器,为了和一般的临时工作存放器作以区分,可 以在存放器前面加英文字母“i来命名。在使用时需要加以注意,不要和主程 序中的变量复用。wkOOds1wkOlwk02iwkOO中断中要用到的临时工作存放器iwkOlMovMov mov mova,rwkOO.a a,wk01 r,a六、常量命名规那么1 常量的名称要采用有意义的英文单词大写缩写。2常量要定义在“.CONST段中。3在定义局部要参加注释来说明常量含义。4量标识符的长度不超过16个字符。5系统存放器中常用到的某些位可以再

16、额外进行定义,但要有意义:P.keyl EQU P1.0 ;P_打头表示为Port定义Pm_keyl EQU Plm.O :Pm_打头表示为Port方向定义 7.标号命名规那么1 标号的名称要采用有意义的英文单词小写缩写。2子程序标号定义。在同一个子程序中,所有的标号应该有规律可寻。建议第一 个标号为子程序名,下面所用到的标号用子程序名添加数字表示,从而便于今后 程序的添加和修改。数字尽量使用两位数,在子程序的退出位置,数字一般为 90。在一段按褪扫描程序中,如下的标号是不可取的。Label:LabelOKLabelFailLabelQuitLabelfun:LabelEnd:Ret设计师要花

17、许多精神命名label,同肘不容易看出子程序的结构关西,所以建议在 子程序里面别在花精神命名,都用号码表示详细的动作都用注解来说明应该改 为:* 木 * 木 木 * 木 木 * 木 木 * 木 木 * 木 木 * 木Sub-routine , Name : labelIf the condition fail then go to Label90 ;program begin hereLabel 10:注解都写在这里Label20:最后结尾结束的label都用90当做结尾 :有助于程序的阅读Label90:Ret 3为了使程序的结构更加清晰,子程序的命名要尽量能显示出相互间的调用关 系。由ma

18、in主循环中直接调用的程序,要以“mn_作为标号的开头,下面仅 列出一些常用的子程序名称,其它类似情况可同样处理。mn_app mnjntgnd mn_key mn_lcd系统应用程序中断与主程序之间的界面子程序按键扫描子程序LCD显示子程序mn_ledLED显示子程序mn_tone声音处理子程序mn_eppmn_bioEEPROM读写操作根本输入/输出控制mn_adcADC输入及处理mn_debugdebug处理程序4 程序的几个常用入地址命名如下:帥入reset中断入:isr主程序入口 : mainorgjmporg 8jmp sr ;ISR (Internjpt Service Rout

19、ine)org 10有效程序幵始地址reset:进入主程序前的一些准备工作(预处理)premain:主程序循环圈Jmp main)、文件名的命名规那么及文件分割1在一个工程中要包括两种文件:源文件和头文件。源文件是程序体,扩展名为“ .asm ,头文件包括了变量、常量、宏命令的定义,扩展名为 .inc。2头文件的命名头文件用三个不同的文件来分别定义常量、变量、宏命令,其命名方法如下: 常量定义文件:变量定义文件:宏命令定义文件:其中,xxx表示I页目的名称。作一个 机的完整程序,头文件可如下定义:常量定义文件:3源文件分为主文件、子文件。主文件包括了工程的主程序,它描述了芯片信息、 CODEO

20、PTION信息及工程包含的其它子文件模块。子文件是由各个子程序模块 组成,功能相近的子程序要放在一个文件中,文件名可以用1.nm._key2.mn.jnulkey3.Jone4.Jed5._i2c6._sio7._lwire8.inn._uart9.wr_fifo10.rd_11.ram2ram12.roni2ram13.matth附录中。实例说明“工程名+模块功能的缩写+扩展名表示。下面列举一些常用的文件名:主程序文件:常用的子文件定义:中断效劳程序模块:进程处理模块:系统处理程序:按键处理模块:LCD显示模块:其中,XXX表示工程的名称。九、标准程序模块常用功能模块尽量采用附件提供的标准程

21、序,如果无法使用标准的程序模块,那么所编写的程序一定要符合标准要求。所提供的标准程序如下,详细的源代码在单键扫描子程序多雒处理子程序I2C操作子程序SIO操作子程序单总线操作子程序UART子程序写 FIFO读 FIFORAM到RAM的数据传递ROM到RAM的数据传递根本运算程序1 初始化1)当程序上电复位时,一个完整的用户存放器初始化或清零动作是非常重要 的,否那么容易造成程序执行的不确定性。pre_clrRAM:y,#0z,#48Clryzdeemszbclrret清 RAM bankO2)系统存放器必须进行初始化,比方说I/O 方向和输出电平等。需要特 别说明的是输出的初女台化必须按照以下

22、顺序来处理:(1)设定相应I/O 输出上下电平(2)将相应I/O 为输出如此可确保MCU的I/O 从输入模式转为 输出模式时不会有脉冲的存在。而在I/O 控制频繁变化(如通信)时更要引 起注意。(3)mov a,# 11111111b如果和pl原来为输入高电平,当直接切换为输出方式时会有高电平脉 冲的输出,而这不是所希望的。p2m,a比# 11111100bp2,aa.#00001100b这样处理和pl就防止了离电平脉冲的输出mov a,#l 1111111b;bOmov p2m,a开机时后IO toggle的作法:利用暂时没有用到的IO做toggle可有效观察以下几点1 系统是否正常开机2 是否发生 reset or watchdog reset 现象3 程序是否重头运行观察IO toggle pulse width可以了解Internal RC频率的准确性或是协助调整外部 RC数值以上方法可以有效协助量产生产问题开机时后Test Mode的作法:Test Mode必须在开机时后按下某些组合按键同时通过de-bounce才可进入test mode2按键处理1 般来说key的处理是所有程序的根底教科书里面所教导的key处理观念 大多以delay循环与屡次检查来处理弹跳事件,但是此种方法由于导入delay循 环大大降低系统实时性,而大多使用者都没有

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1