第四章汇编语言程序设计.docx
《第四章汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《第四章汇编语言程序设计.docx(22页珍藏版)》请在冰点文库上搜索。
第四章汇编语言程序设计
第四章汇编语言程序设计
1、编程将片内40HH60H单元中的内容送到以3000H为首的存储区内答:
MOVR,1#40H
MOVR,2#21HMOVDPT,R#3000H
L1:
MOVA,@R1
MOVX@DP,TRA
INCR1
INCDPTR
DJNZR,2L1
2、编程计算下列算式的程序
(1)23H+45H+ABH+03H=
MOV,A#23H
ADDA,#45H
ADDA,#0ABH
XCHAB;溢出处理
ADDC,A#00H
XCHA,B
ADDA#03H;A中为结果低位,B中为高位
(2)CDH+15H-38H-46H=
MOV,A#0CDH
ADDA,#15H
SUBBA,#38H
SUBBA,#46H
(3)1234H+8347H=
MOV,A#34H
ADDA,#47H
MOV30,HA
MOV,A#12H
ADDC,A#83H
M0V31A;30H存结果低位,31H存结果高位
(4)AB123H-43ADCH=
CLRC
M0V,A#23H
SUBBA,DCH
M0V30,HA
M0V,A#0B1H
SUBBA,#3AH
M0V31,HA
M0V,A#0AH
SUBBA,,#04H
MOV32HA;30H为低位,32H为高位
3、设有两个4位BCD马,分别存放在23H22H单元和33H32H单元中,求他们的和,并送入43H、42H单元中(低位在低字节,高位在高字节)。
答:
MOVA22H
ADDA,32H
MOV42,HA
MOV,A23H
ADDC,A33H
MOV43,HA
4、略
5、编程计算片内RAMS50H-59H单元中数的平均值,结果存放在5AH中。
答:
MOVR,0#8
MOVR,1#50H
MOV,A#00H
L1:
ADDA,@R1
INCR1
DJNZR,0L1
MOV,B#8
DIVAB
MOV5A,HA
6、编写计算下式的程序。
设乘积和平方结果均小于255。
a、b值分别存在片外3001H和3002H单元中,结果存于片外3000H单元中。
25,ab
Yab,ab
(1)ab,ab
MOVDPT,R#3001H
MOVX,A@DPTR
MOV30HA;a暂存30H单元
INCDPL
MOVX,A@DPTR
CJNEA30H,L1;是否a=b
MOV,A#25
SJMPSAVE
L1:
JNCL2
MOV,B30H
MULAB
SJMPSAVE
L2:
MOVB,A
MOV,A30H
DIVAB
SAVE:
MOVDP,TR#3000H
MOVX@DP,RAT
(ab)2
10,(a
b)2
10
2
Y(ab)2
(a
b)2
10
(2)(ab)2
10,(a
b)2
10
MOVDPT,R#3001H
MOVX,A@DPTR
MOV30,HA
INCDPTR
MOVX,A@DPTR
ADDA,30H
MOV,BA
MULA;B(a+b)2
MOV31,HA
CJNEA,#10,L1
SJMPSAVE
L1:
JCL2
CLRC
SUBBA,#10
SJMPSAVE
L2:
ADDA,#10
SAVE:
MOVDP,TR#3000H
MOVC@DP,TAR
200H和210H为首地址的存
220H为首地址的存储区中。
7、设有两个长度均为15的数组,分别存放在以储区中,试编程求其对应项之和,结果存放到以答:
MOVDP,H#02H
MOVR,1#15
MOVR,2#00H;数组1首地址低位
MOVR,3#10H;数组2首地址低位
MOVR,4#20H;和首地址低位
L1:
MOVDP,LR2
MOVX,A@DPTR
MOVR,1A
MOVDP,LR3
MOVX,A@DPTR
ADDA,R1
MOVDP,LR4
MOVX@DT,PRA
INCR2
INCR3
INCR4
DJNZR,1L1
SJMP$
8设有100个无符号数,连续存放在以2000H为首地址的存储区中,试编程统计正数、负数和零的个数。
答:
MOV30H#00H;正数计数器MOV31H#00H;负数计数器
MOV32H#00H;零计数器MOVDPT,R#2000H
MOVR,1#100
L4:
MOVXA,@DPTR
INCDPTR
CJNEA,#0,L1
INC32H
SJMPL2
L1:
JCL3
INC30H
SJMPL2
L3:
INC31H
L2:
DJNZR1,L4
SJMP$
9、将片外数据存储器地址为1000H-1030H的数据块,全部搬迁到片内RAM30HH60H中,并将原数据块区域全部清零。
答:
MOVR0,#30H
MOVR2,#31H
MOVDPTR,#1000H
LP:
MOVXA,@DPTR
MOV@R,0A
ANDA,#00H
MOVX@DP,TRA
INCR0
INCDPTR
DJNZR2,LP
SJMP$
10、试编写一子程序,是R1、R0指向的两个片外RAM连续单元中的高4位二进制数,合并成一个字节,装入累加器A中。
已知R0指向低地址,并要求该单元高四位放在A中高四位。
答:
MOVX,A@R1
ANLA,#0F0H
SWAPA
MOVR,2A
MOVX,A@R0
ANLA,#0F0H
ORLA,R2
11、试编程把以2040H为首地址的连续50个单元的无符号数按降序排列,存放到以3000H为首地址的存储区中。
答:
MOVR,2#50
MOVR,3#20H
MOVR4#40H;源地址
MOVR,5#30H
M0VR6#00H;目的地址
SEND:
MOVDPHR3;SEND将2040H数据块移入3000H存储区
MOVDP,LR4
MOVX,A@DPTR
INCDPTR
MOVR,3DPH
MOVR,4DPL
MOVDP,HR5
MOVDP,LR6
MOVX@DP,TRA
INCDPTR
MOVR,5DPH
MOVR,6DPL
DJNZR,2SEND
MOVR2#49;重复次数
CMP1:
MOVDP,TR#3000H
MOVR,3#49;比较次数
CMP2:
MOVX,A@DPTR
MOV,BA
INCDPTR
MOVX,A@DPTR
CJNEA,B,L1
L1:
JCNOMOVE
MOV30,HA
CLRC
MOV,ADPLSUBBA,#01HMOVDP,LA
MOV,A30HMOVX@DP,TRA
INCDPTR
MOV,AB
MOVX@DP,TRA
NOMOVE:
DJNZ,R3CMP;250个数重复一遍?
DJNZR,2CMP;1排序结束?
LJMP$
12、试编一查表程序,从首地址为2000H,长度为100的数据块中找出
ASCII码为A,将其地址送到20A0H和20A1H单元中。
答:
MOVDPTR#2000H
MOVR,2#100
GO_ON:
MOV,XA@DPTR
CJNEA,#41H,IFEND
MOV,ADPH
MOV,BDPL
MOVDPT,R#20A0H
MOVX@DP,TRA
INCDPTR
XCHA,B
MOVX@DP,TRASJMPOVER
IFEND:
INCDPTR
DJNZR,2GO_ON
OVER:
SJMPOVER
13、设在200H〜204H单元中,存放5个压缩BCD码,编程将他们转换成ASCII码,存放到以205H单元为首地址的存储区。
答:
MOVR,2#05H
MOVR,3#02H
MOVR,4#00H
MOVR,5#02H
MOVR,6#05H
CHLP:
MOVDP,HR3
MOVDP,LR4
MOVX,A@DPTR
INCDPTR
MOVR,3DPH
MOVR,4DPL
MOV,BA
SWAPA
ANLA,#0FH
ORLA,#30H
MOVDP,HR5
MOVDP,LR6
MOVX@DP,TRA
INCDPTR
MOV,AB
ANLA,#0FH
ORLA,#30H
MOVX@DP,TRA
MOVR,5DPH
MOVR,6DPL
DJNZR,2CHLP
14、有一无符号数据块长度在30H单元中,其首地址为31H单元,求出数据块中最大值,并存入40H中。
答:
MOVR,0#31H
MOVR,130H
MOV40,H#00H
LOOP:
MOV,A@R0
CJNEA,40H,L1
SJMPAGAIN
L1:
JNCL2
SJMPAGAIN
L2:
MOV40H,A
AGAIN:
INCR0
DJNZR,1LOOP
SJMP$
15、略
16、在以2000H为首地址的存储区内,存放20个用ASCII码表示的0〜9之间的数,试编程,将它们转换成BCD码,并以压缩BCD码的形式存在3000H-3009H单元中。
答:
MOVR,2#10
MOVR,3#20H
M0VR4#00H
M0VR5#30H
M0VR6#00H
LP:
M0VDP,R3
MOVDPLR4
MOVX,@DPTR
ANLA#0FH
SWAPA
XCHAB
INCDPTR
MOVXA@DPTR
ANLA#0FH
ORLAB
INCDPTR
MOVR3DPH
MOVR4DPL
MOVDPHR5
MOVDPLR6
MOVX@DPTR
INCDPTR
MOVR5DPH
MOVR6DPL
DJNZR2LP
SJMP$
17、试编程实现下列逻辑表达式功能。
设P1.7〜P1.0为8个变量的输入端,
而其中P1.7又作为变量的输出端。
;输入端定义
X0EQUP1.0
X1EQUP1.1
X2EQUP1.2
X3EQUP1.3
X4EQUP1.4
X5EQUP1.5
X6EQUP1.6
X7EQUP1.7
(1)丫X0X1元X3X4X5X6X;
MOVCX0
ANLCX1
ANLC/X2
ORLCX3
MOVOOHC
MOVCX4
ANLCX5
ANLCX6
ORLC/X7
ORLCOOH
MOVP1.7C
⑵YX0X1X2X3X4X5X6X7
MOVCXO
ANLCX1
CPLC
MOVOOHC
MOVCX2
ANLCX3
ANLCX4
CPLC
MOVO1HC
MOVCX5
ANLCX6
ANLCX7
CPLC
ORLCO1H
CPLC
ORLCOOH
MOVP1.7C
1&略
19、略
20、试编写延时1s、1min、仆子程序。
;单片机时钟fosc=12MHz,计算为近似值;1s延时子程序
DLY_1S:
MOVRO#1O
L3:
MOVR1#200
L2:
MOVR2#250
L1QJNZR2L1
DJNZR1L2
DJNZROL3
RET
;延时1min
DLY_1M:
MOVR,3#60
L4:
LCALLDLY_1S
DJNZR,3L4
RET
;延时1h
DLY_1H:
MOVR,4#60L5:
LCALLDLY_1MDJNZR,4L5
RET
21、用程序实现c=a2+b2。
设a、b均小于10,a存在31H单元中,b存在32H单元中,c存33H单元。
答:
ORG1000H
SR:
MOV,A31H
ACALLSQR
MOVR,1A
MOV,A32H
ACALLSQR
ADDA,R1
MOV33,HA
SJMP$
;求平方子程序如下(采用查平方表的方法)
SQR:
INCA
MOVC,A@A+PC
RET
TABLE:
DB0,1,4,9,16
DB25,36,49,64,81
END
22、如何实现将内存单元40H〜60H的数逐个对应传到片外2540H-2560H单元中?
答:
MOVR,0#40H
MOVDPT,R#2540H
MOVR,2#21H
L1:
MOVA,@R0
MOVX@DP,TRA
INCR0
INCDPTR
DJNZR,2L1
SJMP$
23、参考21题
24、参考21题
25、参考实验程序
26、参考实验程序
第五章定时/计数器
1、89S51单片机内部有几个定时/计数器,他们有哪些专用寄存器组成?
答:
89S51单片机内部有两个16位定时/计数器,为定时器0(TO)和定时器1(T1)。
在定时器/计数器的16位的计数器是由两个8位的专用寄存器TH0、TL0,TH1、TL1组成。
2、89S51单片机的定时/计数器有哪几种工作方式,各有什么特点?
答:
定时器/计数器有四种工作方式:
方式0,方式1,方式2,方式3。
其中,方式3只适用于T0。
以TO为例:
①方式0,16位寄存器只用了13位,TLO的高三位未用。
由THO的8位和TLO的低5位组成一个13位计数器;②方式1,和方式0的工作相同,唯一的差别是THO和TLO组成一个16位计数器;③方式2,把TLO配置成一个可以自动恢复初值的8位计数器,THO作为常数缓冲器。
THO由软件预置值。
当TLO产生溢出时,一方面使溢出标志TFO置1,同时把THO中的8位数据重新装入TLO中;④方式3,将使TLO和THO成为两个相互独立的8位计数器,TLO利用TO本身的一些控制,它的操作与方式O和方式1类似。
而THO被规定为只用作定时器功能,对机器周期计数,并借用了T1的控制位TR1和TF1。
在这种情况下THO控制了T1的中断。
这时T1还可以设置为方式O〜2,用于任何不需要中断控制的场合,或者用作串行口的波特率发生器。
3、定时/计数器用作定时方式时,其定时时间与哪些因素有关?
作为计数时,对外界计数频率有何限制?
答:
定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号
12分频后提供。
定时时间与时钟频率和定时初值有关。
定时/计数器作计数时,由于确认1次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。
4、当定时器TO用作方式3时,由于TR1位已被TO占用,如何控制定时器T1的开启和关闭?
答:
定时器TO用作方式3时,由于TR1位已被TO占用,此时通过控制位C/T切换其定时或计数器工作方式。
当设置好工作方式时,定时器T1自动开始运行,若要停止,只需送入一个置定时器T1为方式3的方式字。
5、已知89S51单片机系统时钟频率为24MHz请利用定时器TO和P1.2输出矩形脉冲。
矩形波高电平宽度50卩s,低电平宽度350卩s。
答:
ORG1OOOH
MOVTMO,D#O2H;设置工作方式
MOVTH0#09CH设置定时器初值
MOVTLO,#O9CH
SETBTR0启动定时器
LOOP:
SETBP1.2;P1.0输出高电平
MOVR,0#07H
DELJBCTF0,REP定时是否到?
AJMPDEL
REP:
SETBP1.2;P1.0输出低电平
DJNZR,0DEL
AJMPLOOP
END
6、在89S51单片机中,已知时钟频率为12MHz请编程使P1.0和P1.1分别输出周期为2ms和500—的方波。
答:
选择方式2,用定时器T1
MOVTMO,D#20H
MOVTH,1#06H
MOVTL,1#06H
SETBTR1
L1:
MOVR2,#04H
L2:
JNBTF1,$
CLRTF1,
CPLP1.1
DJNZR,2L2
CPLP1.0
LJMPL1
7、设系统时钟为24MHz试用定时器T0做外部计数器,编程实现每计到1000个脉冲,是T1开始2ms定时,定时时间到后,T0又开始计数,循环往复。
答:
MOVTMO国15H;T1定时方式1,T0计数方式1
L1:
MOVTH,0#0FCH
MOVTL,0#18H
SETBTR0
JNBTF0,$
CLRTR0CLRTF0MOVTH,1#HMOVTL,1#HSETBTR1JNBTF1,$CLRTR1CLRTF1LJMPL1
8、略第六章80C51的串行接口
1、什么是串行异步通信?
他有哪些特点?
有哪几种帧格式?
答:
串行通信即所传输数据的各位按顺序一位一位的发送或接收。
串行通信分为同步和异步两种方式。
在异步通信中数据或字符是一帧一帧地传送的。
帧定义为一个字符的完整的通信格式,通常也称为帧格式。
它的主要特点:
由于异步通信每传送一帧有固定的格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单;此外它还能利用校验位检测错误。
帧格式的一般形式是先用一个起始位“0”表示字符的开始,然后是数据位,其后是奇偶校验位,最后是停止位,用以表示字符结束。
2、某异步通信接口按方式3传送,已知其每分钟传送3600个字符,计算其传送波特率。
答:
设每个字符由1个起始位、8个数据位、1个可编程位和1个结束位组成,其传送波特率为:
11bX3600/60s=660bps
3、80C51单片机的串行口由哪些基本功能部件组成?
答:
80C51单片机的串行口基本功能部件主要有:
两个数据缓冲寄存器SBUF,
一个串行口控制寄存器SCON—个输入移位寄存器。
4、80C51单片机的串行口有几种工作方式?
几种帧格式?
如何设置不同方式的波特率?
答:
80C51单片机的串行口有四种工作方式,由串行口控制寄存器中的SM0
SM1控制。
80C51单片机的串行通信有8位、10位、11位三种帧格式。
波特率设置:
4种工作方式波特率的计算方法不同,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,均由定时器T1的溢出率控制。
具体计算如下:
方式0:
波特率固定为时钟频率的1/12,不受SMOD勺影响。
(SMO为
波特率倍增位)
方式1的波特率=2SMOD/3£定时器T1的溢出率
方式2的波特率=2SMOD/6缘fosc
方式3的波特率=2SMOD/3£定时器T1的溢出率
5、为什么定时器T1用作串行口波特率发生器时,常采用工作方式2?
答:
在串行通信中,收发双方对发送或接收的数据速率(即波特率)要有一定的约定。
串口有四种工作方式,其中方式0和方式2的波特率是固定的,
而方式1和方式3的波特率是可变的,有定时器T1的溢出率控制。
定时器
T1用作串行口波特率发生器时,因为工作方式2是自动重装载方式,因而
定时器T1作波特率发生器常采用工作方式2.
6、已知定时器T1设置成方式2,用作波特率发生器,系统时钟频率为24MHz求可能产生的最高和最低的波特率是多少?
答:
最高波特率:
TH1=0FFHTL1=0FFH
波特率最高=2/32X24M/(12X(256-255))bps=0.125Mbps最低波特率:
TH1=00HTL仁00H
波特率最低=1/32X24M/(12X(256-0))bps=244bps7、略(参见教材相关例题)
8利用AT89S5伸行口控制8个发光二极管工作,要求发光二极管每隔1S
交替的亮灭,画出电路并编写程序。
实验程序如下:
CLRP1.Q清输出
SETBP1.0允许串行移位
MOVSCON#00H
MOV,#55H;显示初值
AGANMOVSBUFA
JNBTI,$
CLRTI
LCALLDLY_1SRRA
LJMPAGAIN
DLY_1S:
MOVR1#20
L3:
MOVR2#200
L2:
MOVR3#250
L1QJNZR3L1
DJNZR2L2
DJNZR1L3
RET
9、串行口异步通信时,ASCII码“3”的字符格式(10位)如何?
答:
串行口异步通信时,10位的数据帧结构为:
一个起始位(0),8个数据位(先低位后高位),一个停止位
(1)。
故ASCII码“3”的字符格式为:
0110011001B
10、若选用定时器T1作波特率发生器,设fosc=6MHz,计数初值为0FDHSMOD=1求波特率是多少?
答:
若选用定时器T1作波特率发生器,波特率由下式确定:
波特率=(定时器T1溢出率)/n
公式中:
①n为32或16,取决于特殊功能寄存器PCOh中的SMO位的状态。
若SMOD=0贝Vn=32。
若SMOD=1贝Un=16。
②定时器T1溢出率=定时器T1的溢出次数/秒。
由题可知:
fosc=6MHz,计数初值为0FDHSMOD=1故
第七章中断系统
1、什么是中断?
在单片机中中断能实现哪些功能?
答:
中断是通过硬件来改变CPU程序运行方向。
计算机在执行程序过程中,由于CPU以外的原因,有必要尽快终止当前程序的执行,而去执行相应的处理程序,待处理结束后,在回来继续执行被终止的原程序。
这种程序在执行过程中由于外界的原因而被中间打断的情况成为“中断”。
中断能实现的功能:
(1)能实现中断及返回。
(2)能实现优先权的排队。
(3)能实现中断的嵌套。