单片机上机题目513.docx
- 文档编号:5828171
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:13
- 大小:136.85KB
单片机上机题目513.docx
《单片机上机题目513.docx》由会员分享,可在线阅读,更多相关《单片机上机题目513.docx(13页珍藏版)》请在冰豆网上搜索。
单片机上机题目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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 上机 题目 513