单片机程序分析.docx

上传人:b****8 文档编号:12866062 上传时间:2023-06-08 格式:DOCX 页数:22 大小:35.44KB
下载 相关 举报
单片机程序分析.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

单片机程序分析

有一长度为10字节的字符串寄存在8031单片机内部RAM中,其首地址为40H。

要求将该字符串中每一个字符加偶校验位。

(以挪用子程序的方式来实现。

源程序如下:

ORG1000H

MOVR0,#40H

MOVR7,#10

NEXT:

MOVA,①

ACALLSEPA

MOV@R0,A

INCR0

DJNZ②,NEXT

SJMP$

SEPA:

ADDA,#00H

③,SRET

ORLA,④

SRET:

1@R0②R7③JNB④#80H⑤RET

4设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行以下指令后,各有关存储单元(即R0,R1,A,B,P1,30H,40H及5AH单元)的内容如何?

(8分)

MOVR0,#30H;R0=30H

MOVA,@R0;A=5AH

MOVR1,A;R1=5AH

MOVB,R1;B=5AH

MOV@R1,P1;(5AH)=7FH

MOVA,P1;A=7FH

MOV40H,#20H;(40H)=20H

MOV30H,40H;(30H)=20H

解:

每一条指令执行后的结果如注释字段所标。

最后结果为:

R0=30H,R1=5AH,A=7FH,B=5AH,P1=7FH,(30H)=20H,(40H)=20H,(5AH)=7FH。

四、程序阅读与分析题

一、试阅读下面的程序,指出该程序终止后累加器ACC和寄放器TH0的值,并说明该程序完成了如何的功能。

ORG0000H

MOVSP,#60H

MOVA,#10H

MOVTH0,#20H

PUSHACC

PUSHTH0

POPACC

POPTH0

END

答:

利用堆栈互换了ACC和TH0的内容,(A)=20H,(TH0)=10H

 

二、程序段如下,试说明其功能。

MOVR0,#50H

MOVR1,#60H

MOVA,@R0

ADDA,@R1

MOV@R0,A

INCR0

INCR1

MOVA,@R0

ADDCA,@R1

MOV@R0,A

MOV00H,C

答:

双字节无符号数加法。

被加数寄存在内部RAM的51H、50H单元,加数寄存在内部RAM的61H、60H单元,相加的结果寄存在内部RAM的51H、50H单元,进位寄存在位寻址区的00H位中。

 

五、综合应用题

3、设80C51单片机晶振频率为6MHz,按时器T0工作于方式1。

要求80C51以中断方式工作并在引脚输出周期为500微秒的方波。

试:

计算初值、编写含有初始化功能的主程序和完成方波输出的中断效劳程序。

答:

机械周期为2微秒。

定不时刻250微秒。

需要计数N=125

初值为65536-125=65411=FF83H,因此(TH0)=FFH,(TL0)=83H

工作方式设置:

00000001B,即(TMOD)=01H

主程序:

中断效劳程序:

(整体结构!

MOVTMOD,#01HMOVTH0,#0FFH

MOVTH0,0FFHMOVTL0,#83H

MOVTL0,#83HCPL

SETBEARETI

SETBET0

SETBTR0

SJMP$

  四、读程序(每题4分,共20分)

  1.执行以下程序段中第一条指令后,

(1)()=__0__()=__0___,()=____0_____;执行第二条指令后,

(2)()=_____1____,()=_____1____,()=______1___.

  ANLP1,#73H

  ORLP1,#38H

  2.以下程序段执行后,(A)=__0DH_______,(B)=_____11H____.

  MOVA,#0FBH

  MOVB,#12H

  DIVAB

  3.以下程序段执行后,(R0)=____7EH_____,(7EH)=__FFH_______,(7FH)=____3FH_____.

  MOVR0,#7FH

  MOV7EH,#0

  MOV7FH,#40H

  DEC@R0

  DECR0

  DEC@R0

  4.已知(SP)=09H,(DPTR)=4567H,在执行以下指令后,(SP)=___0BH______,内部RAM(0AH)=____67H_____,(0BH)=___45H______

  PUSHDPL

  PUSHDPH

  5.以下程序中注释的数字为执行该指令所需的机械周期数,假设单片机的晶振频率为6MHz,问执行以下程序需要多少时刻

  MOVR3,#100;1

  LOOP:

NOP;1

  NOP

  NOP

  DJNZR3,LOOP;2

RET;2

解:

一个机械周期为2μs

  执行程序所需时刻T=2μs*(5×100+3)=1006μs≈1ms

  五、编程题(每题4分,共20分)

  1.请利用位操作指令,实现以下逻辑操作:

=∧∨∧

  解:

.先进行与操作,再进行或操作程序如下:

  MOVC,

  ANLC,P2,0

  MOV12H,C

  MOV,C,A

  ANLC,

  ORLC,12H

  MOV,C

  RET

2.在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每一个字节的最高位无条件地置1.

解:

MOVR2,#10

  MOVDPRT,#TABLE

  LOOP:

MOVXA,@DPRT;取一数

  ORLA,#80H;最高位置1

  MOVX@DPTR,A;写回原地址

  1NCDPTR;处置下一单元

  DJNZR2,LOOP

  RET

3.已知内部RAM30H单元开始寄存20H个数据,将其传送到外部RAM的0000H单元开始的存储区,请编程实现。

解:

MOVR0,#30H

  MOVR1,#00H

  MOVR2,#20H

  LOOP:

MOVA,@R0;取数

  MOVX@R1,A;存数

  1NCR0

  1NCR1

  DJNZR2,LOOP

  RET

4.已知8个无符号数之和存于R3R4,求其平均值,结果仍存于R3R4中,请编程实现(R3为高字节)。

解:

利用移位指令作除8操作,程序如下:

  MOVR2,#3

  LOOP:

CLRC

  MOVA,R3

  RRCA;高字节除以2,末位移入C,高位补0

  MOVR3,A;暂存高字节

  MOVA,R4

  RRCA;低字节除以2,高字节末位移入低字节高位

  MOVR3,A

  DJNZR2,LOOP

  RET

5.两个字符串别离寄存在首地址为42H和52H的内部RAM中,字符串长度放在41H单元,请编程比较两个字符串。

假设相等,那么把数字00H送40H单元,不然把0FFH送40H单元。

解:

有一个字节不等,整个字符串不相等,所有字节相等,两字串才相等

  MOVR0,#42H

  MOVR1,#52H

  LOOP:

MOVA,@R0

  CLRC;不相等,FFH→40H

  SUBBA,@R1

  JNZLOOP1;相等时,比较下一字节

  INCR0

  INCR1

  DJNZ41H,LOOP

  MOV40H,#0;所有字符均相等,那么两字串相等。

  RET

  LOOP1:

MOV40H,#0FFH

  RET三.计算题(22分)

1.(A)=3BH,执行ANLA,#9EH指令后,(A)=(CY)=

2.JNZREL为2B指令,放于1308H,转移目标地址是134AH,求偏移量REL=

3.假设(A)=C3H,(R0)=AAH,执行ADDA,R0后,(A)=(CY)=

(OV)=(AC)=

4.假设(A)=50H,(B)=A0H,执行MULAB后,(A)=(B)=(CY)=

(OV)=

5.SJMP0E7H为2B指令,放于F010H,目标地址=

四.阅读并分析程序(28分)

1.2506HM5:

MOVSP,#58H

2509HMOV10H,#0FH

250CHMOV11H,#0BH

250FHACALLXHD;PC+2

PC,

MOV20H,11H

2514HM5A:

SJMPM5A

XHD:

PUSH10H

PUSH11H

POP10H

POP11H

RET

问:

(1)执行POP10H后堆栈内容?

(2)执行M5A:

SJMPM5A后,(SP)=(20H)=

2.A程序存储空间表格如下:

地址

2000H

2001H

2002H

2003H

内容

3FH

06H

5BH

4FH

已知:

片内RAM的20H中为01H,执行以下程序后(30H)=

MOVA,20H

INCA

MOVDPTR,#2000H

MOVCA,@A+DPTR

CPLA

MOV30H,A

SJMP$

3.(R0)=4BH,(A)=84H,片内RAM(4BH)=7FH,(40)=20H

MOVA,@R0

MOV@R0,40H

MOV40H,A

MOVR0,#35H

问执行程序后,R0=A=4BH=40H=

4.若PSW=00,执行以下程序后,PSW的列位状态如何?

MOVA,#0FBH

MOVPSW,#10H

ADDA,#7FH

CY

AC

OV

P

OF

RS1

五.程序填空(10分)

1.数据块传送,将RAM从30H开始的持续32个单元的内容传递给片内RAM从60H开始的持续32个单元。

ORG1000H

MOVR7,_____

MOVR0,#30H

MOVR1,#60H

LOOP:

MOVA,@R0

MOV_____,A

INCR0

INCR1

DJNZR7,_____

SJMP$

END

2.将4个单字节数放片内30H~~33H,它们求和结果放在片内40H,41H单元。

ORG1000H

MOVR7,#04H

MOVR0,30H

CLRA

MOV41H,A

LOOP:

ADDA,@R0

JNCNEXT

INC_____

NEXT:

INC_____

DJNZR7,LOOP

MOV40H,A

SJMP$

END

3.RAM中40H单元内存有一个十六进制数,把那个数转换为BCD码的十进制数,BCD码的十位和个位放在累加器A中,百位放在R2中。

ORG2200H

MOVA,_____

MOVB,#64H

DIVAB

MOVR2,A

MOVA,_____

XCHA,B

DIVAB

SWAP_____

ORLA,B

SJMP$

END

4.编程序将片内40H-46H单元内容的高4位清零,维持低4位不变。

ORG1000H

MOVR7,#07H

MOVR0,_____

LOOP:

MOVA,@R0

ANLA,_____

MOV@R0,A

INCR0

DJNZR7,LOOP

SJMP$

END

三.计算题:

(22分)

(1)(A)=1AH(CY)=不受阻碍

(2)REL=40H

(3)(A)=6DH(CY)=1(OV)=1(AC)=0

(4)(A)=00H(B)=32H(CY)=总为0(OV)=1

(5)目标地址=EFF9H

四:

阅读并分析程序(28分)

(1)1)执行POP10H后堆栈内容?

(SP)=5AH

2)执行M5A:

SJMPM5A后,(SP)=58H(20H)=0FH

(2)(30H)=5BH

(3)R0=35HA=7FH4BH=20H40H=7FH

(4)

CYACOVPOFRS1

110101

五、程序填空(10分)

1._#20H___R1____LOOP____

2.__41H_____R0___

3.__40H____#0AH______A___

4._#40H______#0FH___

四、分析程序并写出结果:

(共4题,每题5分)

1.已知(R0)=20H,(20H)=10H,(P0)=30H,(R2)=20H,执行如下程序段后(40H)=

MOV@R0,#11H

MOVA,R2

ADDA,20H

MOVPSW,#80H

SUBBA,P0

XRLA,#45H

MOV40H,A

2.已知(R0)=20H,(20H)=36H,(21H)=17H,(36H)=34H,执行进程如下:

MOVA,@R0

MOVR0,A

MOVA,@R0

ADDA,21H

ORLA,#21H

RLA

MOVR2,A

RET

那么执行终止(R0)=(R2)=

3.执行下面一段程序;

MOVSP,#60H

MOVA,#10H

MOVB,#01H

PUSHA

PUSHB

POPA

POPB

A,B的内容是:

(A)=(B)=

4.设在31H单元存有#23H,执行下面程序:

MOVA,31H

ANLA,#0FH

MOV41H,A

MOVA,31H

ANLA,#0F0H

SWAPA

MOV42H,A

则(41H)=(42H)=

1.(20H)←11H

(A)←20H

(A)←(A)+(20)

(CY)=1

(A)-(P0)-(CY)→(A)即(A)←00H

(A)+45H→(A)即(A)←45H

(40H)←45H

2.(A)←((R0))(A)=36H

(R0)←(A)(R0)←36H

(A)←((R0))(A)←34H

(A)←(A)+(21H)34H+17H=4BH

(A)←(A)21H4BH21H=6BH

(A)←D6H

(R2)←D6H

(R0)=36H(R2)=D6H

3.(A)=01H(B)=10H

4.(41H)=03H(42H)=02H

有一长度为10字节的字符串寄存在8031单片机内部RAM中,其首地址为40H。

要求将该字符串中每一个字符加偶校验位。

(以挪用子程序的方式来实现。

源程序如下:

ORG1000H

MOVR0,#40H

MOVR7,#10

NEXT:

MOVA,①

ACALLSEPA

MOV@R0,A

INCR0

DJNZ②,NEXT

SJMP$

SEPA:

ADDA,#00H

③,SRET

ORLA,④

SRET:

1@R0②R7③JNB④#80H⑤RET

1.执行以下程序段后,(P1)=_______。

9BH

MOVP1,#5DH

CPL

CPL

CLR

SETB

1、设(A)=38H,R0=28H,(28H)=18H,执行以下程序后,(A)=0E7H

ORLA,#27H

ANLA,28H

XCHDA,@R0

CPLA

2、设(A)=38H,(20H)=49H,PSW=00H,(B)=02H,填写以下中间结果。

SETBC

ADDCA,20H(A)=82H(CY)=0(AC)=1

RLCA(A)=04H(CY)=1(P)=1

MULAB(A)=08H(B)=00H(OV)=0

2.执行以下程序段后,(A)=_______,(CY)=____。

(A)=8BH(或B)(CY)=不阻碍

MOVA,#C5H

RLA

3.以下程序段执行后,(R0)=_______,(7EH)=____,(7FH)=_______。

MOVR0,#7EH

MOV7EH,#0FFH

MOV7FH,#40H

1NC@R0

1NCR0

1NC@R0(R0)=7FH(7EH)=00H(7FH)=41H

4.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALLSUBTRN双字节指令后,(PC)=___,(61H)=_______,(62H)=____。

.(PC)=0345H(61H)=25H(62H)=01H

5.阅读以下程序,说明其功能。

(data)×10操作

MOVR0,#data

MOVA,@R0

RLA

MOVR1,A

RLA

RLA

ADDA,R1

MOV@R0,A

RET

二、分析程序并写出结果:

(每题5分,共20分)

1.已知(R0)=20H,(20H)=10H,(P0)=30H,(R2)=20H,执行如下程序段后

MOV@R0,#11H

MOVA,R2

ADDA,20H

MOVPSW,#80H;含义?

SUBBA,P0

MOV40H,A

结果是:

(40H)=

(20H)←11H

(A)←20H

(A)←(A)+(20)

(CY)=1

(A)-(P0)-(CY)→(A)即(A)←00H

(A)+45H→(A)即(A)←45H

(40H)←45H

2.已知(R0)=20H,(20H)=36H,(21H)=17H,(36H)=34H,执行进程如下:

MOVA,@R0

MOVR0,A

MOVA,@R0

ADDA,21H

ANLA,#21H;与

RLA;左移

MOVR2,A

那么执行终止(R0)=36H(R2)=D6H

说明以下伪操作的作用

ORG2000H(概念地址起点为2000H)

LIMITEQU200(LIMIT等值于200)

HBD2EQUHBDTW(HBD2等值于HBDTW)

JATB:

DW2200H(概念字,标号JATB处持续寄存两个字节:

0022)

2)通过汇编后,以下各条语句的标号应取什么值?

ORG2800H

TABLE:

DS0EH(2800H~280EH保留)

WORD:

DB‘WORKER’,15,0A(280FH:

57H4FH52H4BH45H52H15H0AH)

FANGEQU100H(伪指令不占内存)

ONEEQU3400H(伪指令不占内存)

BEGIN:

LDA,R0(程序开始的地址:

2817H)

3)说明执行如下指令后,寄放器A、中的内容。

MOVA,#78H

SWAPA

ANLA,#0FH(A=07H)

1说明以下程序的功能

1CLRA

MOVR0,#30H

LOOP0:

CJNE@R0,#00H,LOOP1

INCA

LOOP1:

INCR0

CJNER0,#3FH,LOOP0

HERE:

SJMPHERE

结果A中的内容是什么?

(是30H~3EH中0的个数)

②MOVSP,#30H

PUSH50H

POP40H

该程序起什么作用?

(将50H单元的内容传送到40H单元)

③设A的内容为BCD码68H,执行以下指令:

A中结果是什么?

ADDA,#09H;A中内容=(77H)仍是(71H)

DAA

1、内部RAM数据及P1口数据如以下图所示,试分析下段指令执行后的结果。

MOVA,#03H;A=03H

SWAPA;A=30H

MOVR0,A;A=30H;R0=30H

MOVA,@R0;A=50H

ANLA,#F0H;A=50H

MOVR1,A;R1=50H

MOVB,@R1;B=10H

MOV@R1,P1;R1=50H;(50H)=E6H

MOVP2,P1;P2=E6H

CPL;P1=F6H

ORLC,;C=1

上段指令执行后:

(10H)=00H;(30H)=50H;(50H)=E6H;

P1=F6H;P2=E6H。

3、简述80C51的寻址方式?

各涉及哪些存储器空间?

答:

当即数寻址:

程序存储器ROM。

直接寻址:

片内RAM低128B和特殊功能寄放器。

寄放器寻址:

R0~R7,A,B,C,DPTR

寄放器间接寻址:

片内RAM低128B,片外RAM。

变址寻址:

程序存储器64KB。

相对寻址:

程序存储器256B范围。

位寻址:

片内RAM的20H~2FH字节地址,部份特殊功能寄放器。

4、简述程序状态字寄放器PSW中列位的含义。

答:

程序状态字寄放器PSW:

程序状态字寄放器PSW:

是一个8位寄放器,用来寄存当前指令执行后操作结果的某些特点,以便为下一条指令的执行提供依据。

概念格式如下。

其中,CY:

进借位标志;AC:

辅助进借位标志;F0:

软件标志;OV:

溢出标志;F1:

用户标志位;P:

奇偶校验标志;RS1、RS0:

工作寄放器组选择(如表所示)。

五、简述单片机系统扩展的大体原那么和实现方式。

答:

(1)以P0口线作地址/数据总线

P0口作系统的低8位地址线。

在实际应历时,先把低8位地址送锁存锁存器暂存,然后再由地址锁存器给系统提供低8位地址,而把P0口作为数据线利用。

(2)以P2口线作高位地址总线

在实际应用中,高位地址线并非固定为8位,需要几位就从P2口中引出几条口线。

(3)操纵信号线

①利用ALE作用地址锁存的选通信号,以实现低8位地址的锁存;

②以信号作为扩展程序存储器的读选通信号;

③以信号作为内、外程序存储器的选择信号;

④以和作为扩展数据存储器和I/O端口的读/写选通信号。

执行MOVX指令时,这两个信号别离自动有效。

3、符号函数

,设变量X存于VAR单元中,函数值y存于FUNC单元中,要求编写按上述函数式给y赋值得程序。

解:

ORG1000H

VAR:

DATA30H

FUNC:

DATA31H

MOVA,VAR

JZCOMP

JNB,POSI

MOVA,#0FFH

SJMPCOMP

POSI:

MOVA,#1

COMP:

MOVFUNC,A

SJMP$

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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