单片机第七章答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

P0 EA PSEN
8
8
地址空间如下: 第一片: 0000 0000 0000 0000~0001 1111 1111 1111;即 0000H~1FFFH; 第二片: 0010 0000 0000 0000~0011 1111 1111 1111;即 2000H~3FFFH; 第三片: 0100 0000 0000 0000~0101 1111 1111 1111;即 3000H~5FFFH;
15. 试用一片 74LS373 扩展一个并行输入口,画出硬件连接图,指出相应的控制命 令。 答:硬件电路图如下:74LS373 的输入端为扩展的输入口,输出端接 8051 的数据总路线 P0 口,控制端接高电平,输出允许由片外数据存储器读信号 RD 和 P2.0 控制。当片外数据存 储器读信号 RD 和 P2.0 同为低平时从 74LS373 中读入输入的数据。
17. 用汇编语言编写出定时扫描方式下矩阵键盘的处理程序。
该程序放于定时器的中断服务程序中。定时器每 10ms 中断一次,执行一次中断服务程序。F1 和 F2 标志位用片内 RAM 的 50H 和 51H 单元。 ACALL KS1 JNZ LK1 MOV 50H,#0 ;无键按下,F1 的 F0 标志清 0 结束 MOV 51H,#0 SJMP OUT LK1: CJNE 50H,#1,OUT1 ;有键按下检查 F1 标志是否为 1,不为 1 置 1 结束。 CJNE 51H,#01,OUT ;再检查 F2 标志是否为 1,为 1 说明已处理按键则结束。 LK2: MOV R2,#0FEH ;扫描查询键码 MOV R4,#00H LK4: MOV DPTR,#7F00H MOV A,R2 MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR JB ACC.0,LONE MOV A,#00H AJMP LKP LONE: JB ACC.1,LTWO MOV A,#08H AJMP LKP LTWO:JB ACC.2,LTHR MOV A,#10H AJMP LKP LTHR: JB ACC.3,NEXT MOV A,#18H LKP: ADD A,R4 ;求键码放累加大器 A, MOV 51H,#1 ;F2 标志置 1,结束 SJMP OUT NEXT: INC R4 MOV A,R2 JNB ACC.7,KEND RL A MOV R2,A SJMP LK4 KEND:SJMP OUT ;扫描完结束 KS1: MOV DPTR,#7F00H ;检查有无按键 MOV A,#00H MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR CPL A ANL A,#0FH RET OUT1:MOV 50H,#1 OUT:
18. 用 C 语言编写出定时扫描方式下矩阵键盘的处理程序。
F1 和 F2 标志已在主函数前定义。 //************检测有无键按下函数************ uchar checkkey() //检测有无键按下函数,有返回 0xff,无返回 0
{uchar i; XBYTE[0x7f00]=0x00; i=XBYTE[0x7f02]; i=i&0x0f; if (i= =0x0f) return(0); else return(0xff); } //************键盘扫描函数************ uchar keyscan()//键盘扫描函数,如果有键按下,则返回该键的编码,如果无键按下,则返回 0xff {uchar scancode; //定义列扫描码变量 uchar codevalue; //定义返回的编码变量 uchar m; //定义行首编码变量 uchar k; //定义行检测码 uchar i,j; if (checkkey()= =0) return(0xff); //检测有无键按下,无返回 0xff else {delay(200); //延时 if(checkkey()= =0) return(0xff); //检测有无键按下,无返回 0xff else { scancode=0xfe;m=0x00; //列扫描码,行首码赋初值 for (i=0;i<8;i++) {k=0x01; XBYTE[0x7f00]=scancode; //送列扫描码 for (j=0;j<4;j++) {if ((XBYTE[0x7f02]&k)= =0) //检测当前行是否有键按下 {codevalue=m+j; //按下,求编码 while(checkkey()! =0); //等待键位释放 return(codevalue); //返回编码 m=m+8; //计算下一行的行首编码 } else k=k<<1; //行检测码左移一位 } scancode=scancode<<1; //列扫描码左移一位,扫描下一列 } } } }
P2.7 P2.6 P2.5 P2.4~P2.0 ALE 8031
5 8
G
74LS
373 OE
8
5 A0~A7 CE A8~A12 2764(1) D0~D7 OE
8 5 5 8 A0~A7 A0~A7 CE CE A8~A12 A8~A12 2764(2) OE D0~D7 8 2764(3) OE D0~D7 8
16. 用 8255A 扩展并行 I/O,实现把 8 个开关的状态通过 8 个二极管显示出来,画出硬 件连接图,用汇编语言和 C 语言分别编写相应的程序。 答:硬件电路图如下:8051 与 8255 的连接略,设 8255 的 A,B,C 和控制控口的地址
为 7F00H,7F01H,7F02H,7F03H。8255 的 A 口接 8 个开关,B 口接 8 个发光二极管。
对应的阴极端接地。 11. 简述 LED 数码管显示的译码方式。 答:所谓译码方式是指由显示字符转换得到对应的字段码的方式。对于 LED 数码管显 示器,通常的译码方式有硬件译码方式和软件译码方式两种。 12. 简述 LED 动态显示过程。 答:LED 动态显示是将所有的数码管的段选线并接在一起,用一个 I/O 接口控制,公共 端不是直接接地 (共阴极 )或电源 (共阳极 ), 而是通过相应的 I/O 接口线控制, 工作过程为: 第一步使右边第一个数码管的公共端 D0 为 1,其余的数码管的公共端为 0,同时在 I/O(1) 上发送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二 步使右边第二个数码管的公共端 D1 为 1, 其余的数码管的公共端为 0, 同时在 I/O(1)上发送 右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,依此类推, 直到最后一个,这样 4 个数码管轮流显示相应的信息,一次循环完毕后,下一次循环又这样 轮流显示,从计算机的角度看是一个一个地显示,但由于人的视觉暂留效应,只要循环的周 期足够快,则看起来所有的数码管就都是一起显示的了,这就是动态显示的原理。 13. 使用 2764(8KB×8)芯片通过部分译码法扩展 24KB 程序存储器,画出硬件连接图, 指明各芯片的地址空间范围。 答:使用 2764(8K×8)芯片通过部分译码法扩展 24KB 程序存储器,须要 3 块。采用 线译码, P2.5 与第一片 2764 的 CE 相连, P2.6 与第二片 2764 的 CE 相连, P2.7 与第三片 2764 的 CE 相连,硬件连接如下:
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 + RD P2.0 Q0 Q1 74LS Q2 Q3 373 Q4 Q5 Q6 Q7 OE D0 D1 D2 D3 D4 D5 D6 D7 G +5V
8051
输入数据的命令如下: MOV DPTR,#0FE00H MOVX A,@DPTR
14. 使用 6264(8KB×8)芯片通过全译码法扩展 24KB 数据存储器,画出硬件连接图,指 明各芯片的地址空间范围。 答:使用 6264(8K×8)芯片通过全译码法扩展 24KB 程序存储器,须要 3 块。采用 138 译码器译码,硬件连接如下:
Vcc
74LS138 G1 G G2 G2 Y3 Y2 C Y1 B A Y0 G 8 74LS
P2.7 P2.6 P2.5 P2.4~P2.0 ALE 8031
5
373 OE
8
5 A0~A7 CE A8~A12 6264(1) D0~D7 OE
8 5 5 8 A0~A7 A0~A7 CE CE A8~A12 A8~A12 6264(2) OE D0~D7 8 6264(3) OE D0~D7 8
P0 EA PSEN
8
8
地址空间如下: 第一片: 1100 0000 0000 0000~1101 1111 1111 1111;即 C000H~DFFFH; 第二片: 1010 0000 0000 0000~1011 1111 1111 1111;即 A000H~BFFFH; 第三片: 0110 0000 0000 0000~0111 1111 1111 1111;即 6000H~7FFFH;


1. 什么是 MCS-51 单片机的最小系统? 答:所谓最小系统,是指一个真正可用的单片机的最小配置系统。对于单片机内部资源 已能够满足系统需要的,可直接采用最小系统。 2. 简述存储器扩展的一般方法。 答:存储器芯片与单片机扩展连接具有共同的规律。即不论何种存储器芯片,其引脚都 呈三总线结构,与单片机连接都是三总线对接。另外,电源线接电源线,地线接地线。 3. 什么是部分译码法?什么是全译码法?它们各有什么特点?用于形成什么信号? 答: 部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后, 剩余的高位 地址线仅用一部分参加译码。 部分译码使存储器芯片的地址空间有重叠, 造成系统存储器空 间的浪费。 全译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后, 剩余的高位 地址线全部参加译码。 这种译码方法中存储器芯片的地址空间是唯一确定的, 但译码电路要 相对复杂。译码形成存储器芯片的片选信号线 CE 。 4. 采用部分译码为什么会出现地址重叠情况,它对存储器容量有何影响? 答: 部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后, 剩余的高位 地址线仅用一部分参加译码。参加译码的地址线对于选中某一存储器芯片有一个确定的状 态,而与不参加译码的地址线无关。也可以说,只要参加译码的地址线处于对某一存储器芯 片的选中状态,不参加译码的地址线的任意状态都可以选中该芯片。正因为如此,部分译码 使存储器芯片的地址空间有重叠,造成系统存储器空间减少。 5. 存储器芯片的地址引脚与容量有什么关系? 答:容量(Q)与地址线数目(N)满足关系式:Q=2N。 6. MCS-51 单片机的外部设备是通过什么方式访问的? 答:MCS-51 单片机扩展的外部设备与片外数据存储器统一编址,即外部设备占用片外 数据存储器的地址空间。按片外数据存储器的访问方式访问。 7. 何为键抖动?键抖动对键位识别有什么影响?怎样消除键抖动? 答:按键时,无论按下键位还是放开键位都会产生抖动,如果对抖动不作处理,必然会 出现按一次键而输入多次,为确保按一次键只确认一次,必须消除按键抖动。消除按键抖动 通常有硬件消抖和软件消抖两种方法。 8. 矩阵键盘有几种编码方式?怎样编码? 答:通常有以下两种方法进行编码;(1) 用连接键盘的 I/O 线的二进制组合进行编码。 (2) 顺序排列编码。 9. 简述对矩阵键盘的扫描过程。 答:矩阵式键盘的工作过程可分为两步:第一步是 CPU 首先检测键盘上是否有键按下; 第二步是识别哪一个键按下。 (1) 检测键盘上是否有键按下的处理方法是: 将列线送入全扫描字, 读入行线的状态来 判别。 (2) 识别键盘中哪一个键按下的处理方法是: 将列线逐列置成低电平, 检查行输入状态, 称为逐列扫描。 10. 共阴极数码管与共阳极数码管有何区别? 答:共阴极结构,8 段发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共 端接地,要使哪根发光二极管亮,则对应的阳极端接高电平;共阳极结构,8 段发光二极管 的阳极端连接在一起,阴极端分开控制,使用时公共端接电源,要使哪根发光二极管亮,则
+5V K0 PA0 PA1 PA2 PA3 PA4 系统总线 PA5 PA6 PA7 8255A PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
8051L0K7来自L7+5V
程序如下: 汇编程序
ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV DPTR,#7F03H MOV A,#90H MOVX @DPTR,A LOOP:MOV DPTR,#7F00H MOVX A,@DPTR MOV DPTR,#7F01H MOVX @DPTR,A SJMP LOOP SJMP $ END C 语言程序: #include <reg51.h> #include <absacc.h> main() { unsigned char i; XBYTE[0x7f03]=0x90; while(1) { i=XBYTE[0x7f00]; XBYTE[0x7f01]=i; } } }
相关文档
最新文档