9.1.3 常用汇编程序实例

9.1.3 常用汇编程序实例

1.算术运算程序

MCS-51单片机应用系统的任务通常就是对客观实际的各种物理参数进行测试和控制,所以,数据的运算是避免不了的。尽管数据运算不是其优势,但运用一些编程技巧和方法,仍然可以完成大部分测控应用中的运算。多字节数的加、减运算时,应注意合理地运用进位或借位标志实现前后字节的进位或借位。

【例9-10】 设两个N字节的无符号数分别存放在内部RAM中以DATA1和DATA2开始的单元中,编程实现两数相加,相加后的结果要求存放在以DATA2开始的数据单元中。(两个加数及和的存放都是按从低字节到高字节的顺序存放。)

程序如下:

【例9-11】 设两个N字节的无符号数分别存放在内部RAM中以DATA1和DATA2开始的单元中,编程实现两数相减,相减后的结果要求存放在以DATA2开始的数据单元中。(被减数、减数及差的存放都是按从低字节到高字节的顺序存放。)

程序如下:

2.查表程序

程序中用到的数据可以事先建立数据表,在程序运行中利用数据指针查找需要的数据,再进行计算。通常,用伪指令DB、DW建立数据表格,用数据寄存器DPTR或程序计数器PC存放数据表格的首地址。

【例9-12】 有一变量存放在片内RAM的18 H单元中,其取值范围为00 H~09 H。编写程序求该变量的平方值,并存入片内RAM的22H单元。

程序如下:

程序中,在程序存储器的存储单元的某个存储空间内建立平方表,用数据指针DPTR指向平方表的首址,则变量与数据指针之和的地址单元中的内容就是变量的平方值。

采用MOVCA,@A+PC指令也可以实现查表功能,且不破坏DPTR的内容,从而可以减少保护DPTR的内容所需的开销。但表格只能存放在MOVCA,@A+PC指令后的256字节内,即表格存放的地点和空间有一定的限制。

3.码型转换程序

在单片机应用过程中,经常需要使用的数制和代码有二进制数、十进制数、十六进制数、ASCII码、BCD码,在单片机应用系统中经常需要通过程序进行各种码型之间的转换。

【例9-13】 设有一位十六进制数存放在R0中,编程将其转换为ASCII码存放于R2中。

程序如下:

【例9-14】 设片内RAM的30H单元有一个8位无符号二进制数,将其转换为压缩BCD码,存放到片内RAM的41 H单元(存放结果的高位)和40H单元(存放结果的低位)中。

程序如下:

4.I/O口操作程序

单片机与外界的联系是通过对I/O口的操作实现的,MCS-51单片机的I/O口的操作是通过MOV指令读写I/O口缓存完成的。在程序设计中,采用MOV指令。

【例9-15】 编程实现从P1口读入一个字节数据,存放到片内RAM的30 H单元中。

程序如下:

【例9-16】 AT89S51单片机系统电路图如图9-7所示,编写程序实现LED循环闪烁,要求每个灯闪烁3次后转下一个灯闪烁3次,循环点亮。

图9-7 AT89S51单片机系统电路图

程序如下: