《单片机原理及应用》题库及答案 下载本文

用和获得的结果。

ORG 1000H ABS:

MOV R0,#38H MOV R1,#48H MOV R2,#06H LOOP:

MOV A,@R0

JNB ACC.7,NEXT CPL A SETB ACC.7 INC A

NEXT:

MOV @R1,A INC R0

INC R1 DJNZ R2,LOOP DONE:

SJMP

33

七 编程应用

1、 片内RAM 50H(高位)、51H(低位)单元中有一个2字节的二进制数,请编程将其求补,存回原单元中去。

2、 编程将R1、R2中的16位二进制数增1后送回原单元(高位在R1中)。 3、 编写将30H和31H单元中2字节二进制数乘2的子程序(积>256)。 4、 用堆栈指令将累加器A和状态寄存器PSW互换。

5、 求片外RAM3000H、3001H单元数据的平均值,并传送给3002H单元。 6、 编写程序段,用3种方法实现累加器A与寄存器20H单元的内容交换。 7、 下面有一段程序,请对它进行改写,用5条指令实现其功能。

MOV R0,#21H

MOV A,20H ANL A,#0FH MOV @R0,A INC R0

MOV A,20H SWAP A

ANL A,#0FH MOV @R0,A

8、 编程将存放在片外RAM1000H、1001H中的两个数,按大小次序存放片内RAM的30H、31H单元。 9、 如果R0的内容为0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。

10、 编写程序将片内RAM的30H中的2位BCD码(即高4位和低4位各有一个十进制数)转换为

ASCII码,并存入31H和32H中 11、 片内RAM 30H开始的单元中有10个1字节二进制数,请编程求它们之和(和<256)。

12、 片内RAM 20H开始的单元中有10个5字节二进制数,请编程求它们之和(和仍为5字节) 13、 编程将片内RAM 30H单元开始的15字节的数据,按字节加1、2、3??后传送到片外RAM 3000H

开始的单元中去。 14、 编程将片外RAM1000~1010H内容传入片内RAM30H开始的单元。

15、 将片内RAM30~3FH中的数据按顺序传送到片外RAM200H~200FH,请编程。 16、 三字节无符号数相加,被加数在片外RAM的2000H~2002H(低位在前),加数在片内RAM的20H~

22H(低位在前),要求把相加之和存放在20H~22H之中,请编程。 17、 编写一个软件延时1s和1min的子程序(设fosc=6MHz)。 18、 用查表法编一子程序,将@R0中的压缩BCD码转换成2个ASCII码,存入@R1指定的2个连续单

元中。 19、 使用一个子程序,将20H起存放的5个压缩BCD码转换成ASCII码(高位在前),存入30H起

的10个单元中。 20、 将片内RAM30H的中间4位,31H的低2位,32H的高2位按序拼成一个新字节,存入33H单元。 21、 写出达到下列要求和指令(不能改变各未涉及的内容)。

A: 使A的最低位置1。

B: 清除A的高4位。

C: 使ACC.2和ACC.3置1。

D: 清除A的中间4位。

22、 编程将累加器A的低4位数据送P1口的高4位,P1口的低4位保持不变。

23、 将片外RAM空间2000H~200AH中的数据的高4位变零,低4位不变,原址存放。

24、 片内RAM 40H开始的单元内有10字节二进制数,编程找出最大值并存于50H单元中。

34

25、 在片外2000H开始的单元中,存有100个有符号数,试编程统计其中正数、负数和0的个数的

程序。 26、 在片外2000H起始的单元中,存有若干压缩BCD码,以$结束。编程将它们转换成ASCII码,

存入2100H开始的连续单元中。 27、 编程将片内数据存储器20H~24H单元压缩的BCD码转换成ASCII存放在25H开始的单元。 28、 片内存储单元40H中有一个ASCII字符,试编一程序给该数的最高位加上奇校验。 29、 将片内RAM的20H单元中的十六进制数变换成ASCII存入22H、21H单元,高位存入22H单元,

要求用调子程序编写。 30、 在片外RAM空间有一个数据块如图所示。

1000H 数据块长度 1001H 1002H 1003H X1 X2 X3 ? (1) 若该数据块为无符号数,求该数据块中数据最小值,并存于片内RAM20H单元。

(2) 若该数据块是有符号数,求正数、负数和0的个数,并将它们的个数分别存到12H、11H、

10H单元中。 31、 利用89C51的P1口控制8个发光二级管LED。相邻的4个LED为一组,使2组每隔0.5s交替

发亮一次,周而复始。画出电路,编写程序(设延时0.5s子程序为D05,已存在)。 32、 编制一个循环闪烁灯的程序。有8个发光二级管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。 33、 使用MCS—51单片机的定时器/计数器1,在P1.4上输出高电平为10mS低电平为20mS的连续

波形。分别用查询中断请求标志的方法和中断方法编写程序。设晶振频为12MHz。

34、 使用MCS—51单片机的定时器/计数器0,在INT0为低电平时,将T0引脚上的脉冲波形经10

频后从P1.2送出。 35、 编写一段程序,在INT1从高电平变成低电平时,在P1.7上输出一个宽度为1mS的正脉冲。分

别用查询法和中断法编写程序。设晶振频为12MHz。

35