单片机作业答案 下载本文

第三章第7题:

指出下列指令中哪些是非法的?如果非法请改正。 INC DPTR ;对 DEC DPTR ;错 MOV A,@R1 ;对 MOV A,@R2 ;错 MOV 30H,@R3 ;错 MOV 30,@R0 ;错 RL B ;错 JNZ A,NEXT ;错 JNB 08H,NEXT ;错 答:参考附录A。

第三章第九题:

试编写一段程序,其功能为:将33H~38H中6个单字节BCD码拼成3个压缩的BCD码存放在32H开始的单元中。 答案:

org 0000h ljmp start org 0100h start:

mov r0,#33h ;R0记录起始地址 mov r1,#32h ;R1记录转换后的存储单元起始地址 mov a,@r0 ;将33H中的数放到A中 mov r6,a inc r0 ;指向34H mov a,@r0 inc r0 ;指向35H swap a add a,r6 mov @r1,a ;33H和34H单元中的数据组合后放到32H当中 inc r1 ;指向33H mov a,@r0 ;将35H中的数据放到A中 inc r0 ;指向36H mov r6,a mov a,@r0 ;将36H当中的数据放到A中 inc r0 ;指向37H swap a add a,r6 mov @r1,a ;将35H和36H中的数据组合后放到34H当中 inc r1 ;指向34H mov a,@r0 ;将37H中的数据放到A中

inc mov mov swap add mov end

r0 r6,a a,@r0 a a,r6 @r1,a

;指向38H

;将38H中的数据放到A中

;将37H和38H的数据组合后放到34H当中

第四章第七题:

设有一个起始地址为FIRST+1的数据块,存放在内部RAM单元,数据块长度在FIRST单元而且不为0,要求统计该数据块中正偶数和负奇数个数,并将他们分别存放在PAPE单元和NAOE单元。试画出能实现上述要求的程序流程图和编出相应程序。 答案:

FIRST equ 55h PAPE equ 40h NAOE equ 41h ;这三个值可随意选取,这里选取以便能在软件中验证 org 0000h ljmp 0100h org 0100h

start: mov r0,#FIRST

mov r7,@r0 ;将数据块长度放到R7中 inc r0 ;r0中保存了数据起始地址 mov PAPE,#0 mov NAOE,#0

next: mov a,@r0

jb acc.7,negative ;如果为负数则跳到negative处进行处理,为正数则接着执行下面的语句 jb acc.0,kk ;为正数,若不为偶数则跳到kk处 inc PAPE ;为正偶数,则PAPE加1 sjmp kk

negative: jnb acc.0,kk ;为负偶数,跳到kk处进行处理

inc NAOE ;为负奇数,则NAOE加1

kk: djnz r7,next ;如果数据未检测完,继续检测

end

第四章第九题:

在内部RAM中,有一个以BLOCK为起始地址的数据块,块长在LEN单元,请用查表指令编写一个程序,先检查它们是否是16进制数中的A~F,若是16进制数中的A~F则把它们变为ASCII码;若不是,则把它们变为00H。 答案:

BLOCK equ 40h

LEN equ 10h org 0000h ljmp start org 0100h

ASCIIMAP:

db 00h,00h,00h,00h,00h,00h,00h,00h db 00h,00h,41h,42h,43h,44h,45h,46h start: mov r0,#BLOCK

mov r7,#LEN

next:

mov a,@r0 cjne a, #0Ah, nl1

nl1: jnc kk

cjne a,#0Fh,nl2 nl2: jc dispose

sjmp kk

dispose:

mov a,@r0 mov dptr,#ASCIIMAP movc a,@a+dptr mov @r0,a

kk:

inc r0 djnz r7,next end

第四章第十一题:

已知内部RAM的MA(被减数)和MB(减数)中分别有两个带符号数。请编一个减法程序,并把差存入RESULT和RESULT+1(低8位在RESULT单元)中。 答案:

MA equ 30h MA1 equ 31h MB equ 32h MB1 equ 33h RESULT equ 34h RESULT1 equ 35h org 0000h ljmp start org 0100h

start:

mov r3,#MA mov r4,#MA1 mov r6,#MB

mov mov mov acall

dsub:

mov cpl mov lcall ret

dadd:

mov mov mov xrl mov mov clr mov mov clr mov jc lcall mov jb dab1:

mov mov mov clr ret dabe: setb ret dab2:

lcall mov jnb lcall cpl sjmp nsub:

mov clr c subb mov mov

r7,#MB1 r4,#RESULT r3,#RESULT1 dsub a,r6 acc.7 r6,a dadd

a,r3 c,acc.7 20h,c a,r6 c,acc.7 a,r3 acc.7 r3,a a,r6 acc.7 r6,a dab2 nadd a,r3

acc.7,dabe a,20h acc.7,c r3,a ov ov nsub a,r3

acc.7,dab1 cmpt 20h dab1 a,r4 a,r7 r4,a a,r3

subb a,r6 mov r3,a ret

nadd: mov a,r4

add a,r7 mov r4,a mov a,r3 addc a,r6 mov r3,a ret

cmpt: mov a,r4

cpl a add a,#01h mov r4,a mov a,r3 cpl a addc a,#00h mov r3,a ret

第五章第五题:

已知定时器/计数器0工作于方式0,振荡频率为6MHz,计数初值为0FEH,定时时间是多少? 答案:

T = (213 - 计数初值)*晶振周期*12

= (213 - 254)*(1/6)*10-6*12 = (8192 - 254)*(1/6)*10-6*12 = 15876us

第五章第六题:

已知选用定时器1工作模式2作波特率发生器,晶振频率为6MHz,计数初值为0FDH,求波特率是多少? 答案:

波特率 =(2SMOD/32)*fosc/(12*(256-X)) ;X为计数初值

=6*106/(32*12*2) =7812

第五章第十题:

试写出/INT0为边沿触发方式的中断初始化程序。 答案:

SETB IT0 SETB EA SETB PX0

SETB EX0

第五章第十一题:

晶振频率为6MHz的MCS-51单片机,使用定时器0以定时方法在P1.0输出周期为400us、占空比为10:1的矩形脉冲,以定时工作方式2编程实现。 答案:

org 0000h ljmp start org 0100h

start:

anl tmod,#0f0h orl tmod,#02h mov th0,#0ech mov tl0,#0ech mov ie,#00h setb tr0

loop:

jbc tf0,loop1 sjmp loop

loop1:

cpl p1.0 mov th0,#4ch mov tl0,#4ch sjmp loop end

第五章第十五题:

请用中断法编出串口方式1下的发送程序。设单片机主频为6MHz,波特率为600bps,发送数据缓冲器在外部RAM,开始地址为RBLOCK,接收数据区长度为30,采用偶校验(数据块长度不发送)。 答案:

RBLOCK equ 0700h org 0h ljmp start org 0100h

start:

mov tmod,#20h mov tl1,#0e6h mov th1,#0e6h setb tr1 mov scon,#50h; 串行口初始化为方式1,允许接收 mov pcon,#00h; smod = 0

fmt-ram:

mov r7,#30

mov mov

tx-ack:

mov mov

wait1:

jbc sjmp

rx-yes:

jbc sjmp

next1:

mov cjne

tx-news:

movx mov jnb inc

kk:

inc

wait3:

jbc sjmp

next2:

djnz

tx-sum:

mov mov

wai4:

jbc sjmp

rx-0fh;

jbc sjmp

if-0fh:

r6,#00; 清累加和寄存器 dptr,#RBLOCK a,#06h sbuf,a

;发送呼叫信号

ti,rx-yes wait1 ri,next1 rx-yes

;等待发送完

;接收乙机回答

a,sbuf ;判乙机是否同意接收 a,#00h,tx-ack ;不同继续呼叫 a,@dptr sbuf,a psw.0,kk r6 dptr ti,next2 wait3 r7,tx-news a,r6 sbuf,a ri,rx-0fh wait4 ri,if-0fh rx-0fh

mov a,sbuf cjne a,#0fh,fmt-ram end

第六章第五题:

以8031为主的系统,扩展2片2764 EPROM芯片和8KB片外RAM,试画出该系统逻辑图,并写出各芯片的地址。

第六章第九题:

在采用8255扩展I/O口时,若把8255 A口每一位接一个开关,B口每一位接一个发光二极管。请编写A口开关为1时B口相应发光二极管点亮的程序。 答案:

mode equ 90h;A口输入,B口输出 porta equ 0f000h portb equ 0f001h portcontrol equ 0f003 org 0h mov a, #mode mov dptr, #portcontrol movx @dptr, a

next:

mov dptr, #porta movx a, @dptr mov dptr, #portb

movx @dptr, a;假设发光二极管阴极接地 lcall delay sjmp next end

第六章第十二题:

图6-55时ADC0809与MCS-51的一种接口电路。设在内部RAM 20H开始有一数据区,请写出对8路模拟电压连续采集并循环存入(或更新)这个数据区的程序。 答案:

CS0809 equ 7ff8h org ljmp org start:

mov mov mov k0:

mov movx finish:

jb movx mov inc inc djnz sjmp end

0000h start 0100h

r0,#20h r7,#8h dptr,#CS0809

a,#0 @dptr,a

p3.3,finish a,@dptr @r0,a dptr r0 r7,k0 start