当前位置:文档之家› 第11章单片机常用接口

第11章单片机常用接口

14
而使用C51编写该程序时,首先将最低字节数据加1, 之后对高的九个字节进行处理。如果较低字节的数值 加1后变为0,那么一定会有进位,较高字节需要加1。 如果较低字节的数值加1后不为0,较高字节不需要加1。
11.3 输入输出接口扩展
作用:对单片机I/O口的信号和外部设备的信号进行协调
概念:I/O接口电路就是处在单片机I/O口和外部设备之间的电路。
6
51单片机的三总线分配:
数据总线: P0口作为8位的数据总线
地址总线: P2口作为高8位地址线, P0口作为低8位地址线
控制总线: ALE、/RD、/WR
7
11.2 数据存储器扩展
概念:数据存储器即随机访问存储器 (Random Access Memory,RAM) 特点:可以读出或写入数据,属于易失性存储器,断电后 存储的数据丢失,经常用于存储程序运行过程中产生的 临时数据。
常用的输出接口:锁存器74LS373、74LS273、74HC573
74LS273是带有清零端的8D触发器,常用作8位地址锁存器。 当清零端 CLR 输入低电平时,输出端Q的数据清零。当 CLR 保持 高电平时,正常工作,在CLK引脚信号的上升沿将输入端1D- 8D的数据传送并锁存至输出端1Q-8Q。 74LS373是一个带三态缓冲输出的8D触发器,也是常用的地址 锁存器芯片。数据从D0-D7引脚输入,从Q0-Q7引脚输出。 OE 为输出使能信号 LE为锁存使能端,低电平锁存有效 17
OE 引脚为三态输出使能端,低电平有效。
11
【例11-1】在片外扩展SRAM IS62C256AL中,从713FH-7148H地
址连续存放一个长度为10字节的无符号数,假设该数据按照低字节 存放在高地址单元、高字节存放在低地址单元的顺序存放,请编写 程序,将该数据读出,对其加1后写回到原位置。
21
11.4.1 8255A内部结构和引脚功能
数据线D0-D7,负责传输数据信息、状 态信息和控制字,与单片机的P0.0-P0.7 引脚连接。 2. 有三个8位并行I/O口,A口、B口、C口。 分别对应引脚PA0-PA7、PB0-PB7、 PC0-PC7。这些引脚通常和外设相连。 3、RD 、 WR 两个引脚和单片机的同名引脚相连, 单片机通过这两个引脚控制数据从8255A 中读取或写入8255A。 4、CS 是片选信号,低电平有效。只有当该引 脚为低电平时,单片机与8255A之间才能 通信。 1.
CS
0
0 0 0
端口及操作功能
0
0 1 0
单片机从端口A读取数据
单片机从端口B读取数据 单片机从端口C读取数据 单片机向端口A写数据
0
1 1 ×
1
0 1
1
1 1
0
0 0
0
0 0 1
单片机向端口B写数据
单片机向端口C写数据 单片机向8255A控制寄存器写控制字 D0-D7呈高阻状态
× × ×
1
×
1
×
0
【例11-2】使用74LS244作为输入缓冲接口,74LS273作为输出 锁存接口,请编程实现:当按键KEY1按下,LED1灯点亮,其它 单片机P2.0输出为低电平、 /WR 灯熄灭,同理,当 KEYi按键按下, LEDi灯点亮,其它灯熄灭。
输出低电平,使能74HC273送 出LED驱动信号。地址FEFFH。
5.
6.
RESET是复位信号输入引脚,高电平有效。8255A在正常工作之前 需要进行一次复位。 22 两位地址线A1、A0选择四个端口:A口、B口、C口、控制端口
8255A 的内部结构
微 处 理 器


23
8255A 端口地址表
A1 A0 RD WR 0 0 1 1 0 0 0 0 1 1 1 0
MOVX
MOV DEC
@DPTR ,A
R2,#9 DPL
;回写
;循环次数9次,将高的9个字节加进位位
LOOP: MOVX
ADDC MOVX DEC DJNZ
A,@DPTR
A,#00H @DPTR,A DPL R2,LOOP
;将内容读出
;加进位位 ;将修改后的内容写回原地址 ;修改地址指针 ;判断循环是否结束
单片机P2.0输出为低电平、/RD 输出低电平,使得74LS244被 选通工作,才能获取按键输入 信号。所以输出地址FEFFH。
18
(1)汇编语言程序段: AUXR EQU 8EH 该指令可以使 /RD、 ORL AUXR, #00000010B ;设置EXTRAM=1 ,使用片外RAM P2.0 引脚为低电平 MOV DPTR, #0FEFFH ;地址送 DPTR NEXT: MOVX A, @DPTR ;读74LS244的数据 NOP ;延时,等待74LS244的输出恢复高阻态 NOP 该指令可以使/WR、 NOP P2.0引脚为低电平 NOP MOVX @DPTR,A ;将读入的数据送出,驱动LED NOP NOP NOP NOP SJMP NEXT
动态RAM(Dynamic RAM,DRAM) 分类:
功耗低、价格相对便宜, 但是需要定时刷新才能维持信息不变
静态RAM(Static RAM,SRAM)
造价比DRAM高,但是不需要动态刷新, 信息一经写定就不会变化,和单片机的连接简单, 8 无需添加辅助电路,比较常用
11.2.1 SRAM芯片
1.存储器容量的描述方法: (1)如果数据线有8条,每个存储单元为8位,存储容量可用字 节数表示。
9
2.SRAM芯片的引脚---IS62C256AL
(1)地址线A0-A14:15根地址线,标识 为A0-A14,也就是有32K(215=32K)个 存储单元,即32KB。 (2)数据线D0-D7。 (3)控制线:为输出使能引脚,和单片机 的引脚相连;
/WE是写使能,和单片机的/WR引脚相连; /CS片选引脚,用来选通该芯片工作。
20
11.4、8255A可编程IO接口扩展
8255A: Intel公司的通用可编程并行接口芯片。这一类
芯片在正常工作前需要通过编程来设置其工作方式,所
以称为可编程芯片。 作用:单片机的并行口数量比较少,但是需要并行口的 外设比较多,所以经常需要扩展并行口供外设使用。而 8255A可以提供3个并行口。
1
1
1
0
0
非法状态
D0-D7呈高阻状态
24
11.4.2 8255A控制字
• 两个控制字:方式选择控制字(用来设置8255A的工 作方式)和C口置位/复位控制字(设置C口某一位的 状态 ) 。 • 两个控制字的区分标志:控制字的D7位。 当D7位为1,使用的是方式选择控制字; 当D7位为0,使用的是C口置位/复位控制字。
(4)电源VCC和地GND,使用5V电源供电。
10
11.2.2 单片机和SRAM的接口
存储器的三总线分别与系统分离出的三总线对应相连。
74LS373是8位的锁存器芯片。 当LE引脚输入高电平时,D0-D7的数据被传送到输出端Q0-Q7;
当LE引脚引脚变为低电平,输出端的数据被锁存,输入端数据不影响输出。
3. 重复第2步。
12
使用汇编语言编程时,低字节加1后可能会产生进位,影响Cy标志位, 需要使用ADDC指令将Cy标志位加入到较高字节的求和运算中。
汇编语言程序段: AUXR EQU ORL MOV MOVX ADD 8EH AUXR,#00000010B;设置EXTRAM=1,使用片外RAM DPTR,#7148H ;最低字节地址7148H送DPTR寄存器 A,@DPTR A , #01 ;将最低字节内容读出 ;最低字节加1,并形成Cy标志位
第11章 单片机常用接口
2
主要内容
11.1、单片机最小系统 11.2、数据存储器扩展 11.3、输入输出接口扩展 11.4、8255A可编程I/O接口扩展
11.5、单片机与外部A/D、D/A转换电路的接口
11.6、单片机与键盘的接口 11.7、单片机与LED显示器的接口 11.8、单片机与光电耦合器件的接口 11.9、单片机与继电器的接口
• 使用:都是写到控制字端口(A1A0=11)
25
1.方式选择控制字
D7 D7=1 标志位 A口工作方式选择 00:方式0 01:方式1 1x:方式2 A口I/O D4=1:输入 D4=0:输出 B口I/O D1=1:输入 D1=0:输出 B口工作方式选择 0:方式0 1:方式1 C口高4位I/O D3=1:输入 D3=0:输出 D6 D5 D4 D3 D2 D1 D0 C口低4位I/O D0=1:输入 D0=0:输出
复位电路
晶振电路
5
最小系统作为应用的核心,可以为用户扩展提供三总线:
地址总线(AB):输出,传送单片机要访问的外设或者接 口的地址信息,决定了单片机的最大寻址能力。
如果单片机提供16条地址总线,可以访问的地址空间为216,即64KB。
数据总线(DB):双向, 用来传送数据信息。通过数据总 线,单片机可以和内存或其它总线器件之间传送数据。数 据总线的宽度决定了一次可以操作的数据位数。 控制总线(CB):用来传送控制信号。每一个控制线上信 号的传输方向是确定的、单向的,输入或者输出。
13
C51程序: void main( ) { unsigned char i,x; AUXR =AUXR | 0x02; XBYTE[0x7148]=XBYTE[0x7148]+1; //将最低字节数据加1。 x=XBYTE[0x7148];//最低字节暂存至x,可以作为是否有进位的判断条件 for(i=0;i<9;i++) { if (x==0) //当x==0条件成立,一定有进位,否则,无进位。 { XBYTE[0x7147-i]=XBYTE[0x7147-i]+1; // x==0成立,有进位,高字节加1 x= XBYTE[0x7147-i]; //暂存该字节数据,作为下次判断进位的条件 } else break; // x==0条件不成立,说明没有进位,退出循环。 } while(1) ; }
相关主题