950 likes | 1.27k Views
P 2. 高 8 位地址线. A 15 …A 8. 地址锁存器. 2764. XTAL 2. ALE. G. 8. P 0. A 7 …A 0. 8. 74 LS 373. 8031. XTAL 2. P 1. 8. CE. + 5 V. P 0. D 7 …D 0. 8051. PSEN. EA. OE. P 2. 8. RESET. P 3. 8. 第六章 MCS-51 单片机系统 扩展及接口技术. 6 . 1 MCS-51 单片机系统总线. 一、最小系统
E N D
P 2 高8位地址线 A15…A8 地址锁存器 2764 XTAL2 ALE G 8 P 0 A7…A0 8 74LS 373 8031 XTAL2 P 1 8 CE +5V P 0 D7…D0 8051 PSEN EA OE P 2 8 RESET P 3 8 第六章 MCS-51单片机系统 扩展及接口技术 6 . 1 MCS-51单片机系统总线 一、最小系统 最小系统:一个真正可用的单片机最小配置系统
高8位地址线 P2 A15~A8 16位地址总线 地址 锁存器 低8位地址线 A7~A0 MCS-51 单片机 G 接地 或接+5V EA 8位数据总线 D7~D0 P0 ALE (P3.7)RD 控制总线 (P3.6)WR PSEN 二、单片机系统的三总线结构
6 . 2 MCS-51单片机系统存储器扩展 若有片内程序存储器,又扩展片外存储器时,EA接高电平单片机先执行片内存储器中的程序,然后自动转向片外程序存储器执行程序 一、存储器扩展概述 1、MCS-51单片机的扩展能力 2、存储器扩展的方法 • ROM:片内片外统一编址,不可重叠,片内片外地址连续 • RAM:片内片外独立编址,可重叠,用不同的访问指令区别 • 存储器的控制线
访问片外RAM存储器指令: MOVX A,@Rj MOVX A,@DPTR 执行该指令将在单片机的RD端产生读脉冲输出。 MOVX @Rj,A MOVX @DPTR,A 执行该指令将在单片机的WR端产生写脉冲输出。 • 存储器的数据线 4位字长的芯片数据线有4条, 8位字长的芯片数据线有8 条,存储器的数据总线与单片机的P0口由低到高位顺序连接。
存储器的地址线 存储器的容量Q与地址线数目N的关系 单片机P0口作低8位地址线和数据线分时复用,P2口扩展为高8位地址 在需要扩展多片同类存储芯片时,可采用线译码或专用译码器译码方式以寻址多块存储芯片。 二、ROM 的扩展 1、常用EPROM芯片 2716(2K*8)、2732A(4K*8)、2764(8K*8)、 27128(16K*8)、27256(32K*8)、 27512(64K*8)
+5V Vcc GND XTAL1 XTAL2 +5V +5V 8031 Vcc Vcc Vpp GND GND CE A12 A11 P2.0 EA 74 LS 373 A10 P2.1 A9 P2.2 A8 P2.3 P2.4 P2.5 G OE P2.6 2764 P2.7 P0.0 P3.6(WR ) P3.7(RD ) P0.7 ALE PSEN OE A7 Q0 D0 D0 D1 D1 A6 Q1 A5 D2 Q2 D2 D3 A4 D3 Q3 Q4 D4 A3 D4 D5 D5 Q5 A2 Q6 A1 D6 D6 D7 A0 D7 Q7 2、EPROM的扩展方法 • 单片EPROM的扩展
P2.7 P2.6 P2.5 5 P2.4~P2.0 5 G ALE 5 74LS373 8 8031 8 OE A0~A7 A0~A7 A8~A12 A8~A12 CE CE EA 2764(2) 2764(1) 8 D0~D7 D0~D7 OE OE 8 8 8 P0 PSEN 可寻址的地址范围: xxx0 0000 0000 0000~xxx1 1111 1111 1111 即:0000H~1FFFH,2000H~3FFFH……E000H~FFFFH • 采用线译码方式的多片EPROM的扩展
P2.5 5 P2.4~P2.0 5 G ALE 5 74LS373 8 8031 8 OE A0~A7 A0~A7 A8~A12 A8~A12 CE CE EA 2764(2) 2764(1) 8 D0~D7 D0~D7 OE OE 8 8 8 P0 PSEN 可寻址的地址范围: 2764(1):01x0 0000 0000 0000~01x1 1111 1111 1111 如:6000H~7FFFH 2764(2):10x0 0000 0000 0000~10x1 1111 1111 1111 如:0A000H~0BFFFH
+5V G1 G2B G2A P2.7 C Y1 P2.6 B P2.5 Y0 A 74LS138 5 P2.4~P2.0 5 G ALE 5 74LS373 8 8031 8 OE A0~A7 A0~A7 A8~A12 A8~A12 CE CE EA 2764(2) 2764(1) 8 D0~D7 D0~D7 OE OE 8 8 8 P0 PSEN • 采用译码器芯片的多片EPROM的扩展 译码地址范围唯一:2764(1):0000H~1FFFH 2764(2):2000H~3FFFH
片内ROM有4KB, 其编址为0000H~0FFFH; 片外ROM有16KB,其编址紧接在后为1000H~4FFFH 而不是:xx00 0000 0000 0000~xx11 1111 1111 1111 如:0000H~3FFFH
①确定片数 片数=(末地址一首地址)+ 1/芯片容量 =( 3FFFH-0000H)+ 1/2000H = 4000H/2000H =2(片) 例:要求用2764(8K*8)芯片扩展8031的片外程序存储器空间,分配的地址范围为0000H~ 3FFFH。 分析:本例采用完全译码的方法,即所有地址线全部连接,每个单元只占用唯一的1个地址。 ②分配地址范围 第1组(1片)所占用的地址范围为: 0000000000000000 0000H 0001111111111111 1FFFH 第2组(1片)所占用的地址范围为: 0010000000000000 2000H 0011111111111111 3FFFH
③设计外译码电路:采用3-8译码器74LS138 ④画出存储器扩展连接图 三、RAM 的扩展 1、常用RAM芯片 6116(2K*8)、6264(8K*8)、62256(32K*8)
2、RAM的扩展方法 +5V Vcc GND XTAL1 XTAL2 +5V +5V 8031 Vcc Vcc GND GND CE1 A12 A11 P2.0 EA 74 LS 373 A10 P2.1 A9 P2.2 A8 P2.3 P2.4 P2.5 G OE +5V P2.6 6264 P2.7 P0.0 P3.6(WR) CE2 P3.7(RD) P0.7 ALE PSEN OE WE D0 D0 A7 Q0 D1 A6 D1 Q1 A5 D2 D2 Q2 A4 D3 Q3 D3 A3 Q4 D4 D4 A2 D5 Q5 D5 A1 D6 D6 Q6 Q7 A0 D7 D7 • 单片RAM的扩展 可寻址的地址范围: 0xx0 0000 0000 0000~0xx1 1111 1111 1111,如: 0000H~1FFFH
多片RAM的扩展(采用线译码或译码芯片译码) 译码地址范围: 上下两片编址都是:xxx0 0000 0000 0000~xxx1 1111 1111 1111 由于片内片外RAM可重叠编址,可取0000H~1FFFH, 2000H~3FFFH,4000H~5FFFH……E000H~FFFFH任意一组用
P2.7 P2.0-2.6 A0-A7 A8-A14 A0-A7 A8-A14 1Q-8Q 8031 CE WE 74LS373 27256 62256 ALE G CE 1D-8D O0-O7 IO0-IO7 OE OE P0.0-0.7 PSEN RD EA WR 四、兼有片外ROM又有片外RAM的扩展方法 ROM和RAM寻址范围都是32K,都自0000H~7FFFH,二者完全重叠。由于访问片外ROM与访问片外RAM所用的控制线不同,且PSEN与RD、WR不会同时有效,尽管地址总线与数据总线公用,不会引起混乱。
五、基于I2C总线的串行存储器E2PROM的扩展 (导学-见教材)
思 考 作 业 • 数据存储器和程序存储器公用地址总线和数据总 线, • 会引起混乱吗? • 程序存储器和数据存储器的扩展有何相同点及不同点?试将8031芯片外接一片2764EPROM和一片6264RAM组成一个扩展后的系统,画出扩展后的连接图,并说明他们各自的寻址范围。
+5V K0 P1.0 K1 P1.1 ┇ K7 P1.7 MCS-51 LED0 P3.0 LED1 P3.1 +5V ┇ LED7 P3.7 6 . 3 I/O扩展 一、MCS-51单片机的接口直接作为I/O接口 MOV A,#0FFH MOV P1,A;P1用作输入前先全置1 LOOP:MOV A,P1;输入开关状态 CPL A;取反 MOV P3,A;开关状态输出 SJMP LOOP
LED0 P0.0 +5V LED1 P0.1 LED2 P0.2 74 LS 273 LED3 P0.3 LED4 P0.4 LED5 P0.5 LED6 P0.6 LED7 P0.7 CLK CLR 8031 WR ≥1 P2.7 K0 ≥1 RD K1 74 LS 244 K2 K3 K4 K5 K6 K7 G D0 Q0 Q0 D0 Q1 D1 D1 Q1 D2 D2 Q2 Q2 Q3 D3 D3 Q3 D4 D4 Q4 Q4 Q5 D5 D5 Q5 D6 D6 Q6 Q6 D7 D7 Q7 Q7 二、简单I/O接口的扩展 74LS244及74LS273地址都是 0xxx xxxx xxxx xxxx,可取7FFFH
IO/M 口A A AD0~AD7 8 PA0~PA7 256×8位 静态RAM CE 口B ALE B 8 PB0~PB7 RD 口C WR C 6 PC0~PC5 定时器 RESET VCC (+5V) TIMER IN TIMER OUT GND LOOP:DPTR,#7FFFH;指向扩展I/O接口地址 MOVX A,@DPTR;启动从74LS244读入数据 MOVX @DPTR,A;向74LS273写入数据,驱动LED SJMP LOOP 三、扩展8155可编程并行接口芯片 1、8155结构
2、 8155I/O接口、定时器/计数器地址编码(IO/M=1)
D7 D6 D5 D4 D3 D2 D1 D0 TM2 TM1 IEB IEA PC2 PC1 PB PA 规定定时器 工作方式 确定A,B, C口工作 方式 B口 A口 A口 B口 工作方式 1--输出 0--输入 中断控制 1--开中断 0--禁止中断 3、8155的寄存器 (1)命令 / 状态寄存器(C/S寄存器) 地址:XXXXX000B • 命令寄存器(只写)
D7 D6 D5 D4 D3 D2 D1 D0 TIMER INTE B INTR INTE A INTR B BF B A BF A X 定时器 溢出中 断标志 1--计数至终点 0--读C/S后 或硬件复位 A口 中断 请求 标志 A口 中断 允许 标志 A口 缓冲器 满/空 标志 状态寄存器(只读)
(2)PA寄存器 • 地址:XXXXX001B • 可按命令寄存器的内容设定为输入或输出口,可工作于基本I/O方式,也可工作于选通I/O方式 • PA寄存器有8位,引脚是PA0-PA7 (3)PB寄存器 • 地址:XXXXX010B • 功能同PA (4)PC寄存器 • 地址:XXXXX011B • PC寄存器仅6位,由命令寄存器的第2、3位确定为输入、输出口,或做A、B两口的控制信号 • 当PC0-5用作控制口时,PC0-2位分配给PA口,PC3-5位分配给PB口
15 14 13 …… 0 M2 M1 计数长度:02H--3FFFH 定时器输出方式 00:单个方波01:连续方波10:单个脉冲11:连续脉冲 4、8155的定时器/计数器 地址:低8位 XXXXX100B,高8位 XXXXX101B • 14位定时器,它对输入引脚TIMERIN上的脉冲进行递减计数,当达到计数终点时,可从TIMEROUT端提供脉冲或方波输出 • 计数长度寄存器:两个8位寄存器
8 P0.0 AD0 PA 8155 MCS-51 8 PB P0.7 AD7 ALE ALE • 寻址8155的RAM: IO/M=0 • 寻址8155的I/O端口:IO/M=1 • 列出其RAM与I/O接口的地址 P2.7 CE P2.0 IO/M 6 WR WR PC RD RD RESET RESET TIMER IN GND GND VCC VCC TIMER OUT RESET +5V 5、用8155扩展I/O口
8155片内RAM及I/O口地址编码 RAM字节地址:0xxx xxx0 0000 0000~0xxx xxx0 1111 1111 可取7E00H~7EFFH (xxxxxx=111111) C/S寄存器: 0xxx xxx1 xxxx x000 取0111 1111 0000 0000 即为7F00H PA口: 0xxx xxx1 xxxx x001 取0111 1111 0000 0001 即为7F01H PB口: 0xxx xxx1 xxxx x010 取0111 1111 0000 0001 即为7F02H PC口: 0xxx xxx1 xxxx x011 取0111 1111 0000 0001 即为7F03H 定时器低8位: 0xxx xxx1 xxxx x100 取0111 1111 0000 0001 即为7F04H 定时器高8位: 0xxx xxx1 xxxx x101 取0111 1111 0000 0001 即为7F05H
6、8155编程举例 • 将8155设置为I/O和定时器工作方式,A口定义为基本输入方式,B口定义为基本输出方式,定时器作为方波发生器,对输入脉冲进行16分频 MOV DPTR,#7F04H ;指向定时器低8位 MOV A,#10H ;计数常数16 MOVX @DPTR,A ;装入定时器低8位 INC DPTR ;指向定时器高8位 MOV A,#40H ;设定定时器为连续方波输出 MOVX @DPTR,A ;装入定时器高8位 MOV DPTR,#7F00H ;指向C/S口 MOV A,#0C2H ;命令控制字设定(1100 0010) MOVX @DPTR,A ;启动定时器
读写8155RAM单元的内容 • 读8155RAM的F1H单元内容 MOV DPTR,#7EF1H MOVX A,@DPTR • 将立即数58H写入8155RAM的20H单元 MOV A,#58H MOV DPTR,#7E20H MOVX @DPTR,A
P3.0 RXD Q8 SI Q8 SI 4014(1) 4014(2) P/S CLK P/S CLK 8031 P3.1 TXD P1.0 四、利用单片机的串行口扩展并行I/O接口 • MCS-51单片机的串行口在方式0(移位寄存器方式)下, 使用移位寄存器芯片可以扩展一个或多个并行I/O接口 • 利用串行口扩展并行输入口 用4014/74LS165扩展两个8位并行输入口,并将输入的数据存于片内30H、31H单元
SETB P1.0 ;置4014为并行输入方式(P/S=1) CLR P3.1 SETB P3.1 ;在CLK上产生一个脉冲的上升沿,使4014并行置数 CLR P1.0 ;置4014为串行移位工作方式 MOV SCON,#10H ;置串口为方式0,启动串口接收数据 JNB RI,$ ;等待串口接收数据 CLR RI ;接收完后清RI标志 MOV A,SBUF ;读串行口接收的数据 MOV 30H,A ;存入30H单元 MOV SCON,#10H ;再启动串行口接收4014(2)的8位数据 JNB RI,$ ;等待串口接收数据 CLR RI ;接收完后清RI标志 MOV A,SBUF ;读串行口接收的数据 MOV 31H,A ;存入31H单元
P3.0 DATA Q8 DATA Q8 4094(1) 4094(2) STB CLK STB CLK 8031 P3.1 P1.0 • 利用串行口扩展并行输出口 用4094/74LS164扩展两个8位并行输出口,输出的数据来自于片内30H、31H单元
SETB P1.0 ;置4094为串行移位工作方式(STB=1) MOV SCON,#00H ;置串行口为方式0 MOV A,31H MOV SBUF,A ;启动串口发送数据 JNB TI,$ ;等待串口发送完 CLR TI ;发送完清TI标志 MOV A,#30H MOV SBUF,A ;再启动串口发送数据 JNB TI,$ ;等待串口发送完 CLR TI ;发送完清TI标志 CLR P1.0 ;置4094为并行输出工作方式(STB=0) CLR P3.1 SETB P3.1 ;在CLK上产生一个脉冲的上升沿,使4094并行 ;输出数据
+5V P1.0 P7 SDA P1.1 SCL INT0 INT 6MHz PCF8574 A2 8031 A1 A0 P0 五、利用I2C总线接口芯片扩展I/O接口(导学)
键 扫 描 N 有键按下? Y 查 键 号 JMP @A+DPTR A=NH A=01H A=00H 0号按键 处理程序 N号按键 处理程序 1号按键 处理程序 6 . 4 按键、键盘及其接口 一、键输入过程与软件结构
+5V 键按下 键释放 8031 K 闭合稳定 释放稳定 P1.0 后沿抖动 前沿抖动 二、键输入和键编码 1、键输入过程
2、键编码及键值 • 一组按键或键盘都要通过I/O口线查询按键的开关状态。根据键盘结构不同,采用不同的编码方法。但无论有无编码,以及采用什么编码,最后都要转换成与累加器中的数值相对应的键值,以实现按键功能程序的散转 (1)用键盘连接的I/O线的二进制组合表示键码 (2)顺序排列编码 3、键盘的监测方法 • 对于是否有键按下的信息输入方式,通常采用查询工作方式、定时扫描工作方式及中断工作方式三种。
+5V P1.0 K0 P1.1 K1 P1.2 K2 P1.3 K3 8031 P1.4 K4 P1.5 K5 P1.6 K6 P1.7 K7 & INT0 三、独立式按键 1、独立式按键接口 • 独立式按键是指直接用一根I/O口线构成的单个按键电路。每个独立式按键单独占有一根I/O口线,每根I/O口线上的按键的工作状态不会影响其它I/O口线的工作状态。 • 通常按键输入都采用低电平有效,上拉电阻可保证按键断开时I/O线上有确定的高电平
+5V K0 P1.0 P1.1 K1 P1.2 K2 P1.3 K3 P1.4 8031 K4 P1.5 K5 P1.6 K6 P1.7 K7 2、独立式按键的处理程序 以查询方式设计键盘程序。程序中省略了软件去抖动措施,只包括键查询、键功能程序转移。K0~K7为功能程序入口地址标号,其地址间隔应能容纳JMP指令字节,PROM0~PROM7分别为每个按键的功能程序,设I/O为P1口
START: MOV A,#0FFH ;输入时先置P1口全为1 MOV P1,A MOV A,P1 ;键状态输入 JNB ACC.0,K0 ;0号键按下转K0标号地址 JNB ACC.1,K1 ;1号键按下转K1标号地址 JNB ACC.2,K2 ;2号键按下转K2标号地址 JNB ACC.3,K3 ;3号键按下转K3标号地址 JNB ACC.4,K4 ;4号键按下转K4标号地址 JNB ACC.5,K5 ;5号键按下转K5标号地址 JNB ACC.6,K6 ;6号键按下转K6标号地址 JNB ACC.7,K7 ;7号键按下转K7标号地址 JMP START ;无键按下返回 K0:LJMP PROM0 K1:LJMP PROM1 …… PROM0:…… ;0号键功能程序 LJMP START ;0号键程序执行完返回 …… PROM7:…… ;7号键功能程序 LJMP START ;7号键程序执行完返回
D7 D6 +5V D5 D4 I/O 接口 D3 D2 D1 D0 四、矩阵式键盘 1、矩阵式键盘接口及工作原理 • 采用两步对键盘进行扫描 • 用全扫描方式检测键盘上有无键按下 • 用逐行/逐列扫描方式识别是哪个键按下
PA7 PA6 P2.7 CE PA5 P2.0 PA4 IO/M PA3 WR WR PA2 PA1 RD RD PA0 5.1KΩ×4 1 7 3 0 2 4 6 5 ALE ALE 0 PC0 8 9 10 12 13 14 11 8 15 1 PC1 P0 AD0~7 16 22 17 18 21 20 23 +5V 19 2 8031 PC2 29 27 28 24 25 26 31 30 3 PC3 20μF +5V RESET 5 7 8155 3 6 1 4 0 2 1KΩ 2、采用8155扩展I/O接口与键盘接口 (1)键盘扫描子程序的功能 • 判断键盘上有无键按下
判断键盘上有无键按下 • 用时间延迟重检的办法消除键抖动 • 判断闭合键的键号 扫描口PA7~PA0依次输出列扫描字,如下表
再相应的读取PC口的可能状态如下表 • 键扫描法确定按键位置 即输出一个列扫描字,紧接着读PC口状态,若PC3~PC0全为1,则列线输出为0的列上没有键闭合;否则,就可据PC3~PC0逐一判断以确定按键所在行。 • 闭合的键号: N=行首键号+列号 每行的首键号自上至下依次为:0、8、10H、18H,列号依次为0~7,行列号可据低电平对应的位确定。
KEY1:ACALL KS1 ;调用判断有无键按下子程序 JNZ LK1 ;有键按下时, ,转消抖动 AJMP KEY1 ;无键按下返回 LK1 :ACALL T10MS ;调用10ms延时子程序 ACALL KS1 ;确认是否真有键按下 JNZ LK2 ;有键按下, 转逐列扫描 AJMP KEY1 ;不是键按下返回 LK2 : MOV R2,#0FEH ;首列扫描字送R2 MOV R4,#00H ;首列号送R4 LK4 : MOV DPTR,#7F01H ;列扫描字送8155PA口 MOV A,R2 ;第1次列扫描 • 待按键释放后再将扫描号送累加器A进行处理 (2)键盘扫描子程序 流程图如教材,8155的初始化在主程序中完成,PA口为基本输出方式,PC口为基本输入方式,子程序出口参数:(A)=键号
MOVX @DPTR,A ;使第0列线为0 INC DPTR ;指向8155PC口 INC DPTR MOVX A,@DPTR ;读入行状态 JB ACC.0,LONE ;第0行无键按下,转查第1行 MOV A,#00H ;第0行有键按下,该行首键号#00H送A AJMP LKP ;转求键号 LONE: JB ACC.1,LTWO ;第1行无键按下,转查第2行 MOV A,#08H ;第1行有键按下,该行首键号#08H送A AJMP LKP LTWO:JB ACC.2,LTHR ;第2行无键按下,转查第3行 MOV A,#10H ;第2行有键按下,该行首键号#10H送A AJMP LKP LTHR:JB ACC.3,NEXT ;第3行无键按下,改查下一列 MOV A,#18H ;第3行有键按下,该行首键号#18H送A LKP :ADD A,R4 ;键号=行首键号+列号 PUSH ACC ;键号进栈保护 LK3 :ACALL KS1 ;等待键释放
JNZ LK3 ;未释放,等待 ACALL T10MS ;调用10ms延时子程序 POP ACC ;键释放,键号出栈 RET ;键扫描结束,出口参数(A)=键号 NEXT: INC R4 ;列号加1指向下一列 MOV A,R2 ;判断8列扫描完没有 JNB ACC.7,KND ;扫描完,返回 RL A ;扫描字左移一位 MOV R2,A ;扫描字送R2 AJMP LK4 ;转下一列扫描 KND :AJMP KEY1 KS1 :MOV DPTR,#7F01H ;指向PA口 MOV A,#00H ;全扫描字 MOVX @DPTR,A INC DPTR INC DPTR ;指向PC口 MOVX A,@DPTR ;读入PC口状态 CPL A ;高电平表示有键按下
ANL A,#0FH ;屏蔽高4位 RET ;出口状态: 时有键按下 T10MS:MOV R7,#14H ;延时10ms子程序 TM :MOV R6,#0FFH TM6 :DJNZ R6,TM6 DJNZ R7,TM RET
+5V g a b com f 10 9 8 7 6 a b f g c e dp d 1 2 3 4 5 dp e c com d a a b b c c d d e e f f g g dp dp 6 . 5 LED显示器及其接口技术 一、LED显示器的结构与原理 • LED显示器的七段码
二、LED显示器的显示方式 1、LED静态显示方式