一、顺序程序设计
顺序程序设计是最简单的程序结构,也称直线程序。这种程序中既无分支、循环,也无子程序调用,程序按顺序一条一条的执行指令。
在单片机应用程序设计中,经常涉及各种数制的转换问题。例如显示输出某字符,需要将二进制数码转换为ASCII码;在输入/输出中,按照人的习惯均使用十进制数,而计算机内部进行数据计算和存储时,经常采用二进制码,二进制码具有运算方便、存储量小的特点。于是对于各种数制码,经常需要进行相互转换。
【例4-1】二进制码到BCD码的转换。将一个单字节十六进制数转换成BCD码。
解:单字节十六进制数在0~255之间,将其除100后,商为百位数,余数除以10,商为十位数,余数为个位数。设单字节数存在A中,转换后,百位数存放于R7中,十位和个位数分别存于A的高半字节和低半字节中,如图4-3所示。
图4-3 [例4-1]流程图
程序清单如下:
ORG 4000H
MOV B,#100 ;分离出百位数
DIV AB
MOV R7,A ;百位数→R7
XCH A,B ;余数存入A中
MOV B,#10 ;分离出十位和个位
DIV AB
SWAP A ;十位存入高半字节
ADD A,B ;低位存入低半字节中
END ;程序结束,注意这并不是停机指令
在应用系统中总有大量的数据变换与处理工作都离不开数值计算,而最基本的数值运算是四则运算。
【例4-2】16位数据加法。有两个无符号16位数分别存于30 H和32 H开始的单元中,设(30 H)=0 AFH,(31 H)=0 AH,(32 H)=90 H,(33 H)=2FH,高字节在高地址单元中,低字节在低地址单元中,计算两数之和并存入32 H开始的单元中。
说明:程序执行过程先计算低字节和:
执行后A=3FH,CY=1,OV=1,AC=0
再计算高字节和(需要加上低字节产生的进位位):
MOV R0,#32H
MOV A,30H
ADD A,@R0 ;计算低字节之和
MOV @R0,A ;低字节和存入32H单元
MOV A,31H
INC R0
ADDC A,@R0 ;计算高字节之和,须加上低字节相加后的进位
MOV @R0,A ;高字节和存入33H单元
执行完后,A=3AH,CY=0,OV=0,AC=1。
最后的结果:(32H)=3FH,(33H)=3AH,CY=0,OV=0,AC=1。
【例4-3】16位数据减法。程序流程如图4-4所示。
图4-4 [例4-3]流程图
解:程序清单如下:
【例4-4】求多项式a 2-b。程序流程如图4-5所示。
解:设a存放在R2中,b存放在R3中,结果存放在R6和R7中。
图4-5 [例4-4]流程图
程序如下:
MOV A,R2
MOV B,A
MUL AB ;a2存入BA
CLR C
SUBB A,R3 ;带进位减
MOV R7,A ;保存低8位
MOV A,B
SUBB A,#00H ;高8位减进位
MOV R6,A
END
【例4-5】查表。用查表法求某一个数的平方。
解:设平方表格放在以TABLE为首地址的存储单元中,例如查5的平方,其程序清单如下。
以上几例均为简单直线程序,可以完成一些特定的功能,若在程序结尾改用一条子程序返回指令RET,则这些可完成某些特定功能的程序段,可被主程序当作子程序调用。