微机实验:程序设计实验

单片机实验

27人已加入

描述

微机实验:程序设计实验

实验目的

进一步熟悉指令系统,提高编程能力。

(一)分支程序

实验内容:

          2x            x>0

计算y=  2              x=0   (-128≤x≤+63)

          x/2(取整)      x<0

假设x存于R0,Y存于片内RAM 30H。

参考程序:

ORG  1080H

MOV  A,R0

JZ  ZERO

;x=0,转

ANL  A,#80H

;判符号位

JZ  P0

;x>0,转

 

SJMP  M0

;x<0,转

ZERO:

MOV  A,#02H

;y=2

SJMP  STORE

   P0:

MOV  A,R0

RL  A

;y=2x

SJMP  STORE

   M0:

MOV  A,R0

SETB  C

;y=x/2

RRC  A

STORE:

MOV  30H,A

SJMP $

实验要求:

1、根据程序画出流程图。

2、计算偏移量。

3、分别给R0 置入正数、0、负数,运行程序,检查结果。

思考题:

对乘2或除2的运算可用左移一位或右移一位来完成。利用该法,编写R0×4,R0×10,R0÷4的程序模块。

(二)循环程序

实验内容

某班共10名学生,某科成绩已以16进制形式存放在片外RAM,首址为SOUR的连续单元内。要求统计成绩优秀(≥90分)和不及格(<60分)的人数,分别存放于片内RAM的30H和31H单元。

参考程序:

ORG  10A0H

 

MOV  30H,#00H

;清0

MOV  31H,#00H

MOV  R2,#0AH

;人数置R2

MOV  DPTR,#SOUR

;DPTR指向成绩表 

 LOP:

MOVX  A,@DPTR

;读成绩

CJNE  A,#90,LOP1

;和90分比较

 LOP1:

JNC  NEX1

;≥90,转

CJNE  A,#60,LOP2

;和60分比较

 LOP2:

JNC  NEX2

;若≥60,转

  

INC  31H

;<60,存31H

SJMP  NEX2

NEX1:

INC  30H

;≥90,存30H

NEX2:

INC  DPTR

;修改成绩指针

DJNZ  R2,LOP

;未统计完,转

SJMP  $

ORG  10D0H

SOUR:

64H,32H,50H,4FH,

;学生成绩表

5AH,3CH,60H,5FH,

3FH,42H

实验要求

1、根据程序画出流程框图。

2、输入程序。然后运行,检查结果

(三)散转程序

实验内容

所谓散转,就是根据某种输入或运算的结果,分别转向各个处理程序。例如,微机化仪表的设计中,需要根据不同的键号(存于R2,值0,1,2,……)分别转向不同的处理程序prgo,prg1,prg2……。

参考程序:

ORG  10E0H

MOV  DPTR,#TB

;DPTR指向转移表首址

MOV  A,R2

;取键号

ADD  A,R2

ADD  A,R2

JMP ±A+DPTR

;转移目标地址

=TB=R2×3

ORG  1100H

  TB:

LJMP  prog0

;处理程序的转移表

LJMP  prog1

LJMP  prog2

实验步骤:

1、输入程序  2、假设R2为某值并输入之,单步运行程序,检查结果。

思考题:

1、上述程序中,键号R2的限制范围是多少?

2、若将转移表中的LJMP改为AJMP,上述程序将如何修改?

(四)数制转换

单片机系统内部运算用二进制,而输入输出常用十进制,以符合日常习惯,因此,数制转换是仪表设计中常用的程序之一。

实验内容1

把R3中的8位二进制整数转换为压缩BCD,放在R4R5中。

根据  A=b7×27+b6×26+b5×25+……+b1×21+b0

=(((b7×2+b6)×2+b5)×2+b4)×2+……+b1)×2+b0

只要反复运算B×2+b,就能把二进制整数转换为十进制。

参考子程序:

ORG  1200H

 IBTD:

CLR  A

MOV  R4, A

;0→R4R5

MOV  R5, A

MOV  R7, #08H

 LOP:

CLR  C

MOV  A, R3

RLC  A

;取bi,送C

MOV  R3, A

MOV  A, R5

;(R4R5)×2+C→R4R5

ADDC  A, R5

DA  A

MOV  R5, A

MOV  A, R4

ADDC  A, R4

DA  A

MOV  R4, A

DJNZ  R7, LOP

;循环8次

RET

实验内容2

把R3中的二进制小数转换为非压缩BCD码,存放在R0指向的字节中(假设精度要求为小数二位)。

一个二进制小数B的十进制值为

       B=a-1×10-1+a-2×10-2+a-3×10-3+……

式中,a-1、a-2、a-3……分别为十进制小数的第1、2、3……位,若两边乘以10,得

10×B=a-1+a-2×10-1+a-3×10-2+…

                           B1

显然,乘积的整数部分就是十进制小数的最高a-1,而且也必定是非压缩a-1的BCD码。若再将B1乘以10,得

 10×B1=a-2+a-3×10-1+a-4×10-2+…

该乘积的整数部分就是十进制小数的第二位的BCD码。

参考子程序

ORG  1220H

PBTD:

MOV  A, R3

MOV  B, #0AH

MUL  A, B

;乘10

XCH  A, B

;乘积整数存A,小数存B

MOV  @R0, A

;存入十进制小数最高位

INC  R0

;修改指针

MOV  A, #0AH

MUL  A, B

;再乘10

MOV  @R0, A

;存十进制小数第二位

RET

实验要求:

1、输入程序。

2、输入原始数据(例如,整数FFH、80H,小数80H、40H、20H等),单步运行上述程序,观察运行结果正确否?

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分