单片机程序设计编程规范

合集下载

C51编程规范--很好的规范

C51编程规范--很好的规范

单片机C51编程规范1单片机C51编程规范-前言为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。

2 单片机C51编程规范-范围本标准规定了程序设计人员进行程序设计时必须遵循的规范。

本规范主要针对C51编程语言和kei§编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。

3 单片机C51编程规范-总则格式清晰注释简明扼要命名规范易懂函数模块化程序易读易维护功能准确实现代码空间效率和时间效率高适度的可扩展性4 单片机C51编程规范-数据类型定义编程时统一采用下述新类型名的方式定义数据类型。

建立一个datatype.h文件,在该文件中进行如下定义:typedef bit BOO§; // 位变量//typedef unsigned char INT8U; // 无符号8位整型变量//typedef signed char INT8S; // 有符号8位整型变量//typedef unsigned int INT16U; // 无符号16位整型变量//typedef signed int INT16S; // 有符号16位整型变量//typedef unsigned §ong INT32U; // 无符号32位整型变量//typedef signed §ong INT32S; // 有符号32位整型变量//typedef f§oat FP32; // 单精度浮点数(32位长度) //typedef doub§e FP64; // 双精度浮点数(64位长度) //5 单片机C51编程规范-标识符命名5.1 命名基本原则§命名要清晰明了,有明确含义,使用完整单词或约定俗成的缩写。

通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。

即"见名知意"。

单片机汇编语言程序设计

单片机汇编语言程序设计

单片机汇编语言程序设计在当今高科技时代,单片机有着广泛的应用领域,它是一种微型电脑系统,具有集成度高、功耗低等优点。

而单片机汇编语言程序设计则是单片机开发中最基础、最重要的一环。

本文将从基础概念、程序设计流程以及实例分析等方面,全面介绍单片机汇编语言程序设计。

一、基础概念1. 单片机单片机是一种集成度非常高的微型电脑系统,它由微处理器、内存、输入输出设备以及时钟电路等部分组成。

它的主要特点是片内集成度高,体积小,功耗低。

2. 汇编语言汇编语言是一种与机器语言一一对应的低级编程语言,它是用助记符、伪指令和机器指令等表示的,比机器语言更容易理解和编写。

3. 程序设计在单片机领域,程序设计是指利用汇编语言编写单片机程序的过程,目的是为了实现特定的功能。

程序设计需要包括程序编写、调试和优化等环节。

二、程序设计流程1. 确定需求在开始编写程序之前,首先需要明确需求。

根据需要实现的功能,确定程序设计的目标和要求。

2. 构思设计根据需求,进行程序的构思设计。

确定程序的结构,拟定算法和流程图,为后续的编码工作做好准备。

3. 编写代码在进行编写代码之前,需要先熟悉单片机的指令集和编程规范。

然后,根据构思设计的结果,使用汇编语言编写程序代码。

4. 调试测试编写完成代码后,需要进行调试测试。

通过单步执行、布点断点等方式,检查程序是否存在错误,是否能够正确运行。

5. 优化改进在经过测试后,根据实际情况进行优化改进。

可以通过优化算法、减少冗余代码等方式,提高程序的执行效率和稳定性。

6. 文档记录最后,需要对程序进行文档记录。

包括程序的说明、使用方法、注意事项等,方便后续的维护和升级。

三、实例分析以LED 点亮为例,演示单片机汇编语言程序设计的实际操作步骤。

1. 硬件连接将单片机与 LED 灯连接,以 STM32F103C8T6 开发板为例,连接方式如下:- 将 LED 的长脚连接至单片机的 GPIOA.0 引脚。

- 将 LED 的短脚连接至单片机的 GND 引脚。

51单片机控制LED灯程序设计

51单片机控制LED灯程序设计

51单片机控制LED灯程序设计首先,我们需要明确要使用到的硬件资源和引脚连接情况。

假设我们使用的是STC89C51单片机,LED灯的正极连接到单片机的P1口,负极通过电阻连接到地。

接下来,我们需要了解一些基本的汇编指令和编程规范。

在编写51单片机程序时,需要使用到一些特定的寄存器和指令。

首先是P1寄存器,它用来控制P1口的输出和输入状态。

然后是MOV指令,这是一个用来将数据从一个寄存器复制到另一个寄存器的指令。

最后是一个延时函数,可以利用循环来实现延时。

首先,我们需要初始化P1口为输出状态。

在51单片机中,IO口可以被配置为输入(1)或输出(0)。

我们可以使用MOV指令将0赋值给P1寄存器,将其配置为输出。

此外,我们还需要一个简单的延时函数,来控制LED灯的亮灭时间。

下面是一个基本的51单片机控制LED灯的程序:```assemblyORG0;程序的起始地址MOVP1,;初始化P1口为输出状态LOOP:;主循环MOVP1,;将P1的状态置为0,LED灯灭ACALLDELAY;调用延时函数,延时一段时间MOVP1,;将P1的状态置为1,LED灯亮ACALLDELAY;调用延时函数,延时一段时间JMPLOOP;无限循环DELAY:;延时函数MOVR3,;初始化循环计数器为250LOOP1:MOVR2,;初始化循环计数器为250LOOP2:MOVR1,;初始化循环计数器为250LOOP3:DJNZR1,LOOP3;内层循环DJNZR2,LOOP2;中层循环DJNZR3,LOOP1;外层循环RET;返回主程序```以上是一个简单的51单片机控制LED灯的汇编程序。

程序中通过不断切换P1口的状态来实现LED灯的亮灭。

同时,通过调用延时函数来实现亮灭的时间间隔。

在主循环中,LED灯会亮和灭各一段时间,然后无限循环。

为了将以上汇编程序烧录到单片机中,需要将其汇编为二进制文件。

通常可以使用Keil C等开发工具进行汇编和烧录操作。

「单片机硬件系统设计原则和应用编程技巧」

「单片机硬件系统设计原则和应用编程技巧」

「单片机硬件系统设计原则和应用编程技巧」单片机是一种集成电路芯片,具有处理器、存储器和输入输出控制器等基本功能,广泛应用于嵌入式系统中。

在进行单片机的硬件系统设计和应用编程时,需要遵循一些原则和技巧,以保证系统的稳定性和性能。

一、硬件系统设计原则:1.选择适合的单片机型号:根据具体应用需求选择合适的单片机型号,考虑其处理能力、接口数目、存储容量等因素。

2.合理设计电路连接:包括外围电路的设计、时钟源的选择、复位电路的设计等。

合理使用去耦电容、滤波电容等元器件,以保证电路的稳定性和抗干扰能力。

3.合理布局电路元件:将具有相互关联的元件尽量靠近,以减少互相之间的干扰。

同时,要考虑到元件的散热问题,合理布局散热器件。

4.正确选择电源:选择稳压电源和电池电源相结合的方式,保证电源电压的稳定性和可靠性。

5.注意信号的低噪声设计:减少线路中功率噪声、高频噪声的干扰,以保证信号的准确性和可靠性。

6.进行可靠性测试和验证:进行电路参数测试、温度试验、震动试验等,以确保单片机系统的可靠性。

1.熟悉单片机的架构和指令集:了解单片机的寄存器、外设接口等硬件结构,掌握其指令集编程指令。

2.合理规划和分配存储器空间:合理使用单片机的ROM和RAM存储空间,避免资源浪费和溢出。

3.编写简洁高效的代码:遵循良好的代码规范,尽量简化代码逻辑,减少不必要的条件分支和循环语句。

使用适当的数据结构和算法优化程序性能。

4.注意中断服务程序的设计:合理使用中断,将中断服务程序设计得简短高效,避免中断嵌套过深和占用过多的处理时间。

5.注意软硬件的时序关系:根据具体应用场景,注意软硬件信号的时序关系,防止由于时序上的冲突而导致程序错误。

6.进行调试和测试:通过使用单片机调试工具,例如仿真器和调试器,对编写的程序进行调试和测试,解决可能出现的问题。

总结起来,单片机硬件系统设计和应用编程需要遵循合理的设计原则,结合一些技巧,以确保系统的稳定性和性能。

单片机软件编程规范

单片机软件编程规范

1 编辑器 (3)2 程序文件的结构 (3)2.1 说明 (3)2.2 编译宏定义 (4)2.3 包含文件 (4)2.4 用户数据类型定义 (4)2.5 管脚定义 (5)2.6 常量 (5)2.7 变量 (5)2.8 正文 (6)2.8.1 正文顺序[推荐] (6)2.8.2 正文内容 (6)2.9 长的常量数组 (6)3 命名 (7)3.1 常量、编译宏命名 (7)3.2 变量命名 (7)3.3 函数命名 (8)4 程序的版式 (9)4.1 缩进:统一使用编辑器的TAB键进行缩进,同时设定其缩进量为系统默认 (9)4.2 空行:相对独立的程序块之间、变量说明之后必须加空行 (10)4.3 代码行 (11)4.3.1 一行代码只做一件事情 (11)4.3.2 if、for、while、do 等语句自占一行 (11)4.3.3 程序块的分界符独占一行 (12)4.3.4 多运算符的代码行,不使用默认优先级 (13)4.3.5 不要使用难懂的技巧性很高的语句 (13)4.4 空格 (14)4.4.1 必要时留空格,使代码更清晰[推荐] (14)4.4.2 二元操作符前后留空格 (14)4.4.3 一元操作符前后不留空格 (14)4.5 长行拆分 (15)4.5.1 较长的语句(>80字符)要分成多行书写 (15)4.5.2 循环、判断等语句要在低优先级操作符处划分新行 (16)4.5.3 函数或过程中的参数较长,则要进行适当的划分 (16)5 全局变量定义时初始化 (16)6 注释 (17)6.1 必须加注释的位置[推荐] (17)6.2 注释应适量且准确[推荐] (17)6.3 函数接口的注释格式 (17)6.4 变量的注释格式[推荐] (18)6.5 注释与所描述内容进行同样的缩排 (19)6.6 将注释与其上面的代码用空行隔开 (20)6.7 程序块结束行加注释[推荐] (20)7 EEPROM数据保护 (21)8 程序失效复位处理[推荐] (21)9 检查 (21)9.1 数组下标检查 (21)9.2 指针检查 (22)9.3 易混淆操作符检查 (22)9.4 右值变量检查 (22)9.5 差1错误检查 (22)9.6 变量溢出检查 (23)9.7 类型转换检查 (23)1编辑器程序统一使用VC的编辑器。

(完整版)单片机软件编程规范

(完整版)单片机软件编程规范

1 编辑器 (3)2 程序文件的结构 (3)2.1 说明 (3)2.2 编译宏定义 (4)2.3 包含文件 (4)2.4 用户数据类型定义 (4)2.5 管脚定义 (5)2.6 常量 (5)2.7 变量 (5)2.8 正文 (6)2.8.1 正文顺序[推荐] (6)2.8.2 正文内容 (6)2.9 长的常量数组 (6)3 命名 (7)3.1 常量、编译宏命名 (7)3.2 变量命名 (7)3.3 函数命名 (8)4 程序的版式 (9)4.1 缩进:统一使用编辑器的TAB键进行缩进,同时设定其缩进量为系统默认 (9)4.2 空行:相对独立的程序块之间、变量说明之后必须加空行 (10)4.3 代码行 (11)4.3.1 一行代码只做一件事情 (11)4.3.2 if、for、while、do 等语句自占一行 (11)4.3.3 程序块的分界符独占一行 (12)4.3.4 多运算符的代码行,不使用默认优先级 (13)4.3.5 不要使用难懂的技巧性很高的语句 (13)4.4 空格 (14)4.4.1 必要时留空格,使代码更清晰[推荐] (14)4.4.2 二元操作符前后留空格 (14)4.4.3 一元操作符前后不留空格 (14)4.5 长行拆分 (15)4.5.1 较长的语句(>80字符)要分成多行书写 (15)4.5.2 循环、判断等语句要在低优先级操作符处划分新行 (16)4.5.3 函数或过程中的参数较长,则要进行适当的划分 (16)5 全局变量定义时初始化 (16)6 注释 (17)6.1 必须加注释的位置[推荐] (17)6.2 注释应适量且准确[推荐] (17)6.3 函数接口的注释格式 (17)6.4 变量的注释格式[推荐] (18)6.5 注释与所描述内容进行同样的缩排 (19)6.6 将注释与其上面的代码用空行隔开 (20)6.7 程序块结束行加注释[推荐] (20)7 EEPROM数据保护 (21)8 程序失效复位处理[推荐] (21)9 检查 (21)9.1 数组下标检查 (21)9.2 指针检查 (22)9.3 易混淆操作符检查 (22)9.4 右值变量检查 (22)9.5 差1错误检查 (22)9.6 变量溢出检查 (23)9.7 类型转换检查 (23)1编辑器程序统一使用VC的编辑器。

单片机程序设计编程规范

单片机程序设计编程规范

单片机程序设计编程规范1. 概述本文将介绍单片机程序设计编程过程中应遵循的一些规范。

这些规范旨在提高程序的可读性、可维护性和可重用性,帮助开发人员编写出高质量的单片机程序。

2. 代码布局2.1 源文件结构每个源文件应包含程序的一个完整模块。

源文件以 `.c` 扩展名结尾。

源文件应包含适当的注释,以说明文件的目的和模块。

2.2 函数布局每个函数应尽可能短小,只完成一项具体的功能。

函数应使用有意义的名称,具有描述性。

函数应尽量避免超过 30 行的代码,如果超过应考虑是否需要进行函数分割。

3. 变量命名规范3.1 命名风格变量名应使用小写字母和下划线的组合,如 `my_variable`。

常量应使用全大写字母和下划线的组合,如 `MY_CONSTANT`。

3.2 变量名长度变量名应该具有描述性,尽量避免使用过于简单或过于复杂的变量名。

变量名长度应控制在 20 个字符以内,以保证可读性。

4. 注释规范4.1 文件注释每个源文件应包含文件注释,用于说明文件的目的和模块。

4.2 函数注释每个函数应包含函数注释,用于说明函数的功能、参数和返回值。

4.3 行内注释行内注释应用于解释代码的特定部分,帮助阅读者理解代码的意图。

5. 常量定义规范常量定义应尽量避免使用魔术数,应该使用有意义的常量名来代替。

6. 编码风格使用正确的缩进和对齐方式,以提高代码的可读性。

使用适当的空格来增强代码的可读性,但避免过多的空格导致代码冗长。

使用适当的命名风格和约定,以提高代码的可读性。

7. 错误处理每个函数应该有清晰的错误处理机制,包括返回值、错误码和异常处理等。

错误消息应清晰、明确,并有助于定位错误。

8. 代码复用尽量避免重复的代码,使用函数和模块的方式来实现代码复用。

开发人员应鼓励制定和使用通用的接口、库和模块,以提高代码复用性。

9. 版本管理定期对代码进行版本管理,并使用版本控制工具来管理代码的修改和更新。

10.本文介绍了单片机程序设计编程规范的一些基本原则。

单片机程序设计规范与技巧

单片机程序设计规范与技巧

单片机程序设计规范与技巧单片机程序设计规范与技巧1. 引言单片机程序设计是嵌入式系统开发中非常重要的一环。

为了提高代码的可读性、可维护性和可扩展性,我们需要遵循一些规范和技巧。

本文将介绍一些常用的单片机程序设计规范和技巧,帮助开发者编写高质量的单片机程序。

2. 命名规范良好的命名规范可以使代码更易于理解和维护。

以下是一些常用的命名规范:- 变量和函数命名应有描述性:命名应反映出其用途和含义,避免使用缩写或无意义的命名。

- 使用驼峰命名法:将多个单词连接起来,首字母小写,后面的单词首字母大写。

- 避免使用保留字和关键字:命名不应与单片机编程语言中的保留字和关键字相同。

- 常量使用全大写的下划线分隔:常量的命名应使用全大写字母,并用下划线分隔。

例如:```cint sensorValue; // 变量命名采用驼峰命名法void processSensorData(); // 函数命名采用驼峰命名法const int MAX_VALUE = 100; // 常量命名全大写并用下划线分隔```3. 注释规范良好的注释可以提供代码的理解和维护。

以下是一些常用的注释规范:- 函数头部注释:在函数定义之前写明函数的作用、输入输出参数以及返回值说明。

- 重要代码行注释:在关键代码行附近添加注释,解释代码的用途和逻辑。

- 注释代码的目的:当有代码被注释掉时,一定要注明原因,以免造成困惑。

例如:```c/brief 处理传感器数据param nonereturn none/void processSensorData() {// 读取传感器数据int sensorValue = readSensor();// 处理传感器数据//}```4. 函数规范函数是单片机程序的核心组成部分,使用规范的函数可以提高代码的可读性和可维护性。

以下是一些常用的函数规范:- 函数功能单一:每个函数应该只负责一项具体的功能,避免函数功能过于复杂。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机程序设计编程规范本规范适用于松翰科技 8-bit MCU部门汇编程序编写准则,同样适用于代理商及重要客户工程师编程规范参考。

本规范的目的为统一编程风格,保证程序编写质量,提高程序的可移植性和维护性。

大部分的规范严格, 品质要求高的软件公司对员工编写代码的风格都有硬性规定, 例如缩排的使用,TAB 的长度,函数变量的命名方式。

这些规定的明显好处是可以统一规范不同程序员所编制的代码,提升程序代码的可读性与可维护性,同时统一格式的编程风格也为code review提供方便。

目录一、设计总则二、排版风格三、程序可读性及可维护性四、注释五、变量命名规则六、常量命名规则七、标号命名规则八、文件命名规则及文件分割九、标准程序模块十、附录一、设计总则1.程序质量的评估程序的优劣可以从两个方面进行评估,定量指标和定性指标。

定量指标包括:1) 程序代码执行效率;2) 程序占用资源多少。

定性指标包括:1) 可调试性,即是否方便排除程序语法错误;2) 可测试性,即是否方便验证程序功能的正确性;3) 可维护性,即是否方便程序的修改和升级;4) 可移植性;5) 可读性。

2、程序架构为了便于维护和移植,推荐使用层次化的软件设计方法。

可把整个软件分为三层:应用层、界面层和底层驱动层。

各层之间的关系如下图所示。

层次化设计说明:1) 底层驱动层主要包含直接和硬件相关的驱动程序,如数码管显示、按键、峰鸣器、继电器和电机控制等。

底层的各个模块间要保持各自的独立性,不产生直接的数据交互,底层也不直接访问应用层,如果有需要,都要通过界面层进行数据交互。

2) 界面层主要提供数据交互,为应用层和底层驱动之间以及底层驱动层各模块之间提供数据的交互。

3) 应用层主要完成具体功能的实现,它要通过界面层控制底层驱动层各模块来完成所需功能,而不能越过界面层直接访问底层驱动层。

所有的用户接口要在应用层来实现。

4) 一个好的架构必须将底层硬件包装起来,为应用程序提供一组丰富的函数操作(buffer or parameter),例如在中断的处理中,应用程序不需要资料中断的堆栈如何保护不需要知道地址操作, 只需要读取中断产生的旗标动作。

5) 在即时性软件系统里面,对达到高效率的实时性与反应力, 所以程序使用大量的事件触发方式来设计任务。

事件有可能来自外部的触发(key , rxdata , sensor detect, …)也可能是系统内部自行产生的(Timer, alarm, flag),与事件触发方式相对应的是定时查询方式(polling),一般来说polling 效率较差因为有多余的动作而且系统反应时间与查询polling时间间隔有关, 但是在小型的MCU系统里面用Polling方式反而简单许多。

3、设计基本原则1) 尽量减少各个子程序功能模块间的耦合度(耦合度是指一个程序的执行对另一个程序的影响力),保证各自的独立性。

一般情况下,建议子程序模块功能的划分要尽可能细化,功能尽量单一,减少子程序模块间的数据交互。

2) 在满足功能需求的情况下,可适当牺牲代码的执行速度,以保证程序的透明度。

3) 主要子程序模块间的交互,要通过特定的界面跟应用层进行沟通,可使用 FIFO(First in,First out)或是 Buffer 两种方式。

每种子程序模块都可以有自己的FIFO。

例如:就按键来说,一般有 Key buffer、Key FIFO 或直接进入AP FIFO三种设计方式。

Key buffer:一般用于保存数字按键信息。

例如:在电话机的设计中,需要记录按键内容用于LCD 显示、最后数字确认、数字存储等,这时候需要把按键值的信息(0123456789*#)记录在 Key buffer 中。

Key FIFO:一些功能按键可以将相应信息列入到Key FIFO中,等待应用层的取用,这样可根据不同的工作模式进行不同的处理及动作。

这些类似的观念可以应用在许多周边中:输入类:Key、RF Data input、UART data input、Switch input等。

输出类:LCD display、LED display、UART data output等。

APP FIFO(应用界面层):主要是将发生的事件储存在APP FIFO里面等待适当的时间依序处理,不然有可能造成系统在某一程序物件里面循环,从而降低系统的实时性(Real-Time)。

4)每个子程序模块只能有唯一一个程序入口地址在程序的首部,只能有唯一一个程序出口地址在程序的尾部。

例如:以下的写法是不规范的(两个RET出口,存在调试时不易设立断点,程序可读性降低等问题):lable:b0bts0 fzret…clr yret应该改为(只有一个出口位置,标号为 lable90,便于程序检查):lable:b0bts0 fzjmp lable90…clr ylable90:ret5) 上电复位时要对所有的RAM空间进行初始化(建议用户寄存器清零,系统寄存器进行必要设定),不要使用未经初始化的变量。

RAM未经过完整的初始化,容易导致程序执行的不确定性,这一不良现象往往在批量生产中有所体现。

(这点是工程师经常犯错的地方,须特别注意)6) 系统中如果需要等待一些未知的应答信号,如通信或等待输入信号时,必须进行超时或异常处理,以防止程序进入“死等”状态。

例如在红外接收中,由于信号的突然消失或干扰从而无法得到一帧完整或正确的信息,这时需要复位接收程序的入口条件并退出接收程序,而不是一直等待信号的来临。

不然无法进行下次接收甚至会影响到其它程序的执行。

7) 通过对系统数据结构的划分与组织的改进,以及对程序算法的优化来提高空间效率。

这种方式是解决软件空间效率的根本办法。

8) 保证循环体内的工作量最小化。

应仔细考虑循环体内的语句是否可以放在循环体之外,使循环体内工作量最小,从而提高程序的执行效率。

9) 在多重循环中,应将最忙的循环放在最内层。

10) 中断处理程序应尽量短。

有效的作法为:在中断中进行标记,在主程序中进行处理。

但一些实时性要求较高的程序例外。

此外,进入中断时应该保存涉及到的变量和寄存器。

11) 看门狗的正确使用。

看门狗主要用于微控制器死机时的时间溢出复位,需要程序适时清除。

正确的处理方式为:整个系统程序中尽量保证只有一处清看门狗位置,而且应处在主循环的主干位置。

切记不可在定时中断中清狗,因为微控制器有时只是在主循环中死掉。

(所有AC电源的应用程序都必须强迫加入看门狗选项尤其是条件式的看门狗有利于系统发生异常后的重启动)二、排版风格1、程序采用缩进风格编写,缩进为1个Tab 键,1个Tab键定义为8个空格位。

2、程序中的标号要从第一列开始书写。

以“.”开头的预编译命令也要从第一列开始书写,其他预编译命令采用缩进风格编写。

例如:1) 以“.”开头的预编译命令要从第一列开始书写,其他预编译命令采用缩进风格书写。

.LIST ;从第一列开始书写INCLUDESTD macro1.h.CONSTNUMBER EQU 55h.DATAwk00 DS 1.CODEORG 0h2) 标号要从第一列开始书写。

main: ;从第一列开始…jmp main ;缩进8个空格位3)变量或常量的定义采用缩进风格。

例如:.DATAkeybuf DS 1.CONSTNUMBER EQU 84)定义变量或常量时,变量名或常量名与命令符之间使用2个Tab键(相当于16个空格位)分开,命令符与后面的操作数用1个Tab键(相当于8个空格位)分开。

例如:keybuf DS 1NUMBER EQU 55h5)操作码与操作数之间用1个Tab键(相当于8个空格位)分开。

例如:ORG 80hmov a,NUMBERtable:DW 1234h6.)程序中两个操作数之间用一个“,”作为分隔符,“#”号与立即数之间不需要分隔符。

例如:Mov a,#55h7)标号要单独占一行。

8)相对独立的程序块之间必须加空行。

例如:ORG 10hINCLUDE sys.asmINCLUDE int.asmINCLUDE key.asm9)程序语句后面若有注释,所有的注释要遵守上下对齐的原则。

例如:b0mov l,#7fh ;use dp0x(hl) pointermov a,#00 ;set pointer = 007fh应该书写为:b0mov l,#7fh ;use dp0x(hl) pointermov a,#00 ;set pointer = 007fh三、程序可读性与可维护性1.程序中的语句、标号、变量使用小写英文字母,常量与预编译命令使用大写英文字母,以便和一般的语句进行区分。

例如:NUMBER EQU 55h.DATAaccbuf DS 1.CODE…mov a,#NUMBER2.表示不同进制的立即数,要在立即数后面加上不同的进制符号。

例如:mov a,#00100011bmov a,#23h不建议使用:mov a,#0x233.一般情况下,变量和常量要分开定义,不要混在一起。

变量在“.DATA ”段中定义,采用命令符“DS” ,常量在”.CONST ”段中定义,采用命令符“EQU”。

例如:.CONSTNUMBER EQU 10.DATAAccbuf DS 14.程序中不使用未定义或意义不明确的常量。

例如:下面的赋值方法要避免使用:…mov a,#3 ;不要直接使用意义不明确的数字在常量中做定义mov r,a…建议采用如下赋值方法:.CONSTNUMBER EQU 3 ;循环次数….CODE…mov a,#NUMBERmov r,a5.整个程序的结尾要以“ENDP”语句结束。

6.当一段代码在程序中有多个地方使用时,建议采用子程序调用或宏命令的方式来替代。

如此,对该代码段的修改就可在一处完成,增强代码的可维护性。

7.程序中关系较为密切的子程序代码尽可能相邻。

8.避免程序中的垃圾代码,预留代码应以注释的方式出现。

程序中的垃圾代码不仅占用额外的空间,而且还可能影响到程序的功能与性能,很可能给程序的测试、维护等造成不必要的麻烦。

四、注释1.程序应该包括两个部分注释,说明部分和语句注释。

一般情况下,源程序有效注释量必须在30%以上。

2.说明部分:1) 源文件说明部分位于每个源文件的最前面,主要描述:文件名、作者、生成日期、联络方式、功能描述、版本号、软硬件平台、版权说明、修改记录等的简要说明,以英文书写。

例如:/**********************************File name: ;文件名Author: ;作者Date: ;日期Email: ;邮箱地址Description: ;功能描述Version: ; 版本号Hardware&IDE ;软硬件平台Copyright (C), SONIX TECHNOLOGY Co., Ltd.History: ;修改记录**********************************/2)子程序说明部分位于每个子程序的最前面,主要描述:子程序名称、功能、设计原理、所用变量、入口条件、出口信息、调用模块、堆栈层数、影响资源、算法简述、使用说明和修改记录等。

相关文档
最新文档