第四章汇编语言程序设计.docx

上传人:b****2 文档编号:72341 上传时间:2023-04-28 格式:DOCX 页数:22 大小:58.01KB
下载 相关 举报
第四章汇编语言程序设计.docx_第1页
第1页 / 共22页
第四章汇编语言程序设计.docx_第2页
第2页 / 共22页
第四章汇编语言程序设计.docx_第3页
第3页 / 共22页
第四章汇编语言程序设计.docx_第4页
第4页 / 共22页
第四章汇编语言程序设计.docx_第5页
第5页 / 共22页
第四章汇编语言程序设计.docx_第6页
第6页 / 共22页
第四章汇编语言程序设计.docx_第7页
第7页 / 共22页
第四章汇编语言程序设计.docx_第8页
第8页 / 共22页
第四章汇编语言程序设计.docx_第9页
第9页 / 共22页
第四章汇编语言程序设计.docx_第10页
第10页 / 共22页
第四章汇编语言程序设计.docx_第11页
第11页 / 共22页
第四章汇编语言程序设计.docx_第12页
第12页 / 共22页
第四章汇编语言程序设计.docx_第13页
第13页 / 共22页
第四章汇编语言程序设计.docx_第14页
第14页 / 共22页
第四章汇编语言程序设计.docx_第15页
第15页 / 共22页
第四章汇编语言程序设计.docx_第16页
第16页 / 共22页
第四章汇编语言程序设计.docx_第17页
第17页 / 共22页
第四章汇编语言程序设计.docx_第18页
第18页 / 共22页
第四章汇编语言程序设计.docx_第19页
第19页 / 共22页
第四章汇编语言程序设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第四章汇编语言程序设计.docx

《第四章汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《第四章汇编语言程序设计.docx(22页珍藏版)》请在冰点文库上搜索。

第四章汇编语言程序设计.docx

第四章汇编语言程序设计

第四章汇编语言程序设计

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)能实现中断的嵌套。

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

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2