作业题及答案
第1章
完成下列数制的转换。
(1)=( )D=( )H
(2)=( )D=( )H
(3)=( .0100 )B=( )H
(4)=( )H=( 1001 0010 0101 )BCD
(5).01000101BCD=( )D
写出下列真值对应的原码、反码和补码。
(1)+1100110B
【+1100110B】原码=66H
【+1100110B】反吗=66H
【+1100110B】补码=66H
(2)-1000100B
【-1000100B】原码=C4H
【-1000100B】反码=BBH
【-1000100B】补码=BCH
(3)-86
【-86】原码=D6H
【-86】反码=A9H
【-86】补码=AAH
写出下列机器数分别作为原码、反码和补码时,其表示的真值分别是多少?
(1)01101110B
+110(6EH)
(2)B
-53(35H), -74(-4AH), -75(-4BH)
已知X和Y的真值,试分别计算[X+Y]补和[X-Y]补,并指出是否产生溢出(设补码均用8位二进制表示)。
(1)X=+1000100B,Y=-0010010B
X补=01000100B, Y补=B
[X+Y]补:
C7=1,C6=1,相同, 所以无溢出。
[X-Y]补
C7=0,C6=0,相同, 所以无溢出。
(2)X=+1100001B,Y=+1000010B
[X+Y]补:有溢出
[X-Y]补无溢出
(3)X=-1101001B,Y=-1010101B
[X+Y]补:有溢出
[X-Y]补:无溢出
用十六进制写出下列字符的ASCII码。
(1)NBA
‘NBA’=4E4241H
(2)HELLO!2009
‘HELLO!2009’=48454C4C4F39H
第2章
80C51单片机的
答:
80C31单片机片内无ROM,应将
系统复位后,CPU使用哪一组工作寄存器?它们的地址是什么?如何改变当前工作寄存器组?
答:系统复位后,CPU使用0组寄存器,它们的地址分别是:R0--R7:00H—07H.
可以通过改变PSW寄存器的和两位的值来改变工作寄存器组。
80C51单片机具有很强的布尔(位)处理功能?共有多少单元可以位寻址?采用布尔处理有哪些优点?
答:是的,80C51单片机具有很强的布尔处理功能,在内部RAM区20H—2FH的16个单元都可以位寻址;同时21个特殊功能寄存器中还有部分特殊功能寄存器可以位寻址。
布尔(位)处理机,是80C5l系列单片机的突出优点之一,给“面向控制”的实际应用带来了极大的方便。
布尔(位)处理机借用进位标志CY作为位累加器,在布尔运算中,CY是数据源之一,又是运算结果的存放处,位数据传送的中心。
布尔(位)处理机指令系统中有专门进行位处理的指令集,利用位逻辑操作功能进行随机逻辑设计,可把逻辑表达式直接变换成软件执行,方法简便,免去了过多的数据往返传送、字节屏蔽和测试分支,大大简化了编程,节省了存储器空间,加快了处理速度,增强了实时性能。还可实现复杂的组合逻辑处理功能。所有这些,特别适用于某些数据采集、实时测控等应用系统。
单片机的复位方法有哪两种?复位后各寄存器及RAM中的状态如何?
答:按键复位和外部脉冲复位。
单片机复位后,21个寄存器中,SP=07H,P0—P3均为FFH,SBUF为不定值,其余均为0.
80C51单片机的
答:
XTAL1和XTAL2
内部振荡方式:在80C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTALl,其输出端为引脚XTAL2。当使用芯片内部时钟时,这两根引线用于外接石英晶体和微调电容。
外部振荡方式:把外部已有的时钟信号引入单片机内。该方式适宜用来使单片机的时钟信号与外部信号保持同步。外部振荡信号由XTAL1引入,XTAL2端悬空不用。
第3章
用指令实现下述功能。
(1)内部RAM30H单元内容送R0。
MOV R0,30H
(2)将立即数10H送入内部RAM30H单元。
MOV 30H,#10H
(3)R0内容送入R1。
MOV A,R0
MOV R1,A
(4)内部RAM30H单元内容送外部RAM30H单元。
MOV R0,#30H
MOV A,@R0
MOVX @R0,A
(5)外部RAM3000H单元内容送内部RAM30H单元。
MOV DPTR,#3000H
MOVX A,@DPTR
MOV 30H,A
(6)ROM3000H单元内容送内部RAM30H单元。
MOV DPTR,#3000H
MOV A,#00H
MOVC A,@(A+DPTR)
MOV 30H,A
已知内部RAM中,(30H)=40H,(40H)=50H,(50H)=5AH,(5AH)=60H,ROM中(125AH)=88H,试分析下面程序的运行结果,并指出每条指令的源操作数寻址方式。
MOV A,50H ;直接寻址
MOV R0,A ;寄存器寻址
MOV P1,#0F0H ;立即寻址
MOV @R0,30H ;直接寻址
MOV DPTR,#1200H ;立即寻址
MOVX @DPTR,A ;寄存器寻址
MOVC A,@A+DPTR ;变址寻址
MOV 40H,50H ;直接寻址
MOV P2,P1 ;直接寻址
程序执行后,P2=F0H ; (40H)= 5AH ;(A)=88H ;(1200H)=5AH; (5AH)=40H
设(R1)=31H,内部RAM31H的内容为68H,32H单元的内容为60H,(A)=10H。请指出运行下面的程序后各单元内容的变化。
MOV A,@R1 ;(A)=68H
MOV @R1,32H ;(31H)60H
MOV 32H,A ;(32H)=68H
MOV R1,#45H ;(R1)=45H
程序前3条指令将内部RAM31H和32H单元内容互换。
已知当前PC值为2000H,用两种方法将ROM207FH单元中的常数送入累加器A。
(1)MOV DPTR,#207FH
MOV A,#00H
MOVC A,@A+DPTR
(2)
MOV A,#7CH
MOVC A,@A+PC
已知延时程序为
DELAY: MOV R0,#0A0H
LOOP1: MOV R1,#0FFH
LOOP2: NOP
DJNZ R1,LOOP2
DJNZ R0,LOOP1
若系统的晶振频率为12MHz,请指出该延时子程序的延时时间。
机器周期数
DELAY: MOV R0,#0A0H 1
LOOP1: MOV R1,#0FFH 1
LOOP2: NOP 1
DJNZ R1,LOOP2 2
DJNZ R0,LOOP1 2
由于晶振频率为12MHz,1M=1μs
该程序延时时间为:【1+(1+2)*255+2】*160+1=
第4章
编写程序将内部RAM40H~60H单元清0
MOV R7,#21H
MOV R0,#40H
LOOP:MOV @R0,#00H
INC R0
DJNZ R7,LOOP
SJMP $
编程将外部RAM的1000H~1FFF区域的数据送到2000H~2FFFH区域。
ORG 0100H
MOV DPTR,#1000H
MOV R7,#10H
LL1: MOV R6,#00H
LL: MOVX A,@DPTR
MOV B,A
MOV A,DPH
ADD A,#10H
MOV DPH,A
MOV A,B
MOVX @DPTR,A
MOV A,DPH
CLR C
SUBB A,#10H
MOV DPH,A
INC DPTR
DJNZ R6,LL
INC DPH
DJNZ R7,LL1
SJMP $
已知一内部RAM以BLOCK1和BLOCK2为起始地址的存储区中分别有5字节无符号被减数和减数(低位在前,高位在后。请编写减法子程序令它们相减,并把差放入以BLOCK1为起始地址的存储单元。
BLOCK1 EQU 30H
BLOCK2 EQU 40H
ORG 0000H
LJMP START
START:MOV R0,#BLOCK1
MOV R1,#BLOCK2
MOV R7,#1
LP:MOV R6,#5
CLR C
LP1:MOV A,@R0
SUBB A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R6,LP1
DJNZ R7,LP
SJMP $
END
从内部RAM20H单元开始存有一组带符号数,其个数已存放在1FH单元中。要求统计出大于0、等于0和小于0的数的数目,并把统计结果分别存放在ONE、TWO、THREE三个单元中。
ONE EQU 1EH
TWO EQU 1DH
THREE EQU 1CH
ORG 0000H
LJMP START
START:MOV ONE,#00H
MOV TWO,#00H
MOV THREE,#00H
MOV R0,#20H
MOV R7,1FH
LOOP3: MOV A,@R0
INC R0
JZ LOOP1
JB ,LOOP2
INC ONE
SJMP HALT
LOOP1: INC TWO
SJMP HALT
LOOP2: INC THREE
HALT: DJNZ R7,LOOP3
SJMP $
设内部RAM30H单元有两个非零的BCD数,请编写求两个BCD数的积,并将积以压缩型BCD数形式送入31H单元的程序。 ORG 0000H
MOV A, 30H
ANL A, #0F0H
SWAP A
MOV B, A
MOV A, 30H
ANL A, #0FH
MUL A, B
MOV B, #0AH
DIV AB
SWAP A
ORL A, B
MOV 31H, A
SJMP $
编制绝对值函数程序。绝对值函数方程如下:
假设X存于30H单元,Y存于40H单元。X 及Y均为补码数.
X EQU 30H
Y EQU 40H
ORG 0000H
LJMP START
START: MOV A,X
JZ LOOP
JNB ,LOOP
CPL A
ADD A,#01H
LOOP: MOV Y,A
SJMP $
END
试编写统计数据区长度的程序,设数据区从内RAM30H开始,该数据区以0结束,统计结果送人2FH中。且数据区结束字符,也计入统计数据区的长度中去.
ORG 0000H
LJMP START
START:MOV R0,#30H
MOV R7,#00H
LOOP:MOV A,@R0
INC R0
INC R7
CJNE A,#00H,LOOP
MOV 2FH, R7
SJMP $
巳知R7中为2位十六进制数,试编程将其转换为ASCII码,存人内部RAM 31H、32H中(低字节在前)。英文字母为大写.
ORG 0000H
LJMP START
START:MOV SP,#60H
MOV A,R7
LCALL BCDASCII
MOV 31H,A
MOV A,R7
SWAP A
LCALL BCDASCII
MOV 32H,A
SJMP $
BCDASCII:ANL A,#0FH
CJNE A,#10,LOOP
LOOP: JC AD30H
ADD A,#07H
AD30H:ADD A,#30H
HT: RET
END
解法2
ORG 0000H
LJMP START
START: MOV DPTR,#TAB
MOV A,R7
ANL A,#0FH
MOVC A,@A+DPTR
MOV 31H,A
MOV A,R7
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV 32H,A
SJMP $
TAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H
DB 39H,41H,42H,43H,44H,45H,46H
END
设在MA和MB单元中有两个补码形式的8位二进制带符号数。请编写求两数之和并把它放在SUML和SUMH单元(低8位在SUML单元)的子程序。
提示:在两个8位二进制带符号数相加时,其和很可能会超过8位数所能表示的范围,从而需要采用16位数形式来表示。因此,在进行加法时、可以预先把这两个加数扩张成16位二进制补码形式,然后对它完成双字节相加。
ORG 0000H
LJMP START
START:MOV A,MA
JB ,LLA
MOV R7,#00H
SJMP LLL
LLA: MOV R7,#0FFH
LLL: MOV A,MB
JB ,LLB
MOV R6,#00H
SJMP LADD
LLB: MOV R6,#0FFH
LADD:MOV A,MA
ADD A,MB
MOV SUML,A
MOV A,R6
ADDC A,R7
MOV SUMH,A
SJMP$
设外部RAM1000H~10FFH数据区中的数均为无符号数。试编写程序,找出该区域中的数的最大值,并放人内部RAM30H单元中。
MOV DPTR,#1000H
MOV R7,#00H ;计数器
MOV B,#00H ;放中间结果
L1: MOVX A, @DPTR
CJNE A, B, L2
L2: JC L3
MOV B, A ; B中放大值
L3: INC DPTR
DJNZ R7, L1
MOV 30H, B
SJMP $
已知a、b、c均为0~9的整数,试编程求解表达式Y=(a-b)2+(b-c)2+(c-a)2的值
• AA EQU 31H
• BB EQU 32H
• CC EQU 33H
• Y EQU 34H
• ORG 0000H
• LJMP START
• START:MOV SP,#60H
• MOV A,AA
• CLR C
• SUBB A,BB
• ACALL CHUNCI
• MOV R6,A
• MOV A,BB
• CLR C
• SUBB A,CC
• ACALL CHUNCI
• ADD A,R6
• MOV R6,A
MOV A,CC
CLR C
SUBB A,AA
ACALL CHUNCI
ADD A,R6
MOV R6,A
MOV Y,R6
SJMP $
CHUNCI:JNB ,SQR
CPL A
ADD A,#01H
SQR: ADD A,#01H
MOVC A,@A+PC
RET
SQRTAB:DB 0,1,4,9,16,25,36,49,64,81
从内部RAM的SCORE单元开始放有16位同学某门课程的考试成绩,试编程求平均成绩,存入AVERAGE单元。
ORG 0100H
MOV R5,#00H
MOV R6,#00H
MOV R0,#SCORE
MOV R7,#16
LL: MOV A,@R0
ADD A,R5
MOV R5,A
MOV A,R6
ADDC A,#00H
MOV R6,A
INC R0
DJNZ R7,LL
MOV R4,#04H
LL1: CLR C
MOV A,R6
RRC A
MOV R6,A
MOV A,R5
RRC A
MOV R5,A
DJNZ R4,LL1
MOV AVERAGE,R5
SJMP $
第5章
80C51外扩ROM时,为什么P0口要接一个8位锁存器,而P2口却不接?
答:P0口既作为地址线传送地址的低8位,又要作为数据线传送8位数据,只能分时用做地址线,故P0口输出的低8位地址数据必须用锁存器锁存。锁存器的锁存控制信号为引脚ALE输出的控制信号。P2口只用作地址高8位。
若要设计一个32K×8位的外RAM存储器,分别采用2114(1K×4位)和6264(8K×8位)芯片,各需多少块存储芯片?
答:2114芯片需要:(8/4)*(32/1)=64片
6264芯片需要:32/8=4片
80C51扩展2片6264存储器芯片,试用、对其片选,并指出它们的地址范围。
答:
地址范围:
6264(1)10*0 0000 0000 0000 0000
1 1111 1111 1111 1111
8000H—9FFFH
6264(2) 01*0 0000 0000 0000 0000
1 1111 1111 1111 1111
4000H—5FFFH
第6章
输入/输出信息有哪几种?
答:通过接口传送的信息包括数据信息、状态信息和控制信息。
什么是接口?接口应具有哪些功能?
接口是将外设连接到总线上的一组逻辑电路的总称。
功能:1. 地址译码与设备选择
2. 缓冲锁存数据
3. 信息的输入输出
4. 信息转换
什么是中断源?80C51有哪些中断源?CPU响应中断时,其入口地址是什么?
答:能引起中断的外部设备或内部原因称为中断源,包括外部中断源和内部中断源。
80C51中有5个中断源:
(1)
(2)
(3)TF0():定时器/计数器T0溢出中断。
(4)TF1():定时器/计数器T1溢出中断。
(5)RX,TX:串行中断
入口地址:
外部中断0(
定时器/计数器0(T0):000BH
外部中断1(
定时器/计数器1(T1):001BH
串行口(RI、TI):0023H
定时器/计数器2(T2)(仅80C52有):002BH
80C51的外部中断有哪几种触发方式?如何选择?
答:有电平触发方式和边沿触发方式。
通过对ICON寄存器的D0位IT0和D2位IT1置位或清0实现。该为为0,为低电平触发方式,该位为1,为下降沿触发方式。
第7章
8255A各端口可以工作在几种方式下?当端口 A工作在方式2时,端口B和C工作于什么方式下?
答:8255A共有三种工作方式:方式0、方式1和方式2。其中A口可以工作在方式0、方式1和方式2,B口可以工作在方式0、方式1,而C口只能工作在方式0。
在A口工作在方式2时,B口可以工作在方式0或方式1。C口高5位为A口提供联络信号,C口低3位可作为输入输出线使用或用作B口方式1之下的控制线。
某8255A芯片的地址范围为7F80H—7F83H,工作于方式0,A口、B口为输出口。C口低4位为输入,高4位为输出,试编写初始化程序。
MOV DPTR,#7F83H
MOV A,#1000 0001B
MOVX @DPTR, A
8255A的方式控制字和C口按位置位/复位控制字都可以写入8255A的同一控制寄存器,8255A是如何区分这两个控制字的?
答:看控制字的最高位D7,如果该位的值为“1”,则认为是方式控制字;反之,则认为是C口置位/复位控制字。
编写程序,采用8255A的C口按位置位/复位控制字,将PC7置0,PC4置1,(已知8255A各端口的地址为7FFCH-7FFFH)。
MOV DPTR,#7FFFH
MOV A,#0EH
MOVX @DPTR,A
MOV DPTR,#7FFFH
MOV A,#09H
MOVX @DPTR,A
设8255A接到系统中,端口A、B、C及控制口地址分别为220H、221H、222H及223H,工作在方式0,试编程将端口B的数据输入后,从端口C输出,同时,将其取反后从端口A输出。
MOV DPTR,#223H
MOV A,#82H
MOVX @DPTR,A
MOV DPTR,#221H
MOVX A,@DPTR
INC DPTR
MOVX @DPTR,A
CPL A
MOV DPTR,#220H
MOVX @DPTR,A
SJMP $
第8章
定时器T1用于对外部脉冲计数,每计满1000个脉冲后使内部RAM 60H单元内容加一,要求T1以方式1中断实现,TR1启动。
解:计数常数为: TC=216-1000=64536=FC18H,
由于采用T1方式1 计数方式,故方式控制字为: 0101 0000B=50H
程序如下:
ORG 0000H
AJMP MAIN
ORG 001BH
LJMP T1INT
ORG 0200H
MAIN: MOV TMOD,#50H
MOV TH1,#0FCH
MOV TL1,#18H
SETB ET1
SETB EA
SETB TR1
SJMP $
ORG 0800H
T1INT: INC 60H
MOV TH1,#0FCH
MOV TL1,#18H
RETI
利用定时器T0方式2产生一个5KHz的方波,已知晶振频率为12MHz。
解:方波的周期为1/5000=,故T0定时时间应为。
定时常数为:
即 TCH=9CH,TCL=9CH
由T0工作于方式2,故方式控制字为02H
1. 查询方式
ORG 0000H
AJMP MAIN
ORG 0200H
MAIN: MOV TMOD,#02H
MOV TH0,#9CH
MOV TL0,#9CH
CLR ET0
SETB TR0
WATT: JBC TF0,WAVE
SJMP WATT
WAVE: CPL
SJMP WATT
2.中断方式
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP T0INT
ORG 0200H
MAIN: MOV TMOD,#02H
MOV TH0,#9CH
MOV TL0,#9CH
SETB ET0
SETB EA
SETB TR0
SJMP $
ORG 0800H
T0INT: CPL
RETI
试编写程序,使T0以方式1每隔10ms向CPU发出中断申请,在中断服务程序中将30H单元内容减1。设晶振频率为12MHz,
解:计数常数为:
由于采用T0方式1 定时方式,故方式控制字为:
0000 0001B=01H
程序如下:
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP T0INT
ORG 0200H
MAIN: MOV TMOD,#01H
MOV TH0,#0D8H
MOV TL0,#F0H
SETB ET0
SETB EA
SETB TR0
SJMP $
ORG 0800H
T0INT: DEC 30H
MOV TH0,#0D8H
MOV TL0,#F0H
RETI
第10章
DAC0832在逻辑上由哪几部分组成?可以工作在哪几种模式下?
答:输入寄存器、转换寄存器和D/A转换器三部分组成。
单缓冲、双缓冲和直通方式。
某8位D/A转换器,输出电压为0~5V。当输入数字量为30H时,其对应的输出电压是多少?
解:X/48=(5-0)/(255-0),X=5*48/255=
DAC0832与80C51单片机连接时有哪些控制信号?它们的作用是什么?
答:ILE:输入锁存允许。
上述三个信号用于把数据写入到输入寄存器。
上述二个信号用于启动转换
ADC0809是什么功能的芯片?
答:模数转换芯片。
本文来源:https://www.2haoxitong.net/k/doc/fa6aae220d22590102020740be1e650e53eacf1a.html
文档为doc格式