跳转至

第3章 51单片机汇编程序设计

第三章 编程语言程序设计

要求:会用汇编写简单的代码,会画流程图

例题1

假设两个双字节无符号数,分别存放在R1R0和R3R2中,高字节在前,低字节在后。编程使两数相加,和数存放回R2R1R0中。

        ORG   1000H
ADD2:   CLR   C
        MOV   A,R0      ;取被加数低字节至A
        ADD   A,R2      ;与加数低字节相加
        MOV   R0,A      ;存和数低字节
        MOV   A,R1      ;取被加数高字节至A
        ADDC  A,R3      ;与加数高字节相加
        MOV   R1,A      ;存和数高字节
        MOV   A,#0
        ADDC  A,#0      ;加进位位
        MOV   R2,A      ;存和数进位位
        SJMP  $          ;原地踏步
        END 

例题2

将内部RAM 20H单元中的8位无符号二进制数转换为三位BCD码,并将结果存放在FIRST(百位)和SECOND(十位、个位)两单元中。

FIRST   EQU   22H
SECOND  EQU   21H

        ORG   1000H
HBCD:   MOV   A,20H     ;取数
        MOV   B,#64H    ;除数设置为100
        DIV   AB         ;除以100
        MOV   FIRST,A    ;百位BCD
        MOV   A,B
        MOV   B,#0AH    ;除数设置为10
        DIV   AB        ;除以10,A为商,B为余数
        SWAP  A         ;十位数送高位
        ORL   A,B       ;A为(十位、个位)BCD
        MOV   SECOND,A  ;存十位、个位数
        SJMP  $
        END  

例题3

将一个字节内的两个BCD码(即一个压缩BCD码)拆开并转换成ASCII码,存入两个RAM单元。设一个压缩BCD码已存放在内部RAM的20H单元,将高半字节的ASCII码存放到21H中,低半字节的ASCII码存放到22H中。

因为BCD数中的0~9对应的ASCII码为30H~39H,所以,转换时,只需将20H中的BCD码拆开后,将BCD的高四位置成“0011”即可。

法一:
ORG   1000H
MOV   R0,#22H   ;R0←22H
MOV   @R0,#0    ;22H←0
MOV   A,20H     ;压缩BCD数送A
XCHD  A,@R0     ;BCDL送22H单元
ORL   22H,#30H  ;完成转换
SWAP  A          ;BCDH至A的低四位
ORL   A,#30H    ;完成转换
MOV   21H,A     ;存数
SJMP  $
END

法二:
ORG   1000H
MOV   A,20H     ;取BCD码
ANL   A,#0FH    ;屏蔽高四位
ORL   A,#30H    ;完成转换
MOV   22H,A     ;存ASCII码
MOV   A,20H     ;取BCD码
ANL   A,#0F0H   ;屏蔽低四位
SWAP  A          ;交换至低四位
ORL   A,#30H    ;完成转换
MOV   21H,A     ;存ASCII码
SJMP  $
END

例题4

软件延时20ms

更多例题请参照ppt

历年题目及参考答案

23-24春夏

1.片外ROM有32字节数据存在TABLE处开始的位置,查询其中有无数值80H,有则将地址保存到R1(高8位)R0(低8位),没有则将R0与R1均置0

2.实现DPTR自减

3.微机控制系统,按下按钮,延时10s亮红灯,再延时30s亮绿灯,同时数码管在延时小于10s时显示9 ~ 1的数字倒数,DELAY_1S可以直接使用

(1)画出硬件图(7pts)

(2)写出数码管控制代码(5pts)

22-23春夏

1.片外RAM中以TAB地址开始有10个字节数据,把它们的最高位都置1

2.P1.0口输出周期20ms的方波,使用软件定时

3.给了电路连接图,P0口连数码管a、b、c、d...dp,共阳极数码管。编写程序实现0-9循环显示,每个数显示1s。并且给出程序框图和代码注释。

21-22春夏

1.将ROM中2000H开始的16字节移到RAM的8000H开始

2.将R7R6内的两位数求补并放回去

3.8051外接8个LED,实现LED循环亮起的效果,要求延时1s。画硬件、写流程图、源码和注释

20-21春夏

1.两位BCD码分别存在单片机内部RAM20H的低四位和高四位,设计程序将BCD码拆分并转换为ASCII码,其中高位存在21H,低位存在22H

2.设计1KHz音频在P1.1单音输出,时钟频率12kHz,要求流程框图和注释