首页 理论教育 STC15W4K32S4系列单片微机原理及接口技术

STC15W4K32S4系列单片微机原理及接口技术

时间:2023-11-02 理论教育 版权反馈
【摘要】:STC15W4K32S4单片机内部基本RAM只有128B,是单片机最重要、最基本的内存,编程时用到的数据变量、堆栈及数据结构等都存放在这里,是功能最丰富、最贴近CPU的存储器区域。STC15W4K32S4单片机内部基本RAM可以采用直接寻址,也可以采用寄存器间接寻址。同理,16个数的平均值则需要对累加和右移4次,32个数的平均值需要对累加和右移5次等。

STC15W4K32S4系列单片微机原理及接口技术

STC15W4K32S4单片机内部基本RAM只有128B,是单片机最重要、最基本的内存,编程时用到的数据变量堆栈数据结构等都存放在这里,是功能最丰富、最贴近CPU的存储器区域。

STC15W4K32S4单片机内部基本RAM可以采用直接寻址,也可以采用寄存器间接寻址。按照功能的划分,00~1FH用作工作寄存器(R0~R7);20H~2FH用作位寻址,16个字节包含128位,将这些位编址为00~7FH;30H~6FH一般作为用户数据区,用于存放程序变量或数据结构;70H~7FH一般作为堆栈区,存放断点地址、现场保护或暂存数据用。具体访问方法如下。

1.直接寻址

可以将某一单元地址的数据读出放到其他地址单元。例如:

将单片机片内30H单元的数据读出,并存放到40H单元,则可以编程为

978-7-111-51881-5-Chapter04-1.jpg

或者使用A作中转站来传送数据:

978-7-111-51881-5-Chapter04-2.jpg

还有其他的数据传送操作,例如:

978-7-111-51881-5-Chapter04-3.jpg

2.寄存器寻址

寄存器有工作寄存器R0、R1、R2、R3、R4、R5、R6和R7,通过PSW设置映射到00~1FH地址的当前要使用的工作寄存器组,映射方法见表2-3,复位后默认(PSW)=00H。

978-7-111-51881-5-Chapter04-4.jpg

同样,若需要使用1组工作寄存器,则:

978-7-111-51881-5-Chapter04-5.jpg

或者ANL PSW,#11100111B;置RS1=0,RS0=0

ORL PSW,#00001000B;置RS1=0,RS0=1

MOV R2,50H;使用1组工作寄存器,读出50H单元数据写入R0,即R0←(50H)

或者MOV PSW,#08

MOV R2,#50H;使用1组工作寄存器,立即数写入R0,即R0←#50H

3.寄存器间接寻址

内部基本RAM空间,只能使用R0和R1寄存器作间接寻址。例如:

将单片机片内30H单元的数据读出,并存放到40H单元,则可以编程为

978-7-111-51881-5-Chapter04-6.jpg(www.xing528.com)

寄存器间接寻址用处很大,是程序实现循环操作的基础。

4.堆栈操作

单片机复位后,堆栈默认使用07H开始的地址段。由于00~1FH分配给了工作寄存器使用,则在编写程序开始时,最好把堆栈重新设置到高位地址。例如:

978-7-111-51881-5-Chapter04-7.jpg

通过设置堆栈寄存器SP,可以任意改变堆栈使用的地址空间。

5.位寻址操作

单片机内部RAM位寻址空间有10H~1FH共128位,还有一部分特殊功能寄存器也可以进行位寻址操作,一般SFR寄存器地址能够被8整除的特殊寄存器,其各位有位地址,可以进行位操作。

978-7-111-51881-5-Chapter04-8.jpg

位地址可以存放1位二进制数,编程时一般用作标志位,便于判断,以简化存储信息和节省地址。

【例4-1】 基本内存编程应用:假设在30H~37H单元中存放了8个单字节二进制数,编程求8个数的平均值,余数四舍五入

程序规划:采用前后台主从结构编程,分为主程序和加法、平均、四舍五入三个子程序。

功能分配:主程序负责初始化;加法子程序完成8个数相加后,返回累加和;平均子程序对累加和整体右移3次,保存平均值和余数;四舍五入子程序完成对余数四舍五入。

内存分配:被加数在30H~37H单元;用R0作指针指向30H;用R2作循环次数控制;用R3(高)、R4(低)存累加和;用R4存平均值;用R5存余数。

算法实现方法:

1)预测8个任意二进制数相加后,结果可能超过1字节,因此累加结果要使用R3(高)、R4(低)两字节来存放。

978-7-111-51881-5-Chapter04-9.jpg

图4-1 加法算法思路

2)加法思路:算法如图4-1所示,从源地址中逐个取出加数相加到指定的累加和(R3R4)中,每个数从低字节开始加,有进位C加到高字节,最后结果存放在R3R4中。

3)平均值采用对累加和整体右移的方法,因为是8个数的平均,则连续右移3次即可得到平均值和余数;实际上8个数的平均值,其累加和的二进制数的低3位就是余数,其余位就是平均值(整数)。同理,16个数的平均值则需要对累加和右移4次,32个数的平均值需要对累加和右移5次等。

4)四舍五入:观察余数与除数发现,余数是除数的一半时,余数刚好就是0.5;余数大于除数的一半时,余数一定是大于0.5的数。因此得出:余数乘以2减去除数≥0,则需要四舍五入;否则舍去余数。

程序设计:

978-7-111-51881-5-Chapter04-10.jpg

978-7-111-51881-5-Chapter04-11.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈