单片机作业答案
第三章第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