文档库 最新最全的文档下载
当前位置:文档库 › 单片机原理及其接口技术王敏课后作业答案(DOC)

单片机原理及其接口技术王敏课后作业答案(DOC)

2-4 MCS-51单片机中执行程序的地址放在哪?由几个位组成?最大寻址范围是多少?

答:放在程序计数器PC中,16位,64KB。

2-5 在程序存储器中,0000H、0003H、000BH、0013H、001BH、0023H这6个单元有什么特定的含义?

答:0000H 复位后,PC=0000H,开始执行程序的地址

0003H 外部中断0 (INT0)入口地址

000BH 定时器0中断(TF0)入口地址

0013H 外部中断1(INT1)入口地址

001BH 定时器1中断(TF1)入口地址

0023H 串行口中断TI/RI入口地址

2-10 开机复位以后,CPU使用哪一组工作寄存器?它们的地址是什么?如何改变当前工作寄存器?

答:使用第0组工作寄存器,00H-07H,通过修改PSW中的RS1和RS0两位来改变当前的工作寄存器。

3-7 指出指令中的50H或66H个代表什么?

解:

①MOV A, #50H 立即数

MOV A, 50H 直接地址

MOV 50H, #20H 直接地址

MOV C, 50H 位地址

MOV 50H, 20H 直接地址

②MOV @R0, #66H 立即数

MOV R6, #66H 立即数

MOV 66H, #45H 直接地址

MOV 66H, C 位地址

MOV 66H, R1 直接地址

3-9 写出能完成下列数据传送的指令:

解:

①R1中内容传送到R0;

MOV A, R1

MOV R0,A

②内部RAM 20H单元中的内容送到30H单元;

MOV 30H, 20H

③外部RAM 20H单元中的内容送到内部RAM 20H单元;

MOV R0,#20H

MOVX A, @R0

MOV 20H, A

④外部RAM 2000H单元中的内容送到内部RAM 20H单元;

MOV DPTR, #2000H

MOVX A, @DPTR

MOV 20H, A

⑤外部ROM 2000H单元中的内容送到内部RAM 20H单元;

MOV DPTR, #2000H

MOV A, #00H

MOVC A, @A+DPTR

MOV 20H, A

⑥外部2000H单元中的内容送到外部RAM 3000H单元;

MOV DPTR, #2000H

MOVX A, @DPTR

MOV DPTR, #3000H

MOVX @DPTR, A

3-11 已知:(20H)=X;(21H)=Y;(22H)=Z,请用图示说明下列程序执行后堆栈的内容是多少?

①MOV SP, #70H ②MOV SP, #60H

PUSH 20H PUSH 22H

PUSH 21H PUSH 21H

PUSH 22H PUSH 20H

解:(73H)=Z;

(72H)=Y;

(71H)=X;

(63H)=X;

(62H)=Y;

(61H)=Z;

3-20 试编出能完成如下操作的程序:

解:

①使20H单元中数的高两位变“0”,其余位不变;

ANL 20H, #3FH

②使20H单元中数的高两位变“1”,其余位不变;

0RL 20H, #0C0H

③使20H单元中数的高两位变反,其余位不变;

XRL 20H, #0C0H

④使20H单元中数的高四位变“1”,低四位变“0”;

MOV 20H, #0F0H

⑤使20H单元中数的所有位变反。

XRL 20H, #0FFH

3-27 已知:外部RAM 2000H为始址的存储区有20个带符号补码数,请编一程序把正数和正零取出来放到内部RAM 20H为始址的存储区(负数和负零不作处理)。

解:

ORG 0000H

AJMP MAIN

ORG 0100H

MAIN: MOV R0,#14H

MOV R1,#20H

MOV DPTR, #2000H

ROT: MOVX A, @DPTR

JB ACC.7,NEXT

MOV @R1,A

INC R1

NEXT: INC DPTR

DJNZ R0,ROT

SJMP $

END

第四章作业(P104)

4-7 已知RAM的BLOCK单元,请编写其中可以统计正负数个数分别存入NUM 和NUM+1单元的程序。

解:

ORG 0100H

LEN DATA 20H

NUM DATA 21H

BLOCK DATA 23H

MAIN: MOV NUM, #00H

MOV NUM+1,#00H

MOV R0,#BLOCK

LOOP: MOV A,@R0

JNB ACC.7,POSI

INC NUM+1

SJMP NEXT

POSI: INC NUM

NEXT: INC R0

DJNZ LEN,LOOP

SJMP $

END

4-9 外部RAM从2000H-2100H单元有一数据块,请编出将它们传送到外部RAM 3000H-3100H区域的程序。

解:采用当型循环,判断程序结束条件

ORG 1000H

MOV DPTR,#2000H

NEXT: MOVX A, @DPTR

ORL DPH , #10H ; 将DPH中的20H变成30H

MOVX @DPTR, A

ANL DPH , #0EFH ; 将DPH中的30H变成20H

INC DPTR

MOV A, DPH

CJNE A, #21H, NEXT

MOVX A, @DPTR ;将2100H单元的数据送A

MOV DPH, #31H

MOVX @DPTR, A ;将A的数据送3100H单元

SJMP $

END

4-11 将内部RAM的AAA单元中8位无符号数转换成BCD码表示的十进制数。(要求用连续除10的方法实现)

解:

ORG 0100H

AAA DATA 20H

BAI DATA 21H

SHI DATA 22H

GE DATA 23H

MOV A, AAA

MOV B,#0AH

DIV AB

MOV GE, B

MOV B,#0AH

DIV AB

MOV SHI, B

MOV BAI, A

SJMP $

END

4-15 请编写能从内部RAM的BLOCK为起始地址的20个无符号数找出最小值,并把它送到MIN单元的程序。

解:

ORG 0100H

MIN DATA 20H

BLOCK DATA 21H

MAIN:MOV R0,#BLOCK

MOV R2,#13H

MOV A,@R0

LOOP:INC R0

MOV B,@R0

CJNE A,B,NEXT

NEXT:JC NEXT1

MOV A,@R0

NEXT1:DJNZ R2,LOOP

MOV MIN,A

SJMP $

END

第五章作业(P155)

6-4 编程,利用定时器T0(工作在方式1)产生一个50Hz的方波,由P1.0输出,晶振频率为12MHz。

解:按照题意,定时器T0需要工作在方式1定时10ms,则TMOD控制字为01H;已知fosc=12MHz,则机器周期为1μs。定时初值=216– 10ms/1μs= 55536=D8F0H,即TH0=0D8H,TL0=0F0H。则相应的程序如下:

ORG 0000H

AJMP START

ORG 2000H

START:MOV TMOD,#01H ;写入工作方式字

MOV TH0,#0D8H ;写入计数初值

MOV TL0,#0F0H

SETB TR0 ;启动T0

LOOP:JBC TF0, PE ;TF0=1溢出转移PE,并清除TF0 AJMP LOOP ;TF0为0转LOOP等待

PE:MOV TH0,#0D8H ;重装初值

MOV TL0,#0F0H

CPL P1.0 ;取反

AJMP LOOP ;转LOOP等定时时间到

END

6-5 在8051单片机中,已知晶振频率为12MHz,试编程使P1.0和P1.2分别输出周期为2ms和500ms的方波。设晶振频率为6MHz,试用T0作为外部计数器,编程实现每当计到1000个脉冲,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环下去。

解:

1)按照题意,定时器T0需要工作在方式1定时1ms,则TMOD控制字为01H;已知fosc=12MHz,则机器周期为1μs。定时初值=216– 1ms/1μs= 64536=FC18H,即TH0=0FCH,TL0=18H。则相应的程序如下:

主程序:

ORG 1000H

START:MOV TMOD,#01H

MOV TH0,#0FCH

MOV TL0,#18H

MOV IE, #82H ;开T0中断

SETB TR0 ;启动T0

MOV R0,#0FAH ;软件计数器赋初值LOOP:SJMP $ ;等待中断

中断程序:

ORG 000BH

AJMP BRT0

ORG 0080H

BRT0:CPL P1.0

DJNZ R0,NEXT ;250ms未到,转NEXT

CPL P1.2 ;250ms到,改变P1.2电平

MOV R0,#0FAH

NEXT:MOV TH0,#0FCH

MOV TL0,#18H

RETI

END

2)按照题意,定时器T0需要工作在方式1计数方式,定时器T1需要工作在方式1定时方式,则TMOD控制字为15H;T0计数初值为216–1000= 64536=FC18H,即TH0=0FCH,TL0=18H;已知fosc=6MHz,则机器周期为2μs。T1定时初值=216– 2ms/2μs= 64536=FC18H,即TH1=0FCH,TL1=18H。则相应的程序如下:

ORG 2000H

START:MOV TMOD,#15H ;写入工作方式字

MOV TH0,#0FCH ;写入计数初值

MOV TL0,#18H

MOV TH1,#0FCH

MOV TL1,#18H

SETB TR0 ;启动T0

LOOP:JBC TF0, PE ;TF0=1溢出转移PE,并清除TF0 AJMP LOOP ;TF0为0转LOOP等待

PE:SETB TR1 ;启动T1定时,关T0计数

CLR TR0

LOOP1:JBC TF1, PE1 ;TF1=1溢出转移PE1,并清除TF1 AJMP LOOP1 ;TF1为0转LOOP1等待

PE1:MOV TH0,#0FCH ;重装初值

MOV TL0,#18H

MOV TH1,#0FCH

MOV TL1,#18H

SETB TR0 ;启动T0计数,关T1定时

CLR TR1

AJMP LOOP

END

6-6 已知单片机系统时钟频率为6MHz,若要求定时值分别为0.1ms、1ms和10ms,定时器T0工作在方式0、方式1和方式2时,定时器对应的初值各为多少?

解:已知fosc=6MHz,则机器周期为2μs。

方式0的初值分别为:8142(1FCEH),即TH0=0FEH,TL0=0EH;7692(1E0CH),即TH0=0F0H,TL0=0CH;3192(0C78H),即TH0=63H,TL0=18H。

方式1的初值分别为:65486(FFCEH);65036(FE0CH);60536(EC78H)。

方式2定时0.1ms的初值为206(CEH),不能直接定时1ms和10ms。

第六章作业(P210)

8-2 什么是半双工、全双工方式?MCS-51单片机属于哪种传送方式?

解:

1)半双工方式——通信双方只有一条双向传输线,允许数据双向传送,但每个时刻上只能有一方发送,另一方接收,这是一种能够切换传送方向的单工方式;

2)全双工方式——通信双方有两条传输线,允许数据同时双向传送,其通信设备应具有完全独立的收发功能。

单片机属于全双工传送方式。

8-6 设串行口通信波特率为2400bps,异步帧信号由8位数据,无校验位和一个停止位组成,请问传输1024个字节数据,需要多少时间?

解:

每一个字符规定包含10个位(一个起始位、8个数据位和1个停止位),则每秒钟可以传送240个字节数据,传输1024个字节数据共需要4.2667秒

8-7 请用中断法编出串行口方式1下的发送程序,设单片机主频为6MHz,波特率为1200bps,发送数据缓冲区在外部RAM,始址为Tblock,数据块长度为30,采用偶校验,放在发送数据第8位(数据块长度不发送)。

解:

串行口工作在方式1,定时器T1工作在方式2,作为波特率发生器。

定时常数:X=256 ―(fosc*2SMOD)/( 384*波特率)

取SMOD=1,则X=229.96=230=E6H。(若取SMOD=0,则X=F3H)

采用中断方式编程,单片机发送程序如下:

主程序:

ORG 2000H

Tblock DATA 2000H

MOV TMOD, #20H ;定时器(波特率)初始化

MOV TL1, #0E6H

MOV TH1, #0E6H

CLR ET1 ;关定时器T1中断

SETB TR1 ;启动T1

MOV SCON, #40H ;串行口初始化(方式1)

MOV PCON, #80H ;SMOD=1

MOV DPTR, #Tblock

MOV R7, #1EH

TRS: MOVX A, @DPTR

MOV C, PSW.0

MOV ACC.7,C

MOV SBUF, A ;启动发送

DEC R7

INC DPTR

SETB EA ;允许串行口中断WAIT: SETB ES

SJMP WAIT ;等待串行口中断

中断服务程序:

ORG 0023H

LJMP SBV

ORG 0100H

SBV: CLR ES

CLR TI

MOVX A, @DPTR

MOV C, PSW.0

MOV ACC.7,C

MOV SBUF, A ;启动发送

DJNZ R7,NEXT

SJMP $

NEXT: INC DPTR

RETI ;中断返回

END

第七章作业(补充题)

7-1 如下图所示8051的P1.4~P1.7接有4个发光二极管,P1.0~P1.3接有4个开关,最下方按键用于产生中断请求信号。每中断一次,采集一次P1.0~P1.3的开关状态反映到P1.4~P1.7的发光二极管上。

解:

程序清单如下:

ORG 0000H ;主程序

SJMP MAIN

ORG 0003H

AJMP INT0 ;转入服务程序

ORG 0030H

MAIN: SETB IT0 ;设INT0为边沿触发

SETB EX0 ;允许INT0中断

SETB EA ;开放总允许

SJMP $

INT0: ORL P1, #0FH ;中断服务程序:

MOV A, P1 ;从P1口输入开关状态

SWAP A ;交换高、低4位

XRL A, #0F0H ;低4位不变,高4位取反

MOV P1,A ;输出

RETI

END

7-2单片机P1端口并行连接两只共阴极数码管显示器,利用扫描方式循环显示两位数00、01、02、……98、99。

1) 写出共阴极接法下数码管显示0~9的字型码;

2) 编写程序实现上述功能。

解:

1)3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH

2) 程序清单如下:

ORG 0000H

AJMP MAIN

ORG 000BH

AJMP TIMER

ORG 0030H

TAB DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH

MAIN: MOV R0,#00H

MOV DPTR, #30H

MOV TMOD, #01H

MOV TH0, #0D8H

MOV TL0, #0F0H

SETB ET0

SETB EA

SETB TR0

START: INC R0

CJNE R0,# 100, NEXT

MOV R0,#00H

NEXT: MOV A, R0

MOV B,10

DIV AB

MOV R1, A ;十位缓存

MOV R2, B ;个位缓存

MOV R4, #200 DELAY:MOV R5, #200

DJNZ R5, $

DJNZ R4, DELAY

AJMP START

TIMER: CLR TR0

MOV A, R1

MOVC A, @A+DPTR

MOV P1, A

SETB P2.1

MOV R6, #200

DJNZ R6, $

CLR P2.1

MOV A, R2

MOVC A, @A+DPTR

MOV P1, A

SETB P2.0

MOV R6,#200

DJNZ R6, $

CLR P2.0

MOV TH0, #0D8H

MOV TL0, #0F0H

SETB TR0

RETI

END

第八章作业(补充题)

8-1 根据图9-3电路,请编写如下图所示梯形波,要求梯形波的下底由8031内部定时器实现。(设f osc=12MHz)

解:

ORG 0000H

AJMP START

ORG 0100H

START:MOV TMOD,#10H ;写入工作方式控制字

MOV TH1,#3CH ;写入计数初值

MOV TL1,#B0H

MOV R0,#0FEH

CLR A

DOWN:MOVX @R0,A ;线性下降段

INC A

JNZ DOWN

SETB TR1 ;启动T1工作

WAIT:JBC TF1,NEXT ;等待50ms时间到

SJMP WAIT

NEXT:CLR TR1 ;关闭T1

MOV TH1,#3CH ;重装计数初值

MOV TL1,#B0H

MOV A,#0FEH

UP:MOVX @R0,A ;线性上升段

DEC A

JNZ UP

SJMP DOWN

END

8-2用查询和中断方式实现AD转换编程,要求对通道5连续采集3次取中值作为本次采样值,并存于内部RAM 30H单元。

中断方法:

;主程序……

ORG 0100H

START: MOV R0,#0F0H

MOV R1,#30H

MOV R2,#05H ;IN5通道号

MOV R3,#03H ;循环次数

SETB EA

SETB EX1 ;开外中断0

SETB IT1 ;中断请求信号为下降沿触发

MOV A,R2 ;选通道IN5

MOVX @R0,A ;启动A/D转换

LOOP: SJMP LOOP ;等待中断

;中断服务程序

……

ORG 1000H

ADINT0: MOVX A,@R0 ;读取A/D转换数据

MOV @R1,A ;存储数据

INC R1 ;数据指针加1

DJNZ R3,ROT

ACALL ADSHUJU ;调用数据处理子程序

CLR EX0

JMP EXIT

ROT: MOV A,R2

MOVX @DPTR,A ;启动A/D转换

EXIT: RETI

;数据处理子程序

ADSHUJU:MOV A,30H

CJNE A,31H,NEXT1

NEXT1:JC NEXT2

XCH A,31H ;≥交换

NEXT2:CJNE A,32H,NEXT3

NEXT3:JC NEXT4

XCH A,32H ;≥交换

NEXT4:MOV 30H,A ; (30H)=Min

MOV A,31H

CJNE A,32H,NEXT5

NEXT5:JC NEXT6

XCH A,32H ;≥交换

NEXT6:MOV 31H,A ;(31H)=Mid,(32H)=Max MOV 30H,31H ;取中间数送(30H)

RET

END

查询方法:

;主程序

……

ORG 0100H

SETB P3.3

START:MOV R0,#0F0H

MOV R1,#30H

MOV R2,#05H ;IN5通道号

MOV R3,#03H ;循环次数

MOV A,R2 ;选通道IN5

MOVX @R0,A ;启动A/D转换

WAIT0:JNB P3.3,WAIT0 ;等待转换开始

WAIT:JB P3.3,WAIT ;查询转换是否结束

ADINT0:MOVX A,@R0 ;读取A/D转换数据

MOV @R1,A ;存储数据

INC R1 ;数据指针加1

DJNZ R3,ROT

ACALL ADSHUJU ;调用数据处理子程序

JMP EXIT

ROT: MOV A,R2

MOVX @DPTR,A ;启动A/D转换

JMP WAIT

;数据处理子程序

ADSHUJU:MOV A,30H

CJNE A,31H,NEXT1

NEXT1:JC NEXT2

XCH A,31H ;≥交换

NEXT2:CJNE A,32H,NEXT3

NEXT3:JC NEXT4

XCH A,32H ;≥交换

NEXT4:MOV 30H,A ;(30H)=Min

MOV A,31H

CJNE A,32H,NEXT5

NEXT5:JC NEXT6

XCH A,32H ;≥交换

NEXT6:MOV 31H,A ;(31H)=Mid,(32H)=Max MOV 30H,31H ;取中间数送(30H)

RET

EXIT:END

相关文档
相关文档 最新文档