单片机上机题目513.docx

上传人:b****6 文档编号:5828171 上传时间:2023-01-01 格式:DOCX 页数:13 大小:136.85KB
下载 相关 举报
单片机上机题目513.docx_第1页
第1页 / 共13页
单片机上机题目513.docx_第2页
第2页 / 共13页
单片机上机题目513.docx_第3页
第3页 / 共13页
单片机上机题目513.docx_第4页
第4页 / 共13页
单片机上机题目513.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机上机题目513.docx

《单片机上机题目513.docx》由会员分享,可在线阅读,更多相关《单片机上机题目513.docx(13页珍藏版)》请在冰豆网上搜索。

单片机上机题目513.docx

单片机上机题目513

1双字节无符号数加法

例1:

双字节无符号数加法(R0R1)+(R2R3)→(R4R5),

R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节。

已知(R0R1)=(93h,79h);(R2R3)=(25h,a4h)

假设其和不超过16位。

请编程。

提示:

由于不存在16位数加法指令,所以只能先加低8位,后加高8位,而在加高8位时要连低8位相加时产生的进位一起相加。

查看psw中的标志CY=?

OV=?

AC=?

P=?

熟悉软件环境,要求能知道在哪里看数据的值,在哪里能看一些寄存器的内容,在哪里看程序代码。

如何在伟福软件环境下建立项目,运行文件。

要求按照标准模式来写程序,

org0000h

Ljmpstart

org0050h

start:

MOVR0,#93H

MOVR1,#79H

MOVR2,#25H

MOVR3,#0A4H

MOVA,R1

ADDA,R3

MOVR5,A

CLRA

MOVA,R0

ADDCA,R2

MOVR4,A

ss:

jmpss

end

2双字节无符号数减法

例2:

双字节无符号数相减(R0R1)-(R2R3)→(R4R5)。

R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节,已知(R0R1)=(93h,79h);(R2R3)=(25h,a4h);请编程。

同学自己可以设置被减数与减数数值

提示:

先减低8位,后减高8位和低位减借位。

由于低位开始减时没有借位,所以要先清零。

org0000h

Ljmpstart

org0050h

start:

MOVR0,#93H

MOVR1,#79H

MOVR2,#25H

MOVR3,#0A4H

MOVA,R1

SUBBA,R3

MOVR5,A

CLRA

MOVA,R0

SUBBA,R2

MOVR4,A

ss:

jmpss

end

3双字节数乘以单字节数

例3:

利用单字节乘法指令,进行双字节数乘以单字节数运算。

若被乘数为16位无符号数,地址为M1(30H)和M1+1(31H)(低位先、高位后),乘数为8位无符号数,地址为M2(32H),积由高位到低位存入R2、R3和R4三个寄存器中。

30H,31H,32H内容12H,34H,56H;

提示:

(M1+1)(M1)

×(M2)

R3R4;是M2乘M1的高8位,低8位

+BA;是M2乘M1+1的高8位,低8位

R2R3R4

org0000h

Ljmpstart

org0050h

start:

MOV30H,#12H;M1

MOV31H,#34H;M1+1

MOV32H,#56H;M2

MOVA,30H

MOVB,32H

MULAB

MOVR4,A

MOVR3,B

CLRA

CLRB

MOVA,31H

MOVB,32H

MULAB;

ADDA,R3

MOVR3,A

MOVR2,B

ss:

jmpss

end

4.把8位二进制数转换为3位BCD

例4:

利用除法指令把累加器A中的8位二进制数转换为3位BCD数,并以压缩形式存放在地址M1、M2单元中。

设A中放A8H,M1、M2单元地址是30H,31H

提示:

累加器A中的8位二进制数,先对其除以100(64H),商数即为十进制的百位数;余数部分再除以10(0AH),所得商数和余数分别为十进制十位数和个位数,即得到3位BCD数。

百位数放在M1中,十位、个位数压缩BCD数放在M2中,十位与个位数的压缩BCD数的存放是通过SWAP和ADD指令实现的。

org0000h

Ljmpstart

org0050h

M1EQU30H

M2EQU31H

start:

MOVA,#0A8H

MOVB,#64H

DIVAB

MOVM1,A

MOVA,#0AH

XCHA,B

DIVAB

SWAPA

ADDA,B

MOVM2,A

ss:

jmpss

end

5双字节压缩BCD码加法

例6:

双字节压缩BCD码加法。

设R5(高)、R4(低)为被加数;R3(高)、R2(低)为加数,相加和的结果存入:

R6(万)、R5(千、百)、R4(十、个)。

被加数98H,76H;加数54H,32H

ORG0000H

LJMPSTART

ORG0050H

start:

movR5,#98h

movR4,#76h

movR3,#54h

movR2,#32h

movR6,#00H

movA,R2

addA,R4

DAA

movR4,A

clrA

movA,R5

addcA,R3

DAA

movR5,A

clrA

addcA,00H

DAA

movR6,A

ss:

jmpss

end

6利用DPTR取数据,并保持DPTR原数不变

例6:

若在外部ROM/EPROM中2000H单元开始依次存放0~9的平方值,原来数据指针(DPTR)=3A00H,请用查表指令取出2003H单元的数据后,要求保持DPTR中的内容不变。

完成以上功能的程序如下

MOVA,#03H;(A)←03H,7403

PUSHDPH;保护DPTR高8位入栈,C083

PUSHDPL;保护DPTR低8位入栈,C082

MOVDPTR,#2000H;(DPTR)←2000H,902000

MOVCA,@A+DPTR;(A)←(2000H+03H),93

POPDPL;弹出DPTR低8位,D082

POPDPH;弹出DPTR高8位,(先进后出),83

716位数的算术左移

16位数的算术左移。

16位数在内存中低8位存放在M1单元,高8位存放在M1+1单元。

16位数是1234H,M1为30H,M2为31H

提示:

所谓算术左移就是将操作数左移一位,并使最低位补充0,相当于完成16位数的乘2操作,故称算术左移。

org0000h

Ljmpstart

org0050h

M1EQU30H

M2EQU31H

start:

MOVM1,#34H

MOVM2,#12H

CLRC;CY位清零

MOVA,M1

RLCA

MOVM1,A

MOVA,M2

RLCA

MOVM2,A

ss:

jmpss

end

8比较内部RAMI、J单元中A、B两数的大小

例3:

比较内部RAMI、J单元中A、B两数的大小,设A、B数均为带符号数,以补码数存入I、J中,若A=B,则使内部RAM的位K置1;若A≠B,则大数存M单元,小数存N单元。

设内部RAMI、J是30H,40H;(A)=58H,(B)=97H

M单元=50H,N单元=60H,位K=00H

该带符号数比较子程序的比较过程示意图如图3―9所示。

org0000h

start:

jmpmain

org0100h

main:

mov30h,#58h

mov40h,#97h

mova,#58h

anla,#80h

jnzneg

mova,#97h

anla,#80h

jnzbig1

sjmpcomp

neg:

mova,#97h

anla,#80h

jzsmall

comp:

mova,#58h

cjnea,40h,big

setb00h

ret

big:

jcsmall

big1:

mov50h,30h

mov60h,40h

ret

small:

mov50h,40h

mov60h,30h

ret

9双字节压缩BCD码转换成二进制码

例2:

双字节压缩BCD码转换成二进制码子程序。

提示:

该转换的算法为:

(d3d2d1d0)BCD=(d3×10+d2)×100+(d1×10+d0)

实现该算法的参考子程序如下:

入口:

R5(千位、百位)、R4(十位、个位)为BCD码。

出口:

R5R4(16位无符号二进制整数)。

ORG0000H

LJMPSTART

ORG0050H

START:

movR5,#98h

movR4,#76h

MOVA,R5

MOVA,#0F0H

SWAPA

MOVB,#0AH

MULAB

MOVR3,A

MOVA,R2

ANLA,#0FH

ADDA,R3

MOVR5,A

MOVA,R4

ANLA,#0F0H

SWAPA

MOVB,#0AH

MULAB

MOVR3,A

MOVA,R4

ANLA,#0FH

ADDA,R3

MOVR4,A

SS:

JMPSS

END

10冒泡排序

有8个数据存放在20H为首地址的内部RAM,进行升序排列编程,原始数据:

39,27,13,44,78,22,6,51;设R7为比较次数计数器,初始值为07H,F0为标志位,F0=0表明无互换发生,F0=1表明有互换发生

提示:

程序流程图如下

org0000h

Ljmpstart

org0050h

start:

MOVR0,#07H

MOV20H,#39

MOV21H,#27

MOV22H,#13

MOV23H,#44

MOV24H,#78

MOV25H,#22

MOV26H,#6

MOV27H,#51

LOOP1:

MOVR1,#20H

MOVA,R0

MOVR2,A

LOOP2:

MOVA,@R1

MOVR3,A

INCR1

SUBBA,@R1

JCLOOP3

MOVA,R3

XCHA,@R1

DECR1

MOV@R1,A

INCR1

LOOP3:

DJNZR2,LOOP2

DJNZR0,LOOP1

SJMP$

END

11中断方式下定时器应用设计

设单片机的晶振为12MHz,,定时器0方式0工作,产生1ms定时,在P1.0引脚上输出周期为2ms的方波,中断方式完成,试设计程序。

解:

(1)方波周期为T=1/0.002=500HZ,

(2)计算初值的确定:

晶振12MHZ,机器周期为1us,

定时为1ms

定时初值=(1*10^-3)/(1*10^-6)=1000

8192-1000=7192转化为1110000011000

则TH0=E0H;TL0=18H

TMOD=00000000B=00H

程序

ORG000BH;T0中断服务程序入口

LJMPINT;转至INT处

ORG2000H;主程序

MOVTMOD,#00H;置T0为定时方式0

MOVTH0,#0E0H   ;设置计数初值

MOVTL0,#18H  

SETBEA      ;CPU开中断

SETBET0      ;允许T0中断

SETBTR0      ;启动T0,一直在加1

HALT:

SJMPHALT     ;等待中断

INT:

CPLP1.0      ;输出方波

MOVTH0,#0E0H;重新装入计数初值

MOVTL0,#18H   

RETI         ;中断返回

 

12查询方式下定时器应用设计

设单片机的晶振为12MHz,,定时器0方式0工作,产生1ms定时,在P1.0引脚上输出周期为2ms的方波,查询方式完成,试设计程序。

(3)方波周期为T=1/0.002=500HZ,

(4)计算初值的确定:

晶振12MHZ,机器周期为1us,

定时为1ms

定时初值=(1*10^-3)/(1*10^-6)=1000

8192-1000=7192转化为1110000011000

则TH0=E0H;TL0=18H

TMOD=00000000B=00H

程序

MOVTMOD,#00H;置定时器T0为方式0

MOVTH0,#0E0H;设置计数初值

MOVTL0,#18H

MOVIE,#00H;禁止中断

SETBTR0;启动T0定时

LOOP:

JBCTF0,LOOP1;查询计数溢出

SJMPLOOP;TF0=0,则反复查询

LOOP1:

CLRTF0;清溢出标志

CPLP1.0;输出方波

MOVTH0,#0E0H;重新装入计数初值

MOVTL0,#18H

SJMPLOOP;重复循环

13中断方式下定时器应用设计

设片内RAM的70H单元的初值为01H,要求每1秒钟将其内容左环移一位,采用定时器T1,采用定时方式1,晶振频率为6MHz。

中断方式完成,试设计程序。

分析:

当晶振频率为6MHz时,一个定时器的最大定时值为131ms,现要求定时1s,已超过该最大定时值,故只能采用定时器定时和软件计数相结合的方法来扩展定时时间。

在本例中,要获得1s定时,可将定时器的定时值设为100ms,另设一个软件计数器(常用Rn寄存器),初值为10。

每100ms定时时间一到,产生定时溢出中断,在中断服务程序中首先使软件计数器减1,若不为0,则立即退出中断;若已减为0,说明1s定时时间已到,可进入中断处理。

当中断处理完后,再重新设置软件计数器。

其它要求与前例类似。

1计算计数初值:

采用定时方式1,计数初值为3CB0H。

②确定TMOD方式字:

对于定时器T1来说,M1M0=01、C/T=0、GATE=0,而定时器T0不用,取为全0。

于是

TMOD=00010000B=10H

ORG0000H

LJMPMAIN

ORG001BH

LJMPINT

ORG2000H

MAIN:

MOVTMOD,#10H

MOVTH1,#3CH

MOVTL1,#B0H

SETBEA

SETBET1

SETBTR1

MOV70H,#01H

MOVR0,#0AH

HALT:

SJMPHALTINT:

DJNZR0,NEXT

MOVA,70H

RLA

MOV70H,A

MOVR0,#0AH

NEXT:

MOVTH1,#3CH

MOVTL1,#0B0H

RET

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1