当前位置:首页 >> 信息与通信 >>

单片机原理 接口及应用—嵌入式系统技术基础 习题解答


单片机原理、接口及应用——嵌入式系统技术基础 单片机原理、接口及应用——嵌入式系统技术基础 —— 习题解答
计算机的基础知识 0.1 40H,62H,50H,64H,7DH ,FFH 0.2 812 ,104, 213, 256, 2936, 941 0.3 十进制数 原码 补码 十进制数 原码 补码 28 1CH 1CH 250 FAH FAH -28 9CH E4H

-347 815BH FEA5H 100 64H 64H 928 03A0H 03A0H -130 8082 FF7EH -928 83A0H FC60H H 0.4 机器数真值分别为: 27,233,-128,-8,14717,31467,-27824,-12478 0.5 (1) 33H+5AH=8DH, OV=1, CY=0。 (2) -29H-5DH=7AH, OV=0, CY=1。 (3) 65H-3EH=27H, OV=0, CY=1。 (4) 4CH-68H=E4H, OV=0, CY=0。 0.6 十进制数 压缩 BCD 数 非 压 缩 BCD ASCII 码 数 38 38H 0308H 3338H 255 255H 020505H 323535H 483 483H 040803H 343833H 764 764H 070604H 373634H 1000 1000H 01000000H 31303030 H 1025 1025H 01000205H 31303235 H 0.7 ASCII 码表示的十六进制数分别为: 105H, 7CAH, 2000H,8A50H

基础篇 第 1 章、MCS-51 单片机结构
单片微型计算机(即单片机)是包含 CPU、存储器和 I/O 接口的大规模集成芯片, 即它本身包含了除外部设备以外构成微机系统的各个部分,只需接外设即可构成 独立的微机应用系统。微机处理器仅为 CPU,CPU 是构不成独立的微机系统的。 1.2 参见教材 1.1.1 节 1.3 参见教材第 6 页表格 1.4 参见教材表 1.4 1.1

1

1.5 1.6

参见教材表 1.1 和表 1.2 当 PSW=10H 表明选中的为第二组通用寄器 R0~R7 的地址为 10H~17H 1.7 程序存储器和数据存储器尽管地址相同,但在数据操作时,所使用的指令不 同,选通信号也不同,因此不会发生错误。 1.8 内部数据 程序 外部数据 程序 1.9 振荡周期=0.1667μs 机器周期=2μs 指令周期=2~8μs 1.10 A=0,PSW=0,SP=07,P0~P3=FFH

第 2 章、51 系列单片机的指令系统
2.1 2.2 2.3 2.4 参见教材 2.1 节 因为 A 累加器自带零标志,因此若判断某内部 RAM 单元的内容是否为零,必须 将其内容送到 A,JZ 指令即可进行判断。 当 A=0 时,两条指令的地址虽然相同,但操作码不同,MOVC 是寻址程序存储 器,MOVX 是寻址外部数据存储器,送入 A 的是两个不同存储空间的内容。 目的操作数 源操作数 寄存器 直接 SP 间接寻址 直接 直接 直接 直接 立即 寄存器间址 直接 寄存器 变址 寄存器间址 寄存器 Cy=1, OV=0, A=94H √ × √ × × × √ √ × √ × × × × × √ × × × × × × A=25H (50H)=0 (51H)=25H (52H)=70H SP=(61H) (SP)=(24H) SP=(62H) (SP)=(10H) SP=(61H) DPL =(10H) SP=(60H) DPH=(24H) 执行结果将 0 送外部数据存储器的 2410 单元 程序运行后内部 RAM(20H)=B4H,A=90H

2.5 2.6

2.7 2.8

2.9

2

机器码 7401 F590 23 B40AFA 80F6 2.11 ANL A,#0FH SWAP A ANL P1,#0FH ORL P1,A SJMP $ 2.12 MOV A,R0 XCH A,R1 MOV R0,A SJMP $ 2.13 (1)利用乘法指令 MOV B,#04H MUL AB SJMP $ (2) 利用位移指令 RL A RL A MOV 20H,A ANL A,#03H (3)用加法指令完成 ADD A,ACC MOV R0,A ;R0=2A MOV A,#0 ADDC A,#0 MOV B,A ;B 存 2A 的进位 MOV A,R0 ADD A,ACC 2.14 XRL 40H,#3CH SJMP $ 2.15 MOV A,20H ADD A,21H DA A MOV 22H,A ;存和低字节 MOV A,#0 ADDC A,#0 MOV 23H,A ;存进位 SJMP $ 2.16 MOV A,R0 JZ ZE MOV R1,#0FFH SJMP $

2.10

源程序 LA: MOV A,#01H LB: MOV P1,A RL A CJNE,#10,LB SJMP LA

MOV MOV ANL SJMP MOV MOV ADDC MOV MOV SJMP

B,A A,20H A,#0FCH $ ;R1=4A ;进位×2 ;存积高位 ;存积低位

R1,A A,B A,B B,A A,R1 $

3

ZE: MOV R1,#0 SJMP $ 2.17 MOV A,50H MOV B,51H MUL AB MOV 53H,B MOV 52H,A SJMP $ 2.18 MOV R7,#0AH WOP: XRL P1,#03H DJNZ R7,WOP SJMP $ 2.19 单片机的移位指令只对 A,且只有循环移位指令,为了使本单元的最高位移 进下一单元的最低位,必须用大循环移位指令移位 4 次。 ORG 0 MOV A,22H CLR C RLC A MOV A,20H MOV 22H,A RLC A MOV A,#0 MOV 20H,A RLC A MOV A,21H MOV 23H,A RLC A SJMP $ MOV 21H,A

第 3 章、MSC-51 单片机汇编语言程序设计
3.1 因为是多个单元操作,为方便修改地址使用间址操作。片外地址用 DPTR 指示, 只能用 MOVX 指令取数到 A,片内地址用 R0 或 R1 指示,只能用 MOV 指令操作, 因此循环操作外部数据存贮器→A→ 内部部数据存贮器。 ORG 0000H INC DPTR MOV DPTR,#1000H INC R0 CJNE R0,#71H,LOOP MOV R0,#20H LOOP: MOVX A,@DPTR SJMP $ MOV @R0,A 要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进

3.2 位。

ORG 0 MOV 51H,A MOV A,R0 MOV A,#0 ADD A,R6 ADDC A,ACC MOV 50H,A MOV 52H,A MOV A,R7 SJMP $ ADDC A,R1 3.3 A 中放小于 14H(20)的数,平方表的一个数据占 2 个字节,可用 BCD 码或二进制 数存放.(如 A 中放的是 BCD 码,则要先化成二进制数再查表。) ORG 0 MOV DPTR,#TAB

4

ADD MOVC A,@A+DPTR ;A*2 MOV R6,A PUSH ACC SJMP $ MOVC A,@A+DPTR TAB: DB 00,00,00,01,00,04, MOV R7,A 00,09,00,16H,…… POP ACC DB ……… 04H,00 INC A 3.4 先用异或指令判两数是否同号,在同号中判大小,异号中正数为大. ORG 0 BG: MOV 22H,21H MOV A,20H SJMP $ CMP: MOV A,20H XRL A,21H ANL A,#80H CJNE A,21H,GR GR: JNC AG JZ CMP JB 20H.7,BG MOV 22H,21H AG: MOV 22H,20H SJMP $ SJMP $ 3.5 fosc=6MHZ 机器周期数 DELAY: MOV R1,#0F8H 1 LOOP: MOV R3,#0FAH 1 DJNZ R3,$ 2 DJNZ R1,LOOP 2 RET 2 (1+(1+2*0xFA+2)*0xF8+2)*12/6MHz = (1+(1+2*250+2)*248+2)*2us = 249.494ms 3.6 将待转换的数分离出高半字节并移到低 4 位 加 30H;再将待转换的数分离出低 半字节并 30H,安排好源地址和转换后数的地址指针,置好循环次数。 ORG 0000H MOV A,@R0 MOV R7,#05H ANL A, #0FH MOV R0,#20H ADD A,#30H MOV R1,#25H MOV @R1,A NET: MOV A,@R0 INC R0 ANL A,#0F0H INC R1 SWAP A DJNZ R7,NE ADD A,#30H SJMP $ MOV @R1,A END INC R1 3.7 片内 RAM 间址寄存器只能有 R0 和 R1 两个,而正数、负数和零共需 3 个寄存器 指示地址,这时可用堆栈指针指示第三个地址,POP 和 PUSH 在指令可自动修改地址。 R0 指正数存放地址和 R1 指负数存放地址 ,SP 指源数据存放的末地址,POP 指令取 源数据,每取一个数地址减 1。 ORG 0000H MOV R7,#10H MOV A,#0 MOV @R0,A A,ACC

5

MOV R4,A INC R0 MOV R5,A AJMP DJ MOV R6,A NE: INC R5 MOV R0,#40H MOV @R1,A MOV R1,#50H INC R1 MOV SP,#3FH AJMP DJ NEXT: POP ACC ZER0: INC R6 JZ ZER0 DJ: DJNZ R7,NEXT JB ACC.7,NE SJMP $ INC R4 END 3.8 可直接用 P 标志判断(JB P ,ret) ORG 0000H MOV A,40H JB P,EN ;奇数个 1 转移 ORL A,#80H ;偶数个 1 最高位加“1” EN: SJMP $ 3.9 取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、 负数均有相对于模的补数。 用取反加 1 求补也可用模(00H)减该数的方法求补。 ORG 0000H MOV R7,#03H AB: INC R0 MOV R0,#DAT A MOV A,@R0 MOV A,@R0 CPL A CPL A ADDC A,#0 ADD A,#01 DJNZ R7,AB MOV @R0,A SJMP $ 3.10 16 个单字节累加应用 ADD 指令而不能用 ADDC 指令,和的低位存 A,当和超过 一个字节,和的高字节存于 B,并要加进低位相加时产生的进位,16 个单字节加完 后,采用右移 4 次进行除十六求平均值的运算,商在 BUF2 单元,余数在 BUF2-1 单元。 ORG 0000H MOV R6,#04H MOV R7,#0FH MOV BUF2,A MOV R0,#BUF1 MOV BUF2-1,#0 MOV B,#0 NEX: CLR C MOV A,@R0 MOV A,B MOV R2,A RRC A NEXT: MOV A,R2 MOV B,A INC R0 MOV A,BUF2 ADD A,@R0 RRC A MOV R2,A MOV BUF2,A MOV A,B MOV A,BUF2-1 ADDC A,#0 RRC A MOV B,A MOV BUF2-1,A DJNZ R7,NEXT DJNZ R6,NEX SJMP $ ;以上完成求和 ;以上完成除十六运算

6

3.11 将 20H 单元的内容分解为高 4 位和低 4 位,根据是否大于 9 分别作加 37H 和 30H 处理。 ORG 0000H MOV 21H,A SJMP $ MOV A,20H ANL A,#0F0H ASCII: CJNE A,#0AH,NE SWAP A NE: JC A30 ACALL ASCII ADD A,#37H MOV 22H,A RET MOV A,20H A30: ADD A,30H RET ANL A,#0FH ACALL ASCII 3.12 要注意,位的逻辑运算其中一个操作数必须在 C。 ORG 0000H CPL C MOV C,20H ANL C,53H ANL C,2FH MOV P1.0,C CPL C SJMP $ ORL C,/2FH END 3.13 ORG 0000H MOV C,ACC.3 ANL C,P1.4 ANL C,/ACC.5 MOV 20H,C MOV C,B.4 CPL C ANL C,/P1.5 ORL C,20H MOV P1.2,C SJMP $ END 3.14 设一字节乘数存放在 R1,三字节的被乘数存放在 data 开始的内部 RAM 单元,且 低字节存放在低位地址单元,R0 作为被乘数和积的地址指针,用 MUL 指令完成一字 节乘一字节,每一次部分积的低位加上一次部分积的高位,其和的进位加在本次部分 积的高位上,并暂存,三字节乘一字节共需这样三次乘、 加、 存操作,以 R7 作循环三次 的计数寄存器。 ORG 0000H MOV R7,#03H MOV A,#0 MOV R0,#data ADDC A,B MOV R2,#0 MOV R2,A NEXT: MOV A,@R0 INC R0 MOV B,R1 DJNZ R7,NEXT MUL AB MOV @R0,B ADD A,R2 SJMP $ MOV @R0,A END

7

第4章、并行接口P0-P3和单片机的中断系统 并行接口P0-P3和单片机的中断系统 P0
4.1~4.3 参考教材 4.1 节 4.4 用 P1.7 监测按键开关,P1.0 引脚输出正脉冲,正脉冲的产生只需要将 P1.0 置零、 置 1、延时、再置零即可。P1.0 接一示波器可观察波形。如果再接一发光二极管, 可观察到发光二极管的闪烁。电路设计可参考图 4.4

8

汇编语言程序 ORG 0000H ABC: CLR P1.0 SETB P1.7 JB P1.7,$ ;未按键等待 JNB P1.7,$ ;键未弹起等 待 SETB P1.0 MOV R2,#0 DAY: NOP NOP DJNZ R2,DAY 图 4.4 SJMP ABC 电路见图 4.5, 初始值送 0FH 到 P1, 再和 0FFH 异或从 P1 口输出,或使用 4.5 SWAP A 指令,然后从 P1 口输出,循环运行, 要注意输出后要延时。 汇编语言程序 ORG 0000H MOV A,#0FH ABC: MOV P1,A ACALL D05 SWAP A SJMP ABC D05: MOV R6,250 DY: MOV R7,250 DAY: NOP 图 4.5 NOP DJNZ R7,DAY DJNZ R6,DY RET END 4.6 如使用共阴极数码管,阴极接地,阳极 a~g 分别接 P0~P3 的某个口的 7 位,将 0~F 的段码列成表,表的内容顺次从该口输出。如数码管接 P3 口。 汇编语言程序 ORG 0000H NOP DJNZ R7,DAY MOV DPTR,#TAB INC R0 AGAIN: MOV R0,#0 CJNE R0,#10H,NEXT NEXT: MOV A,R0 SJMP AGAIN MOVC A,@A+DPTR MOV P3,A TAB: DB 3FH,06H… ;段码 MOV R7,#0 表(略) DAY: NOP END 4.7 电路设计见图 4.7,编程如下:
9

ORG 0000H MOV A,#08H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,A MOV R2,#08H AGAIN: MOV A,#01 NEXT: MOV P3,A ACALL DAY RL A CJNE A,#10H,NEXT DJNZ R2,AGAIN SJMP $ TAB: DB 3FH,06H··· END 4.8 P1 口的八根线接行线,输出行扫描信 号, P3 口的八根线接列线,输入回馈信 号 。 见图 4.8。 4.9~4.12 参见 4.2 节 4.13 电路设计见图 4.13 汇编语言程序 ORG 0000H AJMP MAIN ORG 0003H RL A ;中断服务 MOV P1,A RETI MAIN: MOV A,#0FEH MOV P1,A ;第一灯亮 SETB EA SETB EX0 SETB IT0 SJMP $ 汇编语言中只有一个中断源,不存在占用别 的中断源向量地址问题,程序顺序排下,应 注意程序的执行过程。C 语言无循环移位指 令移位后,后面补零,因此和 01 相或。 4.14 略

图 4.7

图 4.8

10

图 4.13 MAIN: SETB EA ORG 0000H SETB EX0 AJMP MAIN SETB IT0 ORG 0003H ;中断服务 XRL P1,#0FFH MOV P1,#0FFH DJNZ R0,NE MOV R0,#0AH CLR EA SJMP $ ;等待中断 NE: RETI ORG 0030H 因一亮一灭为一次,所以共十次。 4.16 两个数码管阳极经驱动器接 P1 口,阴极分别接 P3.0、P3.1。 CLR P3.0 aa EQU 08H ;存储高四位的段 SETB P3.1 码 MOV P1,aa ;显示高 bb EQU 09H ;存储第四位 的段码 位 i EQU 0AH ;存储计数值 ACALL Delay ;延时 SJMP LOOP Tab: DB 3FH,06H…… ;段码 INTR: CLR EX0 表略 ORG 0000H INC i ;i 加一 AJMP MAIN MOV A,i ORG 0013H ANL A,#0FH ;取 i 的低 AJMP INTR 位 MAIN: MOV DPTR,#Tab MOV DPTR,#Tab CLR A MOVC A,@A+DPTR MOVC A,@A+DPTR MOV bb,A ;查表 b=Tab[i MOV aa,A 的低位] MOV bb,A MOV A,i ;a=b=Tab[0] ANL A,#0F0H CLR P3.0 SWAP A ;取 i 的高位 CLR P3.1 MOVC A,@A+DPTR SETB EA MOV aa,A ;查表 a=Tab[i 的高 SETB EX0 位] SETB EX0 SETB IT0 ;开中断 LOOP: SETB P3.0 RETI CLR P3.1 Delay: ;略 END MOV P1,bb ;显示低 位 ACALL Delay ;延时 4.17 提示:将 X1 至 X3 分别接至一个三输入或非门的三个输入端,同时还分别 接至单片机的三个 IO 口,或非门的输出端接至单片机的外部中断引脚。中断服 务程序中检查三个 IO 口的值,便可知道具体的故障源。程序略。

4.15

第五章 单片机的定时 计数器与串行接口 第五章、单片机的定时/计数器与串行接口
11

5.1~5.3 请参考教材 5.4 方式 0: 16.38ms 方式 1: 131ms 方式 2: 512?s 5.5 使用方式 2 计数初值 C=100H-0AH=F6H 查询方式: ORG 0000H ABC: JNB TF0,$ MOV TMOD,#06H CLR TF0 MOV TH0,#0F6H CPL P1.0 MOV TL0,#0F6H SJMP ABC SETB TR0 中断方式: ORG 0000H MOV TH0, #0F6H AJMP MAIN SETB EA ORG 0000BH SETB ET0 CPL P1.0 SETB TR0 RETI SJMP $ ; 等待中断 MAIN: MOV TMOD,#06H 5.6 1000HZ 的周期为 1ms,即要求每 500?sP1.0 变反一次,使用方式 T1 方式 1,MC=12 / fosc=1?s, C=216-500?s /1?s =FE0CH, 除 TMOD=10H,TH0=FEH,TL0=0CH 外, 程序与 5.5 题相同,注意每次要重置 TH0 和 TL0 5.7 f=6MHz MC=2?s 方式 2 的最大定时为 512?s 合乎题目的要求。50?s 时, 计数初值为 C1=256-25=E7H,350?s 时计数初值为 C2=256-175=51H 汇编语言程序 SJMP AB1 ORG 0000H MOV TMOD,#02H EXT: SETB P1.2 NEXT: MOV TH0,#51H MOV TH0,#0E7H MOV TL0,#51H MOV TL0,#0E7H CLR P1.2 AB2: JBC TF0,NEXT SETB TR0 SJMP AB2 AB1: JBC TF0,EXT 上述的计数初值没有考虑指令的执行时间,因此误差较大,查每条指令的机器 周期,扣除这些时间,算得 C=E3H,这样误差较小。 5.8 P1.0 输出 2ms 脉冲,P1.0 输出 50?s 脉冲。 汇编语言程序 ORG 0000H NE: JNB TF0,$ MOV TMOD,#02H CLR TF0 MOV TH0,#06H CPL P1.1 MOV TL0,#06H DJNZ R0,NE SETB TR0 CPL P1.0 MOV R0,#04H AJMP NE 5.9 ORG 0000H LOOP: LCALL Counter MAIN: MOV TMOD,#15H LCALL Timer
12

SJMP LOOP Timer: MOV TH1,#0F9H Counter:MOV TH0,#0FDH MOV TL1,#30H SETB TR1 MOV TL0,#18H SETB TR0 CLR TR0 CLR TR1 JB TF1,$ JNB TF0,$ CLR TF1 CLR TF0 RET RET END 5.10 略 5.11 参见教材 5.3.1 节 5.12 方式 3 为每桢 11 位数据格式 3600*11/60=660(波特) 5.13 T1 的方式 2 模式不需要重装时间常数(计数初值),不影响 CPU 执行通信程 序. 设波特率为 fbaut 计数初值为 x, 依 据 公 式 fbaut=2somd/32*(fosc/12(256-x)) 求 得 SMO x=256-((2 D/32)*(fosc/fbaut)) 5.14 最低波特率为 T1 定时最大值时,此时计数初值为 256,并且 SOMD=0, fbaut=(1/32)*( fosc/(12(256-0))=61 最高波特率为 T1 定时最小值(1)且 SOMD=1 时 fbaut=(2/32)* fosc/(12(256-1))=31250 5.15 取 SMOD=1 计算 TH1=TL1=B2 发送 ORG 0000H NEXT: MOV SBUF,A MOV TMOD,#20H TES: JBC T1,ADD1 MOV TH1,#0B2H SJMP TES MOV TL1,#0B2H ADD1: INC A SETB TR1 CJNE A,#20H,NEXT MOV SCON,#40H SJMP $ MOV A,#0 END 接收 ORG 0000H TEC: JBC RI,REC MOV TMOD,#20H SJMP TEC MOV TH1,#0B2H REC: MOV @R0,SBUF MOV TL1,#0B2H INC R0 SETB TR1 CJNE R0,#40H,TEC MOV SCON,#50H SJMP $ MOV R0,#20H END 5.16 略 5.17 利用串行通信方式 2(波特率固定),采用奇校验方式,将校验位放在 TB8 中,乙 机检验校验位,如正确,则存于片外 4400H 开始的 RAM 中,如错误,通知对方重 发,R6 存放数据块长度汇编语言程序如下: 发方 MOV DPTR,#3400H ORG 0000H
13

MOV R6,#0A1H AJMP L5 MOV SCON,#90H L6: JBC RI,L7 AJMP L6 MOV SBUF,R6 L2: JBC T1,L3 L7: MOV A,SBUF AJMP 1.2 CJNE A,#0FF0H,L8 L3: MOV 1,@DPTR AJMP L3 L8: INC DPL JB P,L4 SETB TB8 DJNZ R6,L4 L4: MOV SBUF ,A SJMP $ L5: JBC T1,L6 收方 ORG 0000H L5: JB JB8,L8 MOV DPTR,#4400H L6: MOVX @DPTR,A MOV SCON,#90H INC DPL INC DPH L1: JBC RI,L2 AJMP L1 DJNZ R6,L3 L2: MOV A,SBUF SJMP $ MOV R6,A L8: MOV A,#0FFH MOV SBUF,A L3: JBC RI,L4 AJMP L3 L9: JBC TI,L3 L4: MOV A,SBUF AJMP L9 JB P, L5 SJMP $ JNB RB8,L8 END SJMP $ 5.18 电路图见教材中图 5.18,程序如下: ORG 0000H CJNE R7,#04H,DEF ;循环 MOV R5,#03H 4次 CLR A CLR P3.3 MOV SCON,A LCALL timer LOOP: SETB P3.3 SJMP LOOP CLR A timer: MOV A,#64H MOV R7,A FOR: JZ ENDD MOV TMOD,#01H DEF: MOV A,R5 ;循环 4 次 MOV DPTR,#tab MOV TH0,#0D9H MOV TL0,#0F0H MOVC A,@A+DPTR; 查 表 A=tab[R5] SETB TR0 MOV SBUF,A JNB TF0,$ DEC R5 CLR TF0 DEC A JNB T1,$ CLR T1 SJMP FOR ENDD: RET CJNE R5,#0FFH,ABC; 若 R5==255,则 R5=7 tab: DB 0c0H,0f9H,0a4H……;略 MOV R5,#07H EN ABC: INC R7
14

第 6 章、单片机总线与存储器的扩展
6.1 参见 6.1 节

6.2 6116 为 2KB×8 位 RAM,共 11 根地址线 A0~A10,接线见图 6.2。

图 6.2

6.3 2732 为 4KB×8 位 EPROM,6264 为 8KB×8 位 RAM,因各只有一片,所以各 片选 CE 接地,电路见图 6.3。

图 6.3

6.4

6116 为 2KB×8 位 RAM、2716 为 2KB×8 位 EPROM,地址线均为 11 位,地 址线接线参见图 6.3。 6.5 电路见图 6.5。

15

图 6.5

4 片 2764 的 CE 分别接 138 译码器为 y0、y1、y2、y3 端,各片地址为: 2764(4) 0000H~1FFFH 2764(3) 2000H~3FFFH 2764(2) 4000H~5FFFH 2764(1) 6000H~7FFFH 6.6 设计电路见图 6.6。

图 6.6

第 7 章、单片机系统功能扩展
7.1 将图 6.6 中的 2764 去掉,并改“P2.5”为“P2.4” ,改“P2.6”为“P2.7” ; 程序可参考教材中例 7.1。 将 7.2 请参考上题和题 4.16。 244 的输 入端最低位经过一个上拉电阻接 至+5V,经过一个按钮接到地。 7.3 电路图见图 7.3 MOV DPTR,#0CFFBH MOV A, #0A2H MOVX @DPTR, A

7.4 电路与上题类似, 程序较简单, 略。 7.5 8255A 口、B 口、C 口、控制口 地址分别为 7CFFH、7DFFH 、 7EFFH、7FFFH,A 口方式 0 输出,C 口输出,控制字 80H。电路见图 7.5

16

图 7.5 程序: ORG 0000H MOV DPTR,#7FFH ;指向控制口 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 ; 置字形表头地址 MOVC A, @A+DPTR ; 查字形码表 MOV DPTR,#7CFFH ;指向 B 口 MOVX @DPTR, A ; 从 B 口输出字形码 ACALL DAY ;延时 INC R0 ; 指向下一位字形 MOV A,R1 RL A ;指向下一位 MOV R1,A CJNE R1,#10H,NEXT ;六个数码管显示完? SJMP AGAIN DAY: MOV R6,#50 ;延时子程序 DL2: MOV R7, #7DH DL1: NOP NOP DJNZ R7,DL1 DJNZ R6,DL2 RET TAB1: DB 6FH,3FH,3FH ,5EH ;“g00d”(9ood)的字形码
17

7.6 提示:EPROM27128O 16KB×8,地址线为 14 根,6264 为 8KB×8 位,地址线为 13 根,电路可参考教材中图 7.3。 7.7 根据电路连线 I/O 口:A 口:FDF8H,B 口:FDF9H,C 口:FDFAH, 命令/状态口:FDFBH. 定时器 TIMEL:FDFCH TIMEH:FDFDH 存贮器 RAM :FC00H~FCFFH

第 8 章、单片机典型外围接口技术
8.1 电路参照教材中图 8.7,不同的是将 P2。7 改为 P2。3,先计算各模拟量对应的数字量: 3C 对应的数字量:5V/3V=255/X C=153=99H 同样可算得 1V、2V、4V 对应的数字量分别为 33H、66H、CCH ① 三角波 MOV DPTR,#OF7FFH NEXT1: MOV A,#0 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 ② 方波 4V 对应的数字量为 CCH MOV DPTR, #0F7FFH MOV A,#0 NEXT: MOVX @DPTR,A ACALL D2MS XRL A,#0CCH SJMP NEXT ③ 阶梯波 MOV DPTR, #0F7FFH NEC: MOV A,#0 NEXT: MOVX @DPTR,A ACALL D1MS ADD A,#33H CJNE A,#0FFH, NEXTA NEXTA:MOVX @DPTR,A

18

ACALL D5MS SJMP NEC 8.2 电路参考教材中图 8.8,增加一个地址,使用两条输出指令才能输出一个数据,其他 同上。 8.3 电路参考教材中图 8.7,地址为 7FFFH。 ORG 0000H MOV DPTR,#7FFFH MOV R0,#20H MOV A, @R0 NEXT: MOV X @DPTR,A ACALL D1MS INC R0 CJNE R0,#30H,NEXT SJMP $ END 8.4 电路参阅教材中图 8.11,不同的是将 P2。 ~P2。 改为 P2。 ~P2。 ,各地址分别为 FEFFH、 5 7 0 2 FDFFH、 FBFFH。 程序参照教材 8.1.2.3 节,注意修改 RAM 地址,循环执行该程序。 8.5 电路参阅教材中图 8.2,不同的是 延时方式:EOC 悬空;查询方式:EOC 经非门接单 片机 P1.0 端口线;中断方式同原图。 下面仅编查询程序。IN2 的地址为 7FFAH,由于 EOC 经非门接单片机 P1.0 端口 线, 查询到 P1.0 为零,即转换结束。 ORG 0000H MOV R7,#0AH MOV R0,#50H MOV DPTR,#7FFAH NEXT: MOVX @DPTR,A ;启动转换 JB P1.0,$ ;查询等待 MOVX A,@DPTR ;读入数据 MOV @R0,A INC R0 DJNZ NEXT SJMP $ 8.6 ADC0809 采集入中模拟信号,顺序采集一次,将采集结果存放于数组 ad 中。 ADC0809 模拟通道 0~7 的地址为 7FF8H~7FFFH,ADC0809 的转换结束端 EOC 经逻辑非后接至外部中断 1,电路参考教材中图 8.2。程序参考教材第 167 页的例 子,只需修改数据存储区地址。 8.7 电路参考教材中图 8.26, 增加键盘的行线和数码管个数至 8 个, 减少键盘列线到 2 根,程序略。

第 9 章、串行接口技术
9.1-9.3 请参考教材

19

9.4 电路参照教材中图 9.12,另外一片 24C04 的 A1 接到 VCC 其它引脚与第一片完 全一样。 9.5 略 9.6 可以,在操作 IIC 总线时,将 SPI 总线上的所有器件的从机选择线置高,这样 便不会对 SPI 总线有影响;在操作 SPI 总线时,让 IIC 总线的 SDA 保持高电平, 这样 IIC 总线得不到起始信号,便不会对 IIC 总线有影响。 9.7 TLC5615 经 SPI 总线接至单片机(参照教材中图 9.26) ,REFIN 作为衰减器的输 CODE 入 , OUT 作 为 衰 减 器 的 输 出 。 根 据 Vo = 2 × V REFIN × ,其增益为: 210 CODE CODE 2× = 。 210 29 9.8 提示:用较快的速度对被测电压进行采样(采样时间间隔恒定为 t) ,将一定时 间段(T)内的获得的采样值(v)的平方对时间积分(实为求和)后除以该时 间段的长度,最后开平方,便是被测电压在该时间段内近似的有效值。
k

V有效值 =

∑v
i =1

2 i

,其中 k=T/t。

k

应用篇 语言编程—— ——C51 第 10 章、单片机的 C 语言编程——C51
10.1 第 6 行,缺少“;” ;第 8 行“;”多余;main 函数最后缺少“}” 。 10.2 xdata 的地址范围为 0x0000 到 0xFFFF(共 64K) ,它需要两个字节记录 。 ( log 2 65536 = 16 ) 10.3 char bdata a; float xdata b; int xdata * c(注意不要定义为“xdata int * c”或“int * xdata c”, 这样 c 为自身在 xdata 区,指向默认区域的 int 型数据的 指针,与题意不符); 10.4 main() { int xdata c; c=DBYTE[0x20]*DBYTE[0x35]; } 10.5 #include <reg51.h> #include <absacc.h> sbit P1_0=P1^0; sbit P1_2=P1^2; sbit P1_3=P1^3; unsigned char * pData=&DBYTE[0x30];

20

TLC() { unsigned char k,i; unsigned char d=0; for(k=10;k>0;k--) { P1_3=0; for(i=8;i>0;i--) { d<<=1; d|=P1_2; P1_0=1; P1_0=0; } *pData=d; pData++; } } main() { P1=0x04; P1_0=0; P1_3=1; TLC(); while(1); } 10.6 略 10.7 略 10.8 #include<absacc.h> main() {char i; for(i=0x10;i<0x16;i++) DBYTE[i]=XBYTE[i]; } 10.9 #include<absacc.h> main() { unsigned int * x,* y,* z; x=(unsigned int *)0x20; y=(unsigned int *)0x22; z=(unsigned int *)0x24; if(*x>*y) *z=*x; else *z=*y;

21

while(1); } 10.10 #include <absacc.h> main() { unsigned char *pBCD=(unsigned char *)0x21; unsigned long *pBinary=(unsigned long *)0x30; unsigned char *pLen=(unsigned char *)0x20; *pBinary=0; while(*pLen) { (*pLen)--; *pBinary*=10; *pBinary+=*(pBCD+*pLen); } //程序认为 BCD 码是低位放在低地址的 } 10.11 #include <absacc.h> main() {unsigned int *pBinary=(unsigned int *)0x30; unsigned char *pBCD=(unsigned char *)0x21; unsigned char *pLen=(unsigned char *)0x20; *pLen=0; while(*pBinary) {*pBCD=*pBinary%10; (*pLen)++; pBCD++; *pBinary/=10; } //程序将 BCD 码的低位放在低地址 }

第 11 章、RTX51 实时操作系统



第 12 章、以 MCU 为核心的嵌入式系统的设计与调试
12.1 参见教材第 12.2 节 12.2 提示,.利用定时/计数器定时 100ms,中断 10 次达 1 秒, 60 秒, 满 分加 1 秒清 0; 满 60 分,小时加 1 分清 0,同时分,秒均有十位数和个位数,按十进制进位,并送显 示,显示可采用 6 个数码管(或八个数码管),校对可用按键中断方式或按键的查询进 行加 1 校对,用并行口接驱动器(非门或三极管)驱动扬声器进行闹钟,如果采用 89C51/S51 做,由于片内己有程序存储器,四个口用户均可使用. 12.3 提示,两个定时器同时使用,一个定时器产生节拍,另一个定时器产生音符。 12.4-12.5 略

22

第 13 章、单片机实验指导



23


相关文章:
单片机原理
单片机原理接口及应用——嵌入式系统技术基础 习题解答 预备篇 计算机的基础知识 0.1 40H,62H,50H,64H,7DH ,FFH 0.2 812 ,104, 213, 256, 2936, 941...
单片机原理及接口技术课后答案
单片机原理及接口技术课后答案_工学_高等教育_教育专区。答案和给力的啊!!! 第...它从体系结构到指令系统都是按照嵌入式应用特点专门设计的, 能最 好的满足面对...
单片机原理教学大纲
(七)主要参考书目: 《单片机原理接口及应用——嵌入式系统技术基础》 ,李春...单片机概念及系统组成 1.2 主流单片机介绍 重点: 单片机概念及系统组成 习题: ...
单片机原理及接口技术课后习题答案_李朝青
单片机原理及接口技术课后习题答案_李朝青_IT认证_资格考试/认证_教育专区。单片机...它从体系结构到指令系统都是按照嵌入式 应用特点专门设计的,能最好的满足面对...
单片机原理与接口技术习题答案
单片机原理接口技术习题答案_工学_高等教育_教育专区。单片机原理接口技术习题...答:单片机嵌入式系统是嵌入到对象体系中的专用计算机系统;其特 点是面向特定应用...
单片机原理及应用第二版课后习题答案
单片机原理及应用第二版课后习题答案_工学_高等教育...1.10 广义上讲,凡是系统中嵌入了“嵌入式处理器” ...RS-232C、RS-422A 和 RS-485 标准串行接口。主要...
单片机原理及接口技术课后答案第三版
单片机原理及接口技术课后答案第三版_工学_高等教育_教育专区。单片机原理及接口...它从体系结构到指令系统都是按照嵌入式应用特点专门 设计的,能最好的满足面对...
单片机课程设计模板经典版2015
单片机原理及应用课程设计报告书题 姓学专目:学生信息显示与查询系统设计 名:梁...单片机原理.接口及应用—嵌入式系统技术基础 (第二版). 清华大学出版社 [3] ...
单片机原理及嵌入式系统设计 第一次作业习题
10、什么是嵌入式系统 答:嵌入式系统是嵌入到应用对象体系中的专用计算机系统。 11、单片机主要有哪些技术指标? 答:字长、内存容量、运算速度、内存存取周期 12、...
ARM嵌入式系统结构与编程习题答案(全)
ARM嵌入式系统结构与编程习题答案(全)_计算机软件及...以应用为中心,以计算机技术基础,软硬件 可裁剪,...答: 20 世纪 70 年代单片机的出现到目前各式各样...
更多相关标签: