单片机原理及应用技术 苏家建
课后习题参考答案
第三章MCS-51指令系统
3-1 MCS-51指令系统有哪几种寻址方式?按功能分类有哪几种指令?
3-2 设A=0FH,R0=30H,片内RAM的(30H)=0AH, (31H)=0BH, (32H)=0CH,下列程序段运行后的结果?
MOV A,@R0 ;A=0AH
MOV @R0,32H ;(30H)=0CH
MOV 32H,A ;(32H)=0AH
MOV R0,#31H ;R0=31H
MOV A,@R0;A=(31H)=0BH
3-3
(1)R0的内容传送到R1
MOV A,R0
MOV R1,A
(2)内部RAM 20H单元的内容传送到A
MOV A,20H
(3)外部RAM 30H单元的内容传送到R0
MOV R1,#30H
MOVX A,@R1
MOV R0,A
(4) 外部RAM 30H单元的内容传送到内部RAM 20H单元
MOV R1,#30H
MOVX A,@R1
MOV 20H,A
(5) 外部RAM 1000H单元的内容传送到内部RAM 20H单元
MOV DPTR,#1000H
MOVX A,@DPTR
MOV 20H,A
(6)程序存储器ROM 2000H单元的内容传送到R1
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R1,A
(7) RAM 2000H单元的内容传送到内部RAM 20H单元
MOV DPTR,#2000H
MOVX A,@DPTR
MOV 20H,A
(8) RAM 2000H单元的内容传送到外部RAM 30H单元
MOV DPTR,#2000H
MOVX A,@DPTR
MOV R0,#30H
MOVX @R0,A
(9) RAM 2000H单元的内容传送到外部RAM 1000H单元
MOV DPTR,#2000H
MOVX A,@DPTR
MOV DPTR,#1000H
MOVX @DPTR,A
3-4 设内部RAM 30H=5AH,5AH=40H,40H=00H, P1=7FH, 下面程序执行后的结果如何?
MOV R0,#30H ;R0=30H
MOV A,@R0 ;A=(30H)=5AH
MOV R1,A ;R1=5AH
MOV @R1,P1; (5AH)=7FH
MOV A,P1 ;A=7FH
MOV 40H,#20H ;(40H)=20H
MOV 30H,40H ;(30H)=00H
3-5 编程,将内部RAM 20H-2FH共16个连续单元清零
ORG 0100H
MOV R0,#20H
MOV R2,#16
LOOP: MOV @R0,#00H
INC R0
DJNZ R2,LOOP
END
3-6编程,求出内部RAM 20H单元中的数据含“1”的个数,并将结果存入21H单元中。
ORG 0100H
MOV 21H,#0
MOV R2,#8
MOV A,20H
CLR C
LOOP: RLC A
JC COUNT
DJNZ R2, LOOP
SJMP STOP
COUNT: INC 21H
DJNZ R2,LOOP
STOP:SJMP $
END
3-7编程,找出内部RAM 30H-50H单元中出现FFH的次数,并将结果存入51H单元中。
ORG 0100H
MOV 51H,#0
MOV R0,#30H
MOV R2,#20H
LOOP:MOV A,@R0
CJNE A,#0FFH,AGAIN
INC 51H
AGAIN: INC R0
DJNZ R2,LOOP
SJMP $
END
3-8编程,计算ff9a61a78b592b6366f0762b33dcb2c4.png
ORG 0100H
MOV 30H,#0
MOV 31H,#0 ; i的初值
MOV R0,#30H
MOV R2,#11
MOV A,31H
LOOP:INC 31H
ADD A,@R0
MOV @R0,A
MOV A,31H
RL A
DJNZ R2,LOOP
SJMP $
END
3-9 已知片内RAM(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H.说明下列指令源操作数的寻址方式,及指令执行的结果
MOV A,40H ;A=48H 直接寻址
MOV R0,A ;R0=48H 寄存器寻址
MOV P1,#0F0H ;P1=0F0H直接寻址
MOV @R0,30H ;(48H)=38H 寄存器间接寻址
MOV DPTR,#3848H ;DPTR=3848H 直接寻址
MOV 40H,38H ;(40H)=(38H)=40H 直接寻址
MOV R0,30H ;R0=(30H)=38H 寄存器寻址
MOV P0,R0 ;P0=38H 直接寻址
MOV 18H,#30H ; (18H)=30H 直接寻址
MOV A,@R0 ;A=(38H)=40H 直接寻址
MOV P2,P1 ;P2=0F0H直接寻址
3-10设R0=32H,A=48H,片内RAM (32H)=80H,(40H)=08H.求指令运行的结果
MOV A,@R0 ;A=(32H)=80H
MOV @R0,40H ; (32H)=(40H)=08H
MOV 40H,A ; (40H)=80H
MOV R0,#35H ; R0= 35H
3-11设A=83H,R0=17H,片内RAM (17H)=34H, 求指令运行的结果
ANL A,#17H ;A=03H
ORL A,17H ; (17H)=(37H
XRL A ,@R0 ; A=37H
CPL A ;A=C8H
3-12编程实现片内RAM 20H-2FH与30H-3FH中数据的对换
ORG 0100H
MOV R0,#20H
MOV R1,#40H
MOV R2,#0FH
LOOP: MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
MOV R0,#30H
MOV R1,#20H
MOV R2,#0FH
LOOP1: MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
MOV R0,#30H
MOV R1,#40H
MOV R2,#0FH
LOOP1: MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,LOOP1
SJMP $
END
3-13 A=34H,(30H)=4FH,ADD A,30H执行后的结果
A=83H,PSW=41H
3-14 SP=25H,PC=2345H,(24H)=12H,(25H)=34H,(26)=56H,执行RET后SP=PC=
SP=23H,PC=3412H
3-15 SP=25H,PC=2345H,标号LABEL所在的地址3456H,执行LCALL LABEL后SP=PC=,堆栈中的数据有何变化?
SP=27H (26H)=48H (27H)=23H PC=3456H
第四章 程序设计基础
4-1片内RAM 30H单元开始存放着一组用补码表示的有符号数,数目存于20H单元。编程统计出正数,0,负数的数目,分别存到21H,22H,23H单元。
ORG 0100H
MOV 21H,#0
MOV 22H,#0
MOV 23H,#0
MOV R0,#30H
LOOP: MOV A,@R0
CJNE A,#0 ,PD
INC 22H
SJMP DONE
PD:JB ,FU
INC 21H
SJMP DONE
FU:INC 23H
DONE: INC R0
DJNZ 20H,LOOP
SJMP $
END
4-2 片内RAM 20H-2FH.凡是满足奇偶校验的数据(1的个数为偶数)的数转存到片外8000H开始的数据区
ORG 0100H
MOV R0,#20H
MOV DPTR,#8000H
MOV R2,#0FH
LOOP: MOV A,@R0
JB ,DONE
MOVX @DPTR,A
INC DPTR
DONE: INC R0
DJNZ R2,LOOP
SJMP $
END
4-3 编程,把外部 RAM 1000H-10FFH的数据传送到2000H开始的区域
ORG 0100H
MOV R3,#10H
MOV R4,#20H
MOV DPL,#00H
MOV R2,#0
LOOP:MOV DPH,R3
MOVX A,@DPTR
MOV DPH,R4
MOVX @DPTR,A
INC DPL
DJNZ R2,LOOP
SJMP $
END
4-4片内RAM 30H单元开始存放着一组无符号数,其数目在21H单元中。编程将其中最小的数存入21H
ORG 0100H
MOV R0,#30H
MOV R2,21H
MOV A,30H
LOOP: CJNE A,@R0,PD
SJMP DONE
PD:JNC DONE
MOV 22H,@R0
XCH A,22H
DONE: INC R0
DJNZ R2,LOOP
MOV 21H,A
SJMP $
END
4-5 编程实现片内RAM 30H单元开始的16个数按顺序颠倒过来
ORG 0100H
MOV R0,#30H
MOV R1,#40H
MOV R2,#0FH
LOOP:MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
MOV R2,#0FH
MOV R0,#40H
MOV R1,#3FH
LOOP1: MOV A,@R0
MOV @R1,A
INC R0
DEC R1
DJNZ R2,LOOP1
SJMP $
END
4-6 编程实现片内RAM 30H单元开始的16个数,存有最小数值的所在单元的内容改为0FFH
ORG 0100H
MOV R0,#30H
MOV R2,#16
MOV A,30H
MOV 22H,#0 ;22H存放找到的16个数中的最小值
MOV 23H,#0 ;存放最小数值的地址放到23H
LOOP: CJNE A,@R0,PD
SJMP DONE
PD:JNC DONE
MOV 22H, @R0
MOV 23H,R0
XCH A,22H
DONE: INC R0
DJNZ R2,LOOP
MOV R0,23H
MOV @R0,#0FFH
SJMP $
END
4-7 编程实现=3eb02fff4997ea78e9c47152ebbc24c3.png
MOV C,
ANL C,/
MOV 20H,C
MOV C,
ANL C,/
ORL C,20H
ANL C,
MOV ,C
END
4-8编程统计片内RAM 30H单元开始的16个数,有多少数大于40,小于80,将结果存入40H单元中
ORG 0100H
MOV R0,#30H
MOV R2,#16
MOV 40H,#0
LOOP:MOV A,@R0
CJNE A,#40,PD
SJMP DONE
PD:JNC PD2
SJMP DONE
PD2:CJNE A,#80,PD3
SJMP DONE
PD3:JC COUNT
SJMP DONE
COUNT:INC 40H
DONE:INC R0
DJNZ R2,LOOP
SJMP $
END
第六章 中断系统
6-1 定时器T0和T1各有几种工作方式?请简述。
答:四种。
6-2 已知单片机系统时钟频率fosc=12MHz,若要求定时值分别为、1ms、10ms,定时器T0工作在方式0,方式1和方式3时,定时器对应的初值各为多少?
6-3 定时器/计数器T0已预置为156,工作于方式2计数,现T0引脚上输入周期为1ms的脉冲,问:
(1)此时T0的实际用途是?
(2)在什么情况下,T0溢出?
答:(1)计数器
(2)T0可记录100个外部脉冲,即从开始启动工作,经过100ms 开始溢出。
6-4 设系统时钟为6MHz,利用T0和产生连续矩形波,高电平宽度为50us,低电平宽度为300us。
解:因为系统时钟为6MHz,则一个计数脉冲为2us,若T0工作于方式1,则输出高电平T0需记录25个脉冲,计数初值为216-25=FFE7H,,则输出低电平T0需记录150个脉冲,计数初值为216-150=FF6AH,编程如下
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T00
ORG 0100H
MAIN:MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#0FFH
MOV TL0,#0E7H
SETB EA
SETB ET0
SETB
SETB TR0
SJMP $
T00:JNB ,QF
MOV TH0,#FFH
MOV TL0,#0E7H
SJMP DONE
QF: MOV TH0,#0FFH
MOV TL0,#6AH
DONE:CPL
RETI
END
6-5 利用定时器来测量单次正脉冲宽度,采用何种方式可获得最大量程?设f0sc=6MHz,求允许测量的最大脉冲宽度是多少?
答:定时器方式1,最大脉冲宽度为2us*216=
6-6 试编制一程序,其功能为:当引脚的电平上跳时,对的输入脉冲进行计数;当引脚的电平下跳时,停止计数,并将计数值写入R6与R7。
解:接引脚,利用T0做计数器,工作于方式1,初值为0(T0未工作于中断方式)
ORG 0000H
LJMP MAIN
;ORG 000BH
ORG 0100H
MAIN:
MOV SP,#60H
MOV R6,#0
MOV R7,#0
MOV TMOD,#05H
MOV TH0,#0
MOV TL0,#0
LOOP:JNB ,LOOP
SETB TR0
LOOP1:JB ,LOOP1
CLR TR0
MOV R6,TH0
MOV R7,TL0
SJMP $
END
6-7 试用中断技术设计一发光二极管LED闪烁电路,闪烁周期为2s,要求亮1s,再暗1s。
解:设接1发光二极管,低电平点亮;利用定时器T0,工作于定时器方式2,设系统频率为fosc=12MHz,则一个定时脉冲为1us,每次中断定时250us,则需要4000个中断实现1s的定时
利用R6,R7做软件计数器,初值分别为40,100;定时初值28-250=06H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T00
ORG 0100H
MAIN:MOV SP,#60H
MOV TMOD,#02H
MOV TH0,#06H
MOV TL0,#06H
MOV R6,#40
MOV R7,#100
CLR
SETB EA
SETB ET0
SETB TR0
SJMP $
T00:DJNZ R6,DONE
MOV R6,#40
DJNZ R7,DONE
MOV R7,#100
DONE:CPL
RETI
END
6-8 试用中断方法设计秒、分脉冲发生器,即由8031的每秒产生一个机器周期的正脉冲,由每分钟产生一个机器周期的正脉冲。
解:设系统时钟频率为12MHz,则一个计数脉冲为1us,利用T0做定时器记录50ms,计数初值为216-50000=3CB0H,利用R6,R7为软件计数器,初值为20,60,分别实现1s和1分钟的定时
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T00
ORG 0100H
MAIN:MOV SP, #60H
MOV TMOD, #01H ;T0定时器,工作方式1
MOV TH0, #3CH
MOV TL0, #0B0H ;装入50ms的初始值
MOV R6,#20
MOV R7,#60
CLR ;,均输出低电平
CLR
SETB EA
SETB ET0
SETB TR0 ;中断允许,开始定时
SJMP $
T00: DJNZ R6,DONE ;R6-1=0,定时1秒时间到
SETB ;输出1us的高电平
CLR ;继续输出低电平
MOV R6,#20
DJNZ R7,DONE ;R7-1=0,定时1分钟时间到
SETB ;输出1us的高电平
CLR ;继续输出低电平
MOV R7,#60
DONE: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
END
第七章串口工作方式0——关于I0接口的扩展
7-1利用74LS164并行输出8只发光二极管,将二极管从左至右点亮,时间间隔1S左右,并循环往复,画出电路原理图,编程实现。(P109)
ORG 0100H
MOV SCON,#00H
MOV A,#80H
LOOP:MOV SBUF,A
ACALL DEL1S
RR A
SJMP LOOP
7-4利用MCS-51系列单片机的串行接口设计键盘输入电路(P111)
第九章 模拟量输入输出接口技术
9-1 在一个fosc为12MHz的8031单片机系统中,接有一片DAC0832,它的地址为7FFFH,输出电压为0-5V,请画出有关逻辑框图并编写程序,使其运行后能在示波器上显示锯齿波(设示波器X方向扫描频率为50us/格,Y方向扫描频率为1V/格)。
答:ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#60H
MOV DPTR,#7FFFH
LOOP:MOV A,#00H
LOOP1:MOVX @DPTR,A ;2
INC A ;1
CJNE A,#0,LOOP1 ;2
SJMP LOOP
END
输出波形为周期是255us,幅值为5V的锯齿波.
9-2 在fosc=12MHz的系统中,接有ADC0809,地址为7FF8H-7FFFH,试画出逻辑框图并编写ADC0809的初始化程序和定时取样通道2的程序(假设取样频率为1ms一次,每次取样4个数据,存于8031单片机内部RAM70h-73h中)。
答:连接0809的START端
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#60H
MOV DPTR,#7FFAH
MOV 70H,#0
MOV 71H,#0
MOV 72H,#0
MOV 73H,#0
MOV R2,#4
MOV R0,#70H
LOOP:
ACALL DEL_1ms
LOOP1: SETB
NOP
NOP
NOP
CLR
MOVX A,@DPTR
MOV @R0,A
ACALL DEL_100us
INC R0
DJNZ R2,LOOP1
MOV R0,#70H
MOV R2,#4
SJMP LOOP
DEL_1ms:MOV R7,#5 ;1
DEL2:MOV R6,#100 ;1
DEL1:DJNZ R6,DEL1 ;2
DJNZ R7,DEL2 ;2
RET
DEL_100us: MOV R5,#5 ;1
DEL21:MOV R4,#10 ;1
DEL11:DJNZ R4,DEL11 ;2
DJNZ R5,DEL21 ;2
RET
END
9-3 DAC 0832与8031单片机连接时有哪些控制信号?其作用是什么?P201
答:a86d0519f896a561a903f14727d252ec.png
9-4 已知DAC 0832的地址为7FFFH,输出电压为0-5V,编写产生矩形波的转换程序,其波形占空比为1:4,高电平电压为,低电平电压为。
答:ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#60H
MOV DPTR,#7FFFH
MOV R2,#3
LOOP:MOV A,#7FH
MOVX @DPTR,A ;2
ACALL DEL
MOV A,#40H
MOVX @DPTR,A
DELL: ACALL DEL
DJNZ R2,DELL
MOV R2,#3
SJMP LOOP
DEL:MOV R7,#10 ;若主频为12MHz,则波形周期为400us
DEL2:MOV R6,#20
DEL1:DJNZ R6,DEL1
DJNZ R7,DEL2
RET
END
9-5已知ADC 0809的地址为7FF8H-7FFFH。编写每隔100ms轮流采集一次8个通道数据的程序,共取样10次,其取样值存入片外RAM从3000H开始的存储单元中(设fosc=6MHz)
答:连接0809的START端,
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP ZD0
ORG 0100H
MAIN:MOV SP,#60H
MOV R7,#7FH
MOV R6,#0F8H ;放0809 0路地址
MOV R4,#00H
MOV R5,#30H ;将采集的数据放到片外RAM 3000H开始的地址
MOV R2,#8 ;记录8路
MOV R3,#10 ;记录10次
MOV 20H,#10;记录延时
LOOP:
ACALL DEL_100ms
DJNZ 20H,LOOP
MOV 20H,#10
LOOP1: MOV DPH,R7
MOV DPL,R6
SETB
NOP
NOP
NOP
CLR
MOVX A,@DPTR;转换0路
MOV R7,DPH
MOV R6,DPL
MOV DPH,R5
MOV DPL,R4
MOVX @DPTR,A
INC R6
INC R4
DJNZ R2,LOOP1
MOV R2,#8
MOV R7,#7FH
MOV R6,#0F8H
MOV R4,#00H
MOV R5,#30H
DJNZ R3,LOOP
DEL_10ms:MOV 21H,#50 ;1
DEL2:MOV 22H,#50 ;1
DEL1:DJNZ 22H,DEL1 ;2
DJNZ 21H,DEL2 ;2
RET
END
9-6 根据图的选通脉冲时序图回答什么是字位动态扫描BCD码输出方式及如何读取转换结果?
第十章
10-1 消除键盘抖动的软件方法是什么?
答:软件延时10ms
10-3 设计5*5的矩阵键盘并叙述其工作原理。
10-4 设计一个两位BCD码拨盘输入电路,通过P0口输入,编写数据读入的程序。
10-5
10-6应用74LS164集成电路,设计3位LED数码管的静态显示电路,编写显示程序段
解:利用CPU的串口接164的时钟和数据端,即Rx接数据口,Tx接时钟端
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV SP,#60H
LOOP:MOV R0,#30H
MOV R2,#3
LOOP1:MOV A,@R0
MOV SBUF,A
NOP
NOP
NOP
INC R0
DJNZ R2,LOOP1
SJMP LOOP
END
第九章 模拟量输入输出接口技术
第十章 10-6
本文来源:https://www.2haoxitong.net/k/doc/353065ffa800b52acfc789eb172ded630a1c9869.html
文档为doc格式