单片机汇编语言编程规范
单片机指令集的汇编语言编程方法介绍

单片机指令集的汇编语言编程方法介绍汇编语言是一种低级语言,它直接与计算机硬件进行交互,被广泛应用于单片机编程中。
本文将介绍单片机指令集的汇编语言编程方法。
一、简介单片机指令集是特定型号单片机支持的操作指令的集合。
每个指令都对应着特定的功能,通过组合和调用这些指令,可以实现复杂的计算和控制任务。
二、基本指令1. 数据传送指令数据传送指令用于将数据从一个位置传送到另一个位置。
常见的指令有MOV(将源操作数传送到目的操作数)、LDR(将存储器位置的数据传送到寄存器)和STR(将寄存器中的数据传送到存储器位置)等。
2. 算术指令算术指令用于进行数学运算,包括加法、减法、乘法和除法等。
常见的指令有ADD(将两个操作数相加并将结果存储到目的操作数中)、SUB(将目的操作数减去源操作数并将结果存储到目的操作数中)等。
3. 逻辑指令逻辑指令用于进行逻辑运算,包括与、或、非和异或等。
常见的指令有AND(将两个操作数进行按位与运算并将结果存储到目的操作数中)、ORR(将两个操作数进行按位或运算并将结果存储到目的操作数中)等。
4. 控制指令控制指令用于控制程序的执行流程,包括无条件跳转、条件跳转和中断等。
常见的指令有B(无条件跳转到指定的地址执行)、BEQ (当条件满足时跳转到指定的地址执行)等。
三、编程方法1. 熟悉指令集编程前需要详细了解所使用的单片机的指令集,包括指令的功能、操作数的类型和寻址方式等。
只有深入了解指令集,才能灵活运用指令编写程序。
2. 设计算法在开始编程之前,需要分析问题,设计出解决问题的算法。
算法应考虑输入、处理和输出等方面,合理利用指令集中的指令实现算法的逻辑。
3. 编写汇编程序根据算法,以汇编语言的格式编写程序。
程序的编写过程需要遵循指令的语法规则和寻址方式,并注意程序的可读性和效率。
4. 调试和优化程序编写完成后,需要进行程序的调试和优化。
通过单步执行程序,观察和检查程序执行过程中的中间结果,确保程序能够正确地执行。
单片机汇编语言程序设计

单片机汇编语言程序设计在当今高科技时代,单片机有着广泛的应用领域,它是一种微型电脑系统,具有集成度高、功耗低等优点。
而单片机汇编语言程序设计则是单片机开发中最基础、最重要的一环。
本文将从基础概念、程序设计流程以及实例分析等方面,全面介绍单片机汇编语言程序设计。
一、基础概念1. 单片机单片机是一种集成度非常高的微型电脑系统,它由微处理器、内存、输入输出设备以及时钟电路等部分组成。
它的主要特点是片内集成度高,体积小,功耗低。
2. 汇编语言汇编语言是一种与机器语言一一对应的低级编程语言,它是用助记符、伪指令和机器指令等表示的,比机器语言更容易理解和编写。
3. 程序设计在单片机领域,程序设计是指利用汇编语言编写单片机程序的过程,目的是为了实现特定的功能。
程序设计需要包括程序编写、调试和优化等环节。
二、程序设计流程1. 确定需求在开始编写程序之前,首先需要明确需求。
根据需要实现的功能,确定程序设计的目标和要求。
2. 构思设计根据需求,进行程序的构思设计。
确定程序的结构,拟定算法和流程图,为后续的编码工作做好准备。
3. 编写代码在进行编写代码之前,需要先熟悉单片机的指令集和编程规范。
然后,根据构思设计的结果,使用汇编语言编写程序代码。
4. 调试测试编写完成代码后,需要进行调试测试。
通过单步执行、布点断点等方式,检查程序是否存在错误,是否能够正确运行。
5. 优化改进在经过测试后,根据实际情况进行优化改进。
可以通过优化算法、减少冗余代码等方式,提高程序的执行效率和稳定性。
6. 文档记录最后,需要对程序进行文档记录。
包括程序的说明、使用方法、注意事项等,方便后续的维护和升级。
三、实例分析以LED 点亮为例,演示单片机汇编语言程序设计的实际操作步骤。
1. 硬件连接将单片机与 LED 灯连接,以 STM32F103C8T6 开发板为例,连接方式如下:- 将 LED 的长脚连接至单片机的 GPIOA.0 引脚。
- 将 LED 的短脚连接至单片机的 GND 引脚。
80c51汇编语言指令格式

80c51汇编语言指令格式80C51汇编语言是一种低级编程语言,主要用于对8051系列单片机进行编程。
在80C51汇编语言中,指令格式基本上由操作码、操作数和注释组成。
下面将详细介绍80C51汇编指令的格式。
1.操作码(Opcode):操作码是指令的基本操作,决定了执行指令时处理器应该进行的具体操作。
80C51汇编指令的操作码包括一字节,可以是直接指令,也可以是扩展指令。
-直接指令:直接在指令中给出操作数,可以是寄存器、立即数、或者存储器地址。
指令的操作码如MOV、ADD等。
-扩展指令:扩展指令需要使用扩展二字节的形式,扩展二字节包括操作码和相关的操作数。
扩展指令的操作码如JMP、CALL等。
2.操作数(Operand):操作数位于指令的操作码之后,在指令中给出具体的数据或者数据的地址。
操作数的格式可以是直接给出的数据,也可以是通过地址访问的数据。
-立即数(Immediate value):直接给出的数据,一般用来作为常数或者立即加载到寄存器中的数据。
-寄存器(Register):指令操作数为特定的寄存器,分为通用寄存器和特殊功能寄存器两种。
-存储器(Memory):通过给出地址的方式访问存储器中的数据,可以是位于内部RAM或外部存储器中的数据。
3.注释(Comments):注释是对指令的解释和说明,用于增加代码的可读性。
在80C51汇编语言中,注释以分号(;)开头,并紧跟在指令或数据的后面。
下面是一些80C51汇编指令的例子以加深理解:1. MOV指令的格式:MOV A, #10 ;将立即数10加载到累加器A中MOV R1, R0 ;将R0的值复制到R1中2. ADD指令的格式:ADD A, R1 ;将累加器A与R1中的值相加,并将结果存回A中ADD A, #5 ;将累加器A与立即数5相加,并将结果存回A中3. JMP指令的格式:JMP 1000 ;无条件跳转到内存地址为1000的位置继续执行指令4. CALL指令的格式:CALL 2000 ;调用一个子程序,跳转到内存地址为2000的位置执行指令,并在子程序执行完成后返回到指令的下一条指令继续执行5. SJMP指令的格式:SJMP label ;有条件跳转指令,根据条件跳转到指定标签处执行指令6. RET指令的格式:RET ;用于从子程序返回主程序,并继续执行主程序的下一条指令总结:80C51汇编语言指令的格式主要由操作码、操作数和注释组成。
8051单片机汇编语言程序设计

8051单片机汇编语言程序设计一、顺序结构1.有两个4位压缩BCD码,分别存放在30H,31H,40H,41H单元,要求求和,结果送至51H,52H中(高位在前,地位在后),给出程序流程图ORG 0000HCLR CMOV A,31HADD A,41HDA AMOV 52H,AMOV A,30HADDC A,40HDA AMOV 51H,AEND若需要求和的数为5271和6489,请分析每条指令后A和PSW的对应的数据二、分支结构2.求双字节有符号数的补码(双字节数为16位二进制数,其最高位D15为符号位),给出程序流程图和程序代码(单分支结构)CPT16:MOV A,R7JNB ACC.7,EXTMOV C,ACC.7MOV F0,CCPL AMOV R7,AMOV A,R6CPL AADD A,#01MOV R6,ACLR AADDC A,R7MOV C,F0MOV ACC.7,CMOV R7,AEXT: RET验证以上程序对-12597和6831两数的结果是否正确。
3.求分段函数的值,X是自变量存放在30H单元,Y是因变量存放在31H单元,给出程序流程图和程序代码(多分支结构A:逐次比较法)100010X X Y X X +>⎧⎪==⎨⎪-<⎩ FUNC1:MOV A,30HCJNE A,#00H,NZEROAJMP NEGTNZERO: JB ACC.7,POSITADD A,#1AJMP NEGTPOSIT: MOV A,#81HNEGT: MOV 31H,ARET4. 根据31H (高字节)、30H (低字节)的内容(分支转移参数)转向不同的处理程序(PRGX(X=0~n ,n>256)),给出程序流程图和程序代码(多分支结构B :转移表)JUMP1:MOV DPTR,#TAB1MOV A,30HMOV B,#3MUL ABMOV R3,AMOV A,BADD A,DPHMOV DPH,AMOV A,31HMOV B,#3MUL ABADD A,DPHMOV DPH,AMOV A,R3JMP @A+DPTRTAB1: LJMP PRG0LJMP PRG1LJMP PRGn若(31H30H )=364,则分析每条指令后A ,B ,DPTR 对应的数值。
PIC单片机汇编编程规范

PIC单片机汇编编程规范1000字
PIC单片机汇编编程规范
1.注释:注释应该在指令上面且不应该超过一行。
可以使用“;”或“#”来注释指令或者是数据。
注释应该清晰明了,简短明了,并且应该遵循英文语法规则。
2.代码布局:代码应该分成模块或者函数,每个模块或函数应该有一个标签或标识符以及该模块或函数的注释。
代码应该根据它们的功能分组。
3.变量命名:变量应该有一个清晰的名称,并且应该遵循英文命名规则,例如,变量名不应该包含特殊字符或空格。
变量名称应该有一些含义,并且应该简短明了。
4.缩进:代码的缩进非常重要,可以增加代码的可读性。
应该使用适当的缩进来表示代码层次结构。
5.默认数据类型:可以使用“C”作为默认的数据类型,例如:DAT 0xC0 ;定义一个BYTE类型变量。
6.标签:标签应该有一个清晰明了的名称,并且应该简短明了。
标签应该在对应代码的上方,使用适当的缩进。
7.空格:应该在运算符的两侧加上空格,例如,“ADDWF F, W”而不是“ADDWFF,W”。
8.注释:应该在指令上方加上注释,并且注释应该简短明了。
9.代码格式:代码应该有适当的空格和缩进,应该使用换行符来分割不同的代码块。
10.常量定义:常量定义应该有适当的注释,并且应该使用适当的缩进。
总之,遵循上述规范可以使汇编代码更加清晰易懂,在编写和调试时也更加方便。
单片机c51汇编语言51单片机汇编语言

单片机c51汇编语言51单片机汇编语言单片机C51汇编语言单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。
汇编语言是一种低级语言,是用于编写单片机指令的一种语言。
汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。
本文将介绍单片机C51的汇编语言编程。
一、了解单片机C51单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。
C51指的是Intel公司推出的一种基于MCS-51架构的单片机。
该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。
二、汇编语言的基本概念汇编语言是一种低级语言,与机器语言紧密相关。
它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。
在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。
三、汇编语言的基本指令在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。
以下是一些常用的指令:1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。
2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存器中。
3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存储到目的寄存器中。
4. JMP指令:用于无条件跳转到指定的地址。
5. JZ指令:用于在条件为零时跳转到指定的地址。
6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。
四、编写单片机C51汇编程序的步骤编写单片机C51汇编程序需要按照以下步骤进行:1. 确定程序的功能和目标。
2. 分析程序的控制流程和数据流程。
3. 设计算法和数据结构。
4. 编写汇编指令,实现程序的功能。
5. 调试程序,并进行测试。
六、实例演示以下是一个简单的单片机C51汇编程序的示例,用于实现两个数的相加,并将结果输出到LED灯上:org 0H ; 程序的起始地址为0mov a, 05H ; 将05H赋值给累加器mov b, 07H ; 将07H赋值给B寄存器add a, b ; 将A寄存器和B寄存器的值相加mov P1, a ; 将相加结果输出到P1口end ; 程序结束在这个例子中,首先将05H赋值给累加器A,然后将07H赋值给B寄存器,接着使用ADD指令将A和B的值相加,将结果存储到累加器A中,最后将累加器A的值输出到P1口。
51单片机c语音 rrc汇编写法

近年来,随着物联网和嵌入式系统的快速发展,对嵌入式系统的需求也日益增长。
51单片机作为一种经典的嵌入式系统芯片,一直以来都备受工程师和科技爱好者的喜爱。
在嵌入式系统中,51单片机的C语言和汇编语言编程是必不可少的技能。
本文将介绍51单片机C语言和RRC汇编编程的技巧和方法。
1. 51单片机C语言编程51单片机的C语言编程是一种相对简单易学的编程方法。
通过C语言,可以实现对于51单片机的各种功能进行控制和操作。
在进行51单片机C语言编程时,首先需要熟悉51单片机的C语言编程环境和开发工具。
常用的51单片机C语言编程环境有Keil C51、SDCC等。
在选择合适的开发环境后,就可以开始进行51单片机C语言编程。
在编写C语言程序时,需要注意对51单片机的外设进行正确的配置和初始化,以及对硬件资源的合理利用。
另外,对于一些特殊的应用,可能需要对中断、定时器、串口等进行特殊的处理。
2. 51单片机RRC汇编编程在嵌入式系统中,汇编程序通常被用于对特定的硬件进行底层控制和优化。
对于51单片机来说,RRC汇编语言是一种常用的低级语言。
在进行51单片机RRC汇编编程时,需要对51单片机的指令集和寄存器进行深入的了解。
通过RRC汇编语言,可以直接对51单片机的硬件进行操作,实现对于特定硬件资源的高效控制。
在进行RRC汇编编程时,需要注意对内存和寄存器的管理,以及对51单片机的中断和外设的处理。
3. 51单片机C语言和RRC汇编编程的应用通过学习51单片机C语言和RRC汇编编程,可以实现对于各种应用的快速开发和优化。
在工业控制、通信系统、自动化设备等领域,都可以广泛应用51单片机C语言和RRC汇编编程技术。
通过合理的软件设计和编程,可以实现对51单片机硬件资源的高效利用,提高系统的稳定性和可靠性。
另外,通过C语言和RRC汇编的结合使用,可以实现对于嵌入式系统应用的灵活性和高性能要求。
4. 总结通过对51单片机C语言和RRC汇编编程的初步介绍,可以看出这两种编程方法对于嵌入式系统的开发和优化具有重要的意义。
第4章 STC单片机汇编语言编程

【例4.2】
AD1
EQU 30H
DAT1 MOV
EQU 40H A, #DAT1 ;(A)←40H
MOV AD1,A
;(30H)←A
• 本指令是对符号定义的主要伪指令。在这个例子中,程序中使用到的符 号AD1、DAT1,在汇编时都会被EQU右面的数据所代替。
单片机原理与接口技术————基于STC15系列的51单片机原理
因此,一个源程序只能有一个END语句,而且必须放在整 个程序末尾。
单片机原理与接口技术————基于STC15系列的51单片机原理
第3章 STC15单片机的指令系统
三、伪指令
3.赋值命令 EQU
用于给它左边的“字符名称”赋值,其格式为: 字符名称 EQU 赋值项 赋值后的字符名称既可以作为地址使用,也可以作立即数使用。
第3章 STC15单片机的指令系统
三、伪指令
1.设置起始地址ORG
• 指令格式: [标号:] ORG 地址 • 指明程序和数据块起始地址。汇编过程中,汇编程序将该语句
的后续目标程序按ORG后面的16位地址或标号存入相应存储单 元。ORG伪指令总是出现在每段源程序或数据块的开始。如果 不用ORG指令,则汇编将从0000H单元开始存放目标程序。
ORG伪指令规定了START代表地址1000H,目标程序的第一条指令从1000H开 始存放。
注意,用ORG定义空间地址在源程序中,应由小到大,不能重叠。
单片机原理与接口技术————基于STC15系列的51单片机原理
第3章 STC15单片机的指令系统
三、伪指令
2.汇编终止END
• END是汇编语言源程序的结束标志,用来终止汇编工作。 • 在机器汇编时,汇编程序对END后面的指令都不予汇编。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机汇编语言编程规范2008年09月13日星期六 11:51 A.M.单片机汇编语言编程规范软件设计更多地是一种工程,而不是一种个人艺术。
如果不统一编程规范,最终写出的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。
分析表明,编码阶段产生的错误当中,语法错误大概占20%左右,而由于未严格检查软件逻辑导致的错误、函数(模块)之间接口错误及由于代码可理解度低导致优化维护阶段对代码的错误修改引起的错误则占了一半以上。
可见,提高软件质量必须降低编码阶段的错误率。
如何有效降低编码阶段的错误呢?这需要制定详细的软件编程规范,并培训每一位程序员,最终的结果可以把编码阶段的错误降至10%左右,同时也降低了程序的测试费用,效果相当显著。
本文从代码的可维护性(可读性、可理解性、可修改性)、代码逻辑与效率、函数(模块)接口、可测试性四个方面阐述了软件编程规范,规范分成规则和建议两种,其中规则部分为强制执行项目,而建议部分则不作强制,可根据习惯取舍。
1.排版规则1程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB 和空格缩进。
缩进的目的是使程序结构清晰,便于阅读和理解。
<TAB>默认宽度应为8 个空格,由于Word 中<TAB>为4 个空格,为示范清晰,此处用2 个<TAB>代替(下同)。
例如:MOV R1, #00HMOV R2, #00HMOV PMR, #PMRNORMALMOV DPS, #FLAGDPTRMOV DPTR, #ADDREEPROMread1kloop:read1kpage:INC R1MOVX A, @DPTRMOV SBUF, AJNB TI, $CLR TIINC DPTRCJNE R1, #20H, read1kpageINC R2MOV R1, #00HCJNE R2, #20H, read1kloop ;END OF EEPROM规则2在指令的操作数之间的,使用空格进行间隔,采用这种松散方式编写代码的目的是使代码更加清晰。
例如:CJNE R2, #20H, read1kloop ;END OF EEPROM规则3一行最多写一条语句。
规则4变量定义时,保持对齐。
便于阅读和检查内存的使用情况。
例如:RegLEDLOSS EQU 30H ; VARIABLE ;TESTLED==RegLEDLOSS.0RegLEDRA EQU 31H ; VARIABLERUNLED_Flag EQU 32H ; VARIABLE ;256ms 改变一次RUNLED 状态RUNLED_Def EQU 10H ; STATIC ;16*32ms=500ms 改变一次LED 状态2.注释注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,太少不利于代码理解,太多则会对阅读产生干扰,因此只在必要的地方才加注释,而且注释要准确、易懂、尽可能简洁。
注释量一般控制在30%到50%之间。
规则1程序在必要的地方必须有注释,注释要准确、易懂、简洁。
例如如下注释意义不大:MOV DXCE1COUNTER, #00H ; 将DXCE1COUNTER 赋值为0而如下的注释则给出了额外有用的信息:JNZ PcComm_Err ; 假如校验出错规则2注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
规则3头文件、源文件的头部,应进行注释。
注释必须列出:文件名、作者、目的、功能、修改日志等。
规则4函数头部应进行注释,列出:函数的目的、功能、输入参数、输出参数、涉及到的通用变量和寄存器、调用的其他函数和模块、修改日志等。
对一些复杂的函数,在注释中最好提供典型用法。
规则5对重要代码段的功能、意图进行注释,提供有用的、额外的信息。
并在该代码段的结束处加一行注释表示该段代码结束。
对于所有的常量,变量,数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,在声明时都必须加以注释,说明其含义。
规则 7维护代码时,要更新相应的注释,删除不再有用的注释。
保持代码、注释的一致性,避免产生误解。
3.命名规则 1标识符缩写形成缩写的几种技术:1) 去掉所有的不在词头的元音字母。
如screen 写成scrn, primtive 写成prmv。
2) 使用每个单词的头一个或几个字母。
如Channel Activation 写成ChanActiv,ReleaseIndication 写成RelInd。
3) 使用变量名中每个有典型意义的单词。
如Count of Failure 写成FailCnt。
4) 去掉无用的单词后缀 ing, ed 等。
如Paging Request 写成PagReq。
5) 使用标准的或惯用的缩写形式(包括协议文件中出现的缩写形式)。
如BSIC(Base Station Identification Code)、MAP(Mobile Application Part)。
关于缩写的准则:1) 缩写应该保持一致性。
如Channel 不要有时缩写成Chan,有时缩写成Ch。
Length 有时缩写成Len,有时缩写成len。
2) 在源代码头部加入注解来说明协议相关的、非通用缩写。
3) 标识符的长度不超过12 个字符。
规则2变量命名约定:<前缀> + 主体 ; 注释变量命名要考虑简单、直观、不易混淆。
前缀是可选项,表示变量类型,由于汇编中变量多是单字节变量,所以单字节变量可以不加前缀,对于bit 和双字节型变量,使用小写的b 和d 作为前缀表示。
主体是必选项,可多个单词(或缩写)合在一起,每个单词首字母大写,其余部分小写。
规则3常量的命名常量的命名规则:单词的字母全部大写,各单词之间用下划线隔开。
规则4函数的命名单词首字母为大写,其余均为小写。
函数名应以一个动词开头,即函数名应类似一个动词断语或祈使句。
例如:Test_Protect, Check_EEPROM, Init_Para4.可维护性规则1函数和过程中关系较为紧密的代码尽可能相邻。
规则2每个函数的源程序行数原则上应该少于200 行。
对于消息分流处理函数,完成的功能统一,但由于消息的种类多,可能超过200 行的限制,不属于违反规定。
规则3语句嵌套层次不得超过5 层。
嵌套层次太多,增加了代码的复杂度及测试的难度,容易出错,增加代码维护的难度。
规则4避免相同的代码段在多个地方出现。
当某段代码需在不同的地方重复使用时,应根据代码段的规模大小使用函数调用或宏调用的方式代替。
这样,对该代码段的修改就可在一处完成,增强代码的可维护性。
规则5每个函数完成单一的功能,不设计多用途面面俱到的函数。
多功能集于一身的函数,很可能使函数的理解、测试、维护等变得困难。
使函数功能明确化,增加程序可读性,亦可方便维护、测试。
规则6在函数的项目维护文档中,应该指出软件适用的硬件平台及版本。
建议1使用专门的初始化函数对所有的公共变量进行初始化。
5.程序正确性、效率规则1严禁使用未经初始化的变量。
引用未经初始化的变量可能会产生不可预知的后果,特别是引用未经初始化的指针经常会导致系统崩溃,需特别注意。
规则2防止内存操作越界。
说明:内存操作越界是软件系统主要错误之一,后果往往非常严重。
规则3注意变量的有效取值范围,防止表达式出现上溢或下溢。
规则4防止易混淆的指令和操作数拼写错误。
规则5避免函数中不必要语句,防止程序中的垃圾代码,预留代码应以注释的方式出现。
程序中的垃圾代码不仅占用额外的空间,而且还常常影响程序的功能与性能,很可能给程序的测试、维护等造成不必要的麻烦。
规则6通过对系统数据结构的划分与组织的改进,以及对程序算法的优化来提高空间效率。
这种方式是解决软件空间效率的根本办法。
规则7循环体内工作量最小化。
应仔细考虑循环体内的语句是否可以放在循环体之外,使循环体内工作量最小,从而提高程序的时间效率。
在多重循环中,应将最忙的循环放在最内层。
规则9避免循环体内含判断语句,将与循环变量无关的判断语句移到循环体外。
目的是减少判断次数。
循环体中的判断语句是否可以移到循环体外,要视程序的具体情况而言,一般情况,与循环变量无关的判断语句可以移到循环体外,而有关的则不可以。
规则10中断和恢复中断程序应该尽量短,应该在中断中进行标记,在主程序中处理。
但实时性很高的程序段例外。
中断时应该保存所有涉及到的通用变量和寄存器,如A, PSW, DPTR 等。
规则11堆栈设置堆栈对于程序非常重要,对于堆栈的设置要合理。
堆栈太小,在嵌套调用和容易溢出,造成系统故障;堆栈太大,浪费RAM 资源。
为了节约堆栈资源,中断时要求不要保存太多资源,中断嵌套和程序嵌套层数不要太多,尽量不要超过5层。
这就要求合理的划分功能模块。
规则12看门狗看门狗电路用于在单片机死机时自动复位。
单片机需要定时向看门狗发送脉冲,俗称”喂狗”。
喂狗不可太勤,这样看门狗没有起到作用;也不可太慢,这样容易造成单片机复位。
正确的喂狗应该在主循环中进行,最好是建立一个独立的系统监控进程。
不可以在定时中断中喂狗,应为单片机有时可能会在主循环中死掉。
6.接口规则1去掉没有必要的公共变量,编程时应尽量少用公共变量。
公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。
应该构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象。
规则2当向公共变量传递数据时,要防止越界现象发生。
对公共变量赋值时,若有必要应进行合法性检查,以提高代码的可靠性、稳定性。
规则3尽量不设计多参数函数,将不使用的参数从接口中去掉,降低接口复杂度,减少函数间接口的复杂度。
规则4对所调用函数的返回码要仔细、全面地处理。
防止把错误传递到后面的处理流程。
如有意不检查其返回码,应明确指明。
检查接口函数所有输入参数的有效性。
规则6检查函数的所有非参数输入,如外部数据、公共变量等。
7.代码可测性规则1模块编写应该有完善的测试方面的考虑。
规则2源代码中应该设计了代码测试的内容。
在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码。
程序的调试与测试是软件生存周期中很重要的一个阶段,如何对软件进行较全面、高率的测试并尽可能地找出软件中的错误就成为很关键的问题。
因此在编写源代码之前,除了要有一套比较完善的测试计划外,还应设计出一系列代码测试手段,为单元测试、集成测试及系统联调提供方便。
规则3在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应函数,并且要有详细的说明。