《单片微型计算机与接口技术》思考题与习题解答01

更新时间:2023-12-08 12:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《单片微型计算机与接口技术》思考题与习题解答 第0章 基础知识

0.1 将下列十进制数转换为十六进制数:64,98,80,100,125,255。 0.1 40H,62H,50H,64H,7DH,FFH

0.2 将下列十六进制无符号数转换为十进制数:32CH,68H,I)5H,100H,B78H,3ADH。 O.2 812,104,213,256,2936,941

0.3 写出下列十进制数的原码和补码,用8位或16位数填人表1中(要求用十六进制数表示)。

表1

十进制数 28 -28 l00 -130 0.3

十进制数 28 -28 100 -130 原码 1CH 9CH 64H 8082H 补码 1CH E4H 64H FF7EH 十进制数 250 -347 928 -928 原码 FAH 815BH 03AOH 83AOH 补码 FAH FEA5H 03AOH FC60H 原码 补码 十进制数 250 -347 928 -928 原码 补码 0.4 用十进制数写出下列补码表示的机器数的真值:1BH,97H,80H,F8H,397DH,7AEBH,9350H,CF42H。

O.4 机器数的真值分别为:27,233,-128,-8,14717,31467,-27824,-12478

0.5 用补码运算完成下列算式,并指出溢出OV和进位CY:

(1) 33H+5AH (2) -29H-5DH (3) 65H-3EH (4) 4CH-68H O.5 (1) 33H+5AH=8DH,OV=1,CY=O (2) -29H-5DH=7AH,OV=0,CY=1

(3) 65H-3EH=27H,OV=0,CY=1 (4) 4CH-68H=E4H,0V=O,CY=O 0.6 将表2中的十进制数按要求转换,用十六进制数填入。

表2

十进制数 38 255 483 764 1000 1025 压缩BCD数 非压缩BCD数 ASCII码 1

O.6

十进制数 38 255 483 764 1000 1025 压缩BCD数 38H 255H 483H 764H 1000H 1025H 非压缩BCD数 0308H 020505H 040803H 070604H 01000000H 01000205H ASCII码 3338H 323535H 343833H 373634H 31303030H 31303235H 0.7 写出下列ASCII码表示的十六进制数(如313035H为105H):374341H,32303030H,3841353DH。

0.7 ASCIl码表示的十六进制数分别为:105H,7CAH,200¨。H,8A50H

第1章 MCS-51单片机

1.1 什么是嵌入式系统?其控制核心有哪几种类型? 1.1 见绪论

1.2 单片微型计算机与微处理器在结构上和使用中有什么差异?单片机和DSP在使用上有什么差别?

1.2 单片微型计算机是包含CPU、存储器和I/O接口的大规模集成芯片,即它本身包含了除外部设备以外构成微机系统的各个部分,只需接外设即可构成独立的微机应用系统。微机处理器仅为CPU,CPU是构不成独立的微机系统的。DSP是数据处理的专用芯片,单片机主要用做控制,也具有简单的数据处理能力。

1.3 51系列单片机内部有哪些功能部件? 1.3 见1.1.1节

1.4 51系列单片机有哪些品种?结构有什么不同?各适用于什么场合? 1.4 见绪论

1.5 51系列单片机的存储器可划为几个空间?各自的地址范围和容量是多少?在使用上有什么不同? 1.5 见表1-5

1.6 在单片机内部RAM中,哪些字节有位地址,哪些没有位地址?特殊功能寄存器SFR中哪些可以位寻址?有什么好处? 1.6 见表1-1和表1-2

1.7 已知PSW=10H,通用寄存器R0~R7的地址分别是多少?

1.7 当PSw=10H,表明选中的为第二组通用寄器RO~R7的地址为10H~17H

1.8 程序存储器和数据存储器可以有相同的地址,而单片机在对这两个存储区的数据进行操作时,不会发生错误,为什么?

1.8 序存储器和数据存储器尽管地址相同,但在数据操作时,所使用的指令不同,选通信号也不同,因此不会发生错误。

1.9 填空:

堆栈设在 存储区,程序存放在 存储区,I/0接口设置在 存储区,中断服务程序存放在 存储区。

2

1.9 内部数据 程序 外部数据 程序

1.10 若单片机使用频率为6MHz的晶振,那么状态周期、机器周期和指令周期分别是多少?

1.10 振荡周期=0.1667us,机器周期=2us,指令周期=2~8us

1.11 复位时,A= ,PSW= ,SP= ,P0~P3= 1.11 A=0,PSW=0,SP=07,P0~P3=FFH

第2章 指令系统

2.1 MCS-51单片机有哪几种寻址方式,适用于什么地址空间?用表格表示。 2.1 见2.1节

2.2 MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据存储单元的内容是否为O?

2.2 因为累加器A自带零标志,因此,若判断某内部RAM单元的内容是否为零,必须将其内容送到A,通过 JZ指令即可进行判断。

2.3 设A=0,执行下列两条指令后,A的内容是否相同,说明道理。 (1) MOVC A,@A+DPTR (2) MOVX A,@DPTR

2.3 当A=O时,两条指令的地址虽然相同,但操作码不同,MOVC是寻址程序存储器,MOVX是寻址外部数据存储器,送入A的是两个不同存储空间的内容。

2.4 指出下列各指令中操作数的寻址方式

指 令 ADD A,40H PUSH ACC MOV B,20H ANL P1,#35H MOV @R1,PSW MOVC A,@A+DPTR MOVX @DPTR,A 目的操作数寻址方式 源操作数寻址方式 2.4 目的操作数 源操作数 寄存器 直接 SP间接寻址 直接 直接 直接 直接 立即 寄存器问址 直接 寄存器 变址 寄存器间址 寄存器

2.5 执行下列程序段 MOV A,#56H ADD A,#74H ADD A,ACC

后,CY= ,OV= ,A= 。 2.5 CY=1,OV=0,A=94H

2.6 在错误的指令后面括号中打×。

MOV @R1,#80H ( ) MOV R7,@R1 ( ) √ ×

3

MOV 20H,@R0 ( ) MOV R1,#0100H ( ) √ × CPL R4 ( ) SETB R7,0 ( ) × × MOV 20H,21H ( ) ORL A,R5 ( ) √ √ ANL R1,#OFH ( ) XRL P1,#31H ( ) × √ MOVX A,2000H ( ) MOV 20H,@DPTR ( ) × × MOV A,DPTR ( ) MOV R1,R7 ( ) × × PUSH DPTR ( ) POP 30H ( ) × √ MOVC A,@R1 ( ) MOVC A,@DPTR ( ) × × MOVX @DPTR,#50H ( ) RLC B ( ) × × ADDC A,C ( ) MOVC @R1,A ( ) × ×

2.6 √ × √ × × × √ √ × √ × × × × × √ × × × × × ×

2.7 设内部RAM中(59H)=50H,执行下列程序段: MOV A,59H MOV R0,A MOV A,#0 MOV @R0,A MOV A,#25H MOV 51H,A MOV 52H,#70H

问A= , (50H)= , (51H)= , (52H)= 。 2.7 A=25H,(50H)=O,(51H)=25H,(52H)=70H

2.8 设SP=60H,内部RAM的(30H)=24H,(31H)=10H,在下列程序段注释的括号中填执行结果。

PUSH 30H ;SP=( ), (SP)=( ) PUSH 3lH ;SP=( ), (SP)=( ) POP DPL ;SP=( ), DPL=( ) POP DPH ;SP=( ), DPH=( ) MOV A,#00H MOVX @DPTR,A

最后执行结果是( )。 2.8 SP=(61H),(SP)=(24H) SP=(62H),(SP)=(10H) SP=(61H),DPL=(10H)

SP=(60H),DPH=(24H)执行结果将0送外部数据存储器的2410单元。

4

2.9 对下列程序中各条指令作出注释,并分析程序运行的最后结果。 MUV 20H,#0A4H MOV A,#017)6H MOV R0,#20H MOV R2,#57H ANL A,R2 0RL A,@R0 SWAP A CPL A ORL 20H,A SJMP $

2.9 程序运行后内部RAM(20H)=B4H,A=90H

2.10 将下列程序译为机器码。 机器码 源程序

LA: MOV A,#01H LB: MOV P1,A RL A

CJNE A,#10,LB SJMP LA

2.10 机器码 源程序

7401 LA:M()V A,#01H F590 LB:M()V P1,A 23 RL A

B40AFA CJNE A,#10,LB 80F6 SJMP LA

2.11 将累加器A的低4位数据送P。口的高4位,P。口的低4位保持不变。 2.11 ANL A,#0FH SWAP A

ANL P1.#OFH ORL P1,A SJMP $

2.12 编程将R0(R2)的内容和R1(R3)的内容相交换。 2.12 MOV A,RO XCH A,R1 MOV R0,A SJMP $ 2.12 MOV A,R2 XCH A,R3 MOV R2,A SJMP $

2.13 试用3种方法将A累加器中的无符号数乘4,积存放于B和A寄存器中。 2.13

(1)利用乘法指令 MOV B,#04H

5

MUL AB SJMP $ (2) 利用位移指令 RL A RL A

MOV 20H。A ANL A,#03H MOV B,A MOV A,20H ANL A,#OFCH SJMP $

(3) 用加法指令完成 ADD A,ACC

MOV RO,A :RO=2A MOV A,#0 ADDC A。#0

MOV B,A ;B存2A的进位 MOV A,RO ADD A,ACC

MOV R1,A ;R1=4A MOV A,B

ADDC A,B ;进位x 2 MOV B,A ;存积高位 MOV A,R1 ;存积低位 SJMP $

2.14 编程将内部RAM 40H单元的中间4位变反,其余位不变放回原单元。 2.14 方法1:XRL 40H,#3CH SJMP $

方法2:MOV A,40H CPL A

ANL A,#3CH ANL 40H,#OC3H ORL 40H,A

SJMP $

2.15 有两个BCD码数存放在(20H)和(21H)单元,完成(21H)+(20H)=>(23H)(22H)。

(24H)+(25H)=>(23H)(22H)

2.15 MOV A,20H ADD A,21H DA A

MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0

MOV 23H,A ;存进位 SJMP $

6

2.15 MOV A,24H ADD A,25H DA A

MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0

MOV 23H,A ;存进位 SJMP $

2.16 如果R0的内容为0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。 2.16 MOV A.R0 JZ ZE

MOV R1.#OFFH SJMP $

ZE:MOV R1,#O SJMP $

2.17 完成(51H)×(50H)=>(53H)(52H)的编程(式中均为内部RAM)。 2.17 MOV A,50H MOV B,51H MUL AB MOV 53H。B MOV 52H,A

SJMP $

2.18 将P1.1和P1.0同时取反10次。(将P1.2和P1.0同时取反10次) 2.18 MOV R7,#0AH WOP:XRL P1,#03H DJNZ R7,WOP SJMP $

2.18 MOV R7。#0AH

WOP:XRL P1,#05H

DJNZ R7,WOP SJMP $

2.19 将内部RAM单元3字节数(22H)(21H)(20H)×2送(23H)(22H)(21H)(20H)单元。 2.19 单片机的移位指令只对A,且只有循环移位指令,为了使本单元的最高位移进下一单元的最低位,必须用大循环移位指令移位4次。

ORG O CLR C MOV A,20H RLC A MOV 20H,A MOV A,21H RLC A MOV 21H,A MOV A,22H

7

RLC A

MOV 22H.A MOV A,#O RLC A MOV 23H,A SLMP $

第3章 程序设计

3.1 编写程序,把片外数据存储器0000H~0050H中的内容传送到片内数据存储器20H~70H中。

3.1 因为是多个单元操作,为方便修改地址,使用问址操作。片外地址用DPTR指示.只能用M()Vx指令取数到A,片内地址用RO或R1指示,只能用MOV指令操作,因此,循环操作外部数据存储器一A一内部数据存储器。 ORG OOOOH

MOV DPTR,#0000H

MOV R0,#20H

LOOP:MOVX A,@DPTR MOV @R0,A

INC DPTR INC R0

CJNE R0,#71H, LOOP SJMP $

3.2 编写程序,实现双字节加法运算,要求RIR0+R7R6=>(52H)(51H)(50H)(内部RAM)。 3.2 要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。

ORG 0 MOV A,RO ADD A,R6 MOV 50H,A MOV A,R7 ADDC A,R1 MOV 51H,A MOV A,#0 ADDC A,#O MOV 52H,A SJMP$

3.3 设X在累加器A中(0≤X≤20),求X2并将平方数高位存放在R7中,低位存放在R6中。试用查表法编出子程序。 3.3 A中放X(小于14H)的数,平方表的一个数据占2个字节,可用BCD码或二进制数存放(如A中放的是 BCD码,则要先化成二进制数再查表)。

ORG 0

MOV DPTR,#TAB ADD A,ACC ;A*2 PUSH ACC

MOVC A,@A+DPTR

8

MOV R7,A POP ACC INC A

MOVC A,@A+DPTR MOV R6,A

SJMP $

TAB:DB 00,00,00,01,OO,04,OO,09,OO,16H,? DB? 04H,00

3.4设内部RAM的20H和21H单元中有两个带符号数,将其中的大数存放在22H单元中,编出程序。

3.4 先用异或指令判两数是否同号,在同号中判大小,异号中正数为大。 ORG 0 MOV A,20H XRL A.21H ANL A,#80H JZ CMP

JB 20H.7,BG AG:MOV 22H,20H SJMP $

BG:MOV 22H,21H

SJMP $

CMP:MOV A,20H CJNE A,21H,GR GR:JNC AG MOV 22H,21H

SJMP $

3.5若单片机的晶振频率为6MHz,求下列延时子程序的延时时间。 DELAY: MOV R1,#0F8H LOOP: MOV R3,#0FBH DJNZ R3,$ DJNZ R1,LOOP RET

3.5 fosc=6MHz,MC=2us

机器周期数 DELAY:MOV R1,#OF8H 1 LOOP: MOV R3,#0FBH 1 DJNZ R3,$ 2 DJNZ R1,LOOP 2

RET 2 (1+2+(1+2×251+2)×248)×2us=250.48ms

3.6 编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCII码存放在25H开始的单元内。

3.6 将待转换的数分离出高半字节并移到低4位加30H;再将待转换的数分离出低半字节并加30H,安排好源地址和转换后数的地址指针,置好循环次数。 ORG 0000H

9

MOV R7,#05H MOV RO,#20H

MOV R1,#25H NET:MOV A,@RO ANL A,#OFOH SWAP

ADD A,#30H MOV @R1,A INC R1

MOV A,@RO ANL A,#OFH ADD A,#30H MOV @R1,A INC R0 INC R1

DJNZ R7,NE SJMP $ END

3.7 从内部存储器30H单元开始,有16个数据,试编一个程序,把其中的正数、负数分别送40H和50H开始的存储单元,并分别将正数、负数和零的个数送R4,R5,R6。 3.7 片内RAM间址寄存器只有Ro和R1,而正数、负数和零共需3个寄存器指示地址,这时可用堆栈指针指示第3个地址,POP和PUSH指令可自动修改地址。RO指正数存放地址,Rl指负数存放地址,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。 ORG 0000H MOV R7,#10H MOV A,#0 MOV R4,A MOV R5,A MOV R6,A MOV R0,#40H MOV R1,#50H

MOV SP,#2FH NEXT:POP ACC JZ ZER0 JB ACC.7,NE INC R4 MOV @RO,A INC R0 AJMP DJ NE:INC R5 MOV @R1,A INC R1

AJMP DJ ZER0:INC R6

DJ:DJNZ R7,NEXT

10

TMOD=Ox06;THO=-10;TLO=-10; TRO=1:{ while(1)

dO{}while(TF0==0) TF0=0;p10=~p10; }}

中断方式:#include sbit p1_O=P1^O; tov()interrrupt 1 {p1_O=~p1_O; } maln(){

EA=1;ET0=1;TMOD=0x06; TH0=0xf6;TL0=0xf6;TR0=1; while(1);}/*等待中断*/

7.6 在P1.0引脚接一驱动放大电路驱动扬声器,利用T1产生lOOOHz的音频信号从扬声器输出。 7.6 1000Hz的周期为1ms,即要求每500us P1.0变反一次,使用T1方式1,MC=12/fosc=1us,C=216-500us/1us=FE0CH,除TMOD=10H,TH0=FEH,Tl0=0CH外,程序与7.5题相同,注意每次要重置TH0和TL0。

7.7 已知8XX51单片机系统时钟频率为6MHz,利用定时器T0使P1.2每隔350us,输出一个50us脉宽的正脉冲。

7.7 fosc=6MHz,MC=2us,方式2的最大定时为512us,合乎题目的要求。50us时,计数初值为C1=256-25=E7H,350us时,计数初值为C2=256-175=51H 汇编语言程序 ORG 0000H MOV TMOD,#02H

NEXT:MOV TH0,#51H MOV TL0,#51H CLR P1.2 SETB TR0

AB1:JBC TF0,EXT

SJMP AB1 EXT:SETB P1.2 MOV TH0,#0E7H

MOV TL0,#0E7H AB2:JBC TF0,NEXT SJMP AB2 C语言程序

#include

void timet(unsigned char t); sbit p1_2=P1^2 main(){for(;;)

p1_2=O;timer(7); p1_2=1;timer(1); }

26

void timer(unslgned char t) {unsigned char i;

for(i=0;i

TH0=-25/256;TL0=-25%6; TR0=1: While(TF0!=1); TR0=0: }}

上述的计数初值没有考虑指令的执行时间。因此误差较大,查每条指令的机器周期,扣除这些时间.算得 C—E3H,这样误差较小。

7.8 在8XX51单片机中,已知时钟频率为12MHz,编程使P1.0和P1.1分别输出周期为2ms和50us的方波。

7.8 P1.0输出2ms脉冲,P1.1输出50us脉冲。 汇编语言程序 ORG 0000H MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0

MOV R0,#04H NE: JNB TF0,$ CLR TF0 CPL P1.1 DJNZ R0,NE CPL P1.O AJMP NE C语言程序

#include sbit p11=P1^l; sbit p10=P1^0; main(){ char i;

TMOD=0x02;TH0=06;TL0=06:TR0=1; while(1){

for(i=0;i<4:i++){ do{}while(!TF0); P11=~P11: }

P10=~P10: }}

7.9 设系统时钟频率为6MHz,试用定时器T0。作为外部计数器,编程实现每计到1000个脉冲后,使T1定时2ms,然后T0又开始计数,这样反复循环。 7.9 C语言程序

T0计数1000个脉冲,采用方式1;T1定时2ms,fosc=6MHz,C=-2ms/2us=-1000

27

include

counter(){ TH0=-1000/256; TLO=-1000%6; TR0=1;TR1=0; while(TF0!=1); TF0=0; }

timer(){

TH1=-1000/256;TL1=-1000%6;TR1=1;TR0=0; while(TF1!=0); TF1=0; }

main() TMOD=0x15; for(;;){ counter(): timer():

7.10 利用8XX51单片机定时器T0测量某正单脉冲宽度,已知此脉冲宽度小于10ms,主机频率为12MHz。编程测量脉宽,并把结果转换为BCD码,顺序存放在以片内50H单元为首地址的内存单元中(50H单元存个位)。 7.10 C语言程序

#lnclue sbit p3_2=P3^2; main(){

unsingcd char *P,i; int a;

P=0x50;

TMOD=0x09; TL0=0;TH0=0;

while(P3_2==1);/*等待INT0变低*/ TR0=1;

while(P3_2==0);/*等待-INT0变高*/ while(P3_2==1);/*等待-INT0变低*/

TR0=0; i=TH0;

a=i*256+TL0; for(;a!=O;)

{ /*转换为非压缩IR7D码*/

*P=a; a=a/10;

P++; } }

第8章 串行口

28

8.1 什么是串行异步通信?它有哪些特点?MCS-51单片机的串行通信有哪几种帧格式? 8.1见8.1节

8.2 某异步通信接口按方式3传送,已知其每分钟传送3600个字符,计算其传送波特率。

8.2 方式3为每帧11位数据格式.即3600*11/60=660(波特)

8.3 为什么定时器T1用做串行口波特率发生器时,常采用工作方式2? 若已知系统时钟频率、通信选用的波特率,如何计算其初值?

8.3 T1的方式2模式不需要重装时间常数(计数初值),不影响cPU执行通信程序。设波特率为fboud计数初值为X,依据公式

fbaud=(2smod/32)*(fosc/12(256-X)) 求得X=256-((2smod/32)*(fosc/fbaud))。

8.4 已知定时器T1设置为方式2,用做波特率发生器,系统时钟频率为6MHz,求可能产生的最高和最低的波特率是多少?

8.4最低波特率为,T1定时最大值时,此时计数初值为256,并且SMOD=0,得

fbaud=(1/32)*(fosc/(12(256-0))=61

最高波特率为T1定时最小值且SOMD=1时,得 fbaud=(2/32)*fosc/(12(256-1))=31250

8.5 设甲、乙两机采用方式1通信,波特率为4800,甲机发送O,1,2,?,1FH,乙机接收存放在内部 RAM以20H为首址的单元,试用查询方式编写甲、乙两机的程序(两机的fosc=6MHz)。

8.5取SMOD=1计算TH1=TL1=B2;

;***********************发送查询方式******

ORG 0000H

MOV TMOD,#20H MOV THl,#OB2H MOV TL1,#0B2H SETB TR1

MOV SCON,#40H MOV A,#O

NEXT:MOV SBUF,A TES:JBC T1,ADD1 SJMP TES ADD1:INC A

CJNE A,#20H,NEXT SJMP $ END

;************************发送中断方式********************************* ORG 0000H

AJMP MAIN;转主程序 ORG 0023H ;中断服务 CLR TI INC A

MOV SBUF,A

CJNE A,#20H,RE

29

CLR ES RE:RETI

MAIN:MOV TMOD,#20H;主程序 MOV TH1,#0B2H MOV TL1,#082H SETB TR1

MOV SCON,#40H SETB EA SETB ES MOV A,#O MOV SBUF,A

SJMP$ ;等待中断

;*******************************接收查询方式***************************

ORG 0000H MOV TMOD,#20H MOV TH1,#0B2H MOV TL1,#0B2H SETB TR1

MOV SCON,#50H MOV RO。#20H TEC:JBC R1,REC

SJMP TES REC:MOV @R0,SBUF INC R0

CJNE R0,#40H,TEC

SJMP $ END

;******************************接收中断斤方式**************************** ORG O000H

AJMP MAIN;转主程序 ORG 0023H;中断服务 CLR RI

MOV @RO,SBUF INC R0

CJNF R0,#40,RE CLR ES RE:RETI

MAlN:MOV TMOD,#20H;主程序 MOV TH1,#0B2H MOV TL1,#0B2H SETB TR1

MOV SCON,50H SETB EA SETB ES

SJMP$ ;等待中断 END

30

2764(4) 0000H~lFFFH 2764(3) 2000H~3FFFH 2764(2) 4000H~5FFFH 2764(1) 6000H~7FFFH

9.6 在8XX51单片机上接一片74LS244和一片74LS273,使74LS244的地址为BFFFH,74LS273的地址为DFFFH,并编程从74LS244输入向74LS273输出。

9.6 设计电路见习题9.6图。图中采用的是80C31,由于80C31内部无ROM,片外必须扩展一片程序存储器。图中扩展2764 8K×4 EPROM。根据地址需求,分别以P2.5和P2.6作为273和244的片选,程序参见例9-2。

9.7 在题9.6的基础上,74LS244接一按键开关,74LS273接一个数码管LED,编程序,使数码管显示按键次数。

9.7 程序参阅习题5.4,将MOV A,P1改为MOVX A,@DPTR,DPTR指向244地址BFFFH;将MOV P1,A改为MOVX @DPTR,A,DPTR指向273地址DFFFH。

9.8 设置8255地址为CFFCH~CFFFH,使用部分译码法设计电路,并设置A口方式1输出,B口方式 O输入,C口不用的初始化程序。 9.8 设计电路见习题9.8图。 MOV DPTR,#OCFFFH MOV A,#0A2H MOVX @DPTR,A

36

9.9 在8XXSl单片机上扩展一片8255,使A口可接1个数码管,PC0接阴极,使用C口的置位/复位控制字,数码管显示的“P”字闪烁。 9.9 按习题9.9图的设计,8255A口、B口、C口、控制口地址分别为7CFFH、7DFFH、7EFFH、7FFFH.A口

方式0输出,C口置位/复位控制。 汇编语言程序: MOV DPTR,#7FFFH

MOV A,#80H ;写控制字 MOVX @DPTR,A

MOV DPTR,#7CFFH ;指向A口 MOV A,#0F3H ;输出“P”段码 MOVX @DPTR,A

MOV DPTR,#7FFFH ;指向控制口

MOV A,#0H ;PC0置0控制字 NEXT:MOVX @DPTR,A ;写入控制口 ACALL DAY ;延时

XRL A,#OlH ;使PC0位变反 AJMP NEXT C语言程序

#inclde

#define COM8255 XBYTE[0x7fff] #define A8255 xBYTE[0x7fff] main(){

unsigned int j; COM8255=0x80; A8255=0xf3: while(1){ COM8255=0x0;

for(j=O;j<=10000;j++); COM8255=0x01:

for(j=0;j<=10000;j++); }}

37

9.10 在8XX51单片机上扩展一片8255,使用A口和C口设计4位数码管动态显示电路,显示\字符(G为小写)。

9.10 8255A口、B口、C口、控制口地址分别为7CFFH、7DFFH、7EFFH、7FFFH,A口方式O输出,C口输出,控制字80H。设计见习题9.10图。

ORG 0000H

MOV DPTR,#7FFFH ;指向控制口

MOV A,#80H ;A口、B口均采用基本输出方式 MOVX @DPTR,A ;写控制字 MOV DPTR,#7CFFH MOV A,#0

MOVX @DPTR,A ;清显示 AGAIN: MOV R0,#0 ;R0存字形表偏移量 MOV R1,#01 ;R1置数码表位选代码 NEXT: MOV DPTR,#7EFFH ;指向C口 MOV A,R1

MOVX @DPTR,A ;从C口输出位选码 MOV A,R0

MOV DPTR,#TAB ;置字形表头地址

38

MOVC A,@A+DPTR ;查字形码表 MOV DPTR,#7CFFH ;指向A口

MOVX @DPTR,A ;从A口输出字形码 ACALL DAY ;延时

INC R0 ;指向下一位字形 MOV A,R1

RL A ;指向下一位 MOV R1,A

CJNE Rl,#10H,NEXT ;4个数码管显示完 SJMP AGAIN

DAY:MOV R6,#50 ;延时子程序 DL2:MOV R7,#7DH DL1:NOP NOP

DJNZ R7,DLl DJNZ R6,DL2 RET

TAB1:DB 6FH,3FH,3FH,5EH;“good”(good)的字形码 9.1l 在8XX51单片机上扩展一片EPROM 27128、一片RAM 6264和一片8255,采用线选方式,写出各自的地址范围。

9.11 提示:EPROM 27128 16KB×8,地址线为14根,6264为8KB×8位,地址线为13根,电路参阅图9-22。

9.12 列出图9-26中的I/O口、RAM、计数器、控制口地址。 9.12 根据电路连线图,见习题9.12图。

I/O口:A口:FDF8H,B口:FDF9H,C口:FDFAH 命令/状态口:FDFBH

定时器TIMEL:FDFCH TIMEH:FDFDH 存储器RAM:FC00H~FCFFH

39

第10章 单片机接口技术

补充题1

设4位ADC;当数字量为1000B时,Vo=5v时满档10V的。求被测电压Vi=8.2V的逐次逼近波形图。 补充题1(答案)

电压 8.75V Vi=8.2V 10V 7.5V 5V 2.5V 0V 8.125V Vo D3 D2 D1 D0 时间 10.1 设计8XX51和DAC0832接口,要求地址为F7FFH,满量程电压为5V,采用单缓冲工作方式。画出电路图,编程使输出如下要求的模拟电压:

(1) 幅度为3V,周期不限的三角波电压。 (2) 幅度为4V,周期2ms的方波。

(3) 周期为5ms的阶梯波,阶梯的电压幅度分别为0V,1V,2V,3V,4V,5V,每一阶梯为1ms。

10.1 电路参照图10-3,不同的是将P2.7改为P2.3先计算各模拟量对应的数字量。3V对应的数字量为

5V/3V一255/X, X=153=99H

同样可算得1V,2V,4V对应的数字量分别为33H,66H,CCH ①三角波

MOV DPTR,#OF7FFH NEXTl:MOV A,#O

NEXT:MOVX @DPTR,A NOP NOP INC A

CJNE A,#9AH,NEXT NEXTA:DEC A MOVX @DPTR,A NOP NOP

CJNE A,#0,NEXTA SJMP NEXT1 END

40

本文来源:https://www.bwwdw.com/article/ga3t.html

Top