1 / 88

第九章 应用系统配置及接口技术

第九章 应用系统配置及接口技术. 9.1 并行 I/O 口的扩展 9.1.1 简单并行 I/O 口的扩展 9.1.2 8155 带 RAM 和定时器 / 计数器的可编程并行接口芯片 9.2 人 - 机通道配置与接口技术 9.2.1 键盘接口及处理程序 9.2.2 LED 显示器接口及显示程序 9.2.3 串行口控制的键盘 /LED 显示器接口电路 9.3 A/D 转换器及接口技术 9.4 D/A 转换器及接口技术. 9.1 并行 I/O 口的扩展. 9.1.1 简单并行 I/O 口的扩展 在稍微大的系统,单片机片的并行口便不够用,需要扩展。

ellis
Download Presentation

第九章 应用系统配置及接口技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第九章 应用系统配置及接口技术 • 9.1 并行I/O口的扩展 • 9.1.1 简单并行I/O口的扩展 • 9.1.2 8155带RAM和定时器/计数器的可编程并行接口芯片 • 9.2 人-机通道配置与接口技术 • 9.2.1 键盘接口及处理程序 • 9.2.2 LED显示器接口及显示程序 • 9.2.3 串行口控制的键盘/LED显示器接口电路 • 9.3 A/D转换器及接口技术 • 9.4 D/A转换器及接口技术

  2. 9.1并行I/O口的扩展 9.1.1 简单并行I/O口的扩展 在稍微大的系统,单片机片的并行口便不够用,需要扩展。 所谓简单扩展,就是使用通用的74系列的TTL或4000系列的CMOS芯片扩展。

  3. 9.1.1 简单I/O接口的扩展方法 常用74LS244作输入接口芯片,起缓冲作用;用74LS273作输出接口芯片,起锁存作用。

  4. 1G,2G为H时,Y为高阻; 1G,2G为L 时,Y=A

  5. 扩展的输入输出口地址均为: P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 ⅹⅹⅹⅹⅹⅹⅹⅹ 0 ⅹⅹⅹⅹⅹⅹ 除了P2.0以外均取1,则扩展的输入输出口地址写成16进制数均为: FEFFH 上面电路的功能是:按下某键,对应的LED发光。 其程序为: MOV DPTR,#0FEFFH LP:MOVX A,@DPTR MOVX @DPTR,A SJMP LP

  6. 9.1.2 扩展8155可编程外围 并行接口芯片 关于Intel的8155/8156:是一多功能的可编程外围接口芯片,内部资源有256B的RAM,2个8位、1个6位的I/O口和1个14位的“减1”计数器。40脚双列直插封装。

  7. 1. 8155的结构与引脚

  8. 2. 8155的RAM和I/O口地址 其地址按片外RAM统一编址(16位)。 CE、IO/M接单片机的高8位地址。 一、I/O口(即片内寄存器)地址CE=0、IO/M=1,低3位选择寄存器

  9. 二、256B RAM的地址 CE=0、 ,由高8位地址控制;低8位选择RAM的256个存储单元。 3 8155的寄存器(6个)

  10. 输入 输出 PC3~PC5出 一、命令寄存器 地址:*****000B 工作控制

  11. 二、状态寄存器 1、地址:*****000B 2、格式及各位的意义

  12. 三、PA寄存器 是PA口引脚PA0~PA7的映射 地址:*****001B 四、PB寄存器 是PB口引脚PB0~PB7的映射 地址:*****010B 五、PC寄存器 是PC口引脚PC0~PC7的映射 地址:*****011B

  13. 六、定时器/计数器寄存器 是一14位计数器,对应有两个寄存器,最高两位设定输出波形。 1、地址:两个寄存器的地址分别为:*****100B 2、寄存器格式 *****101B

  14. M2M1的意义(决定输出波形):

  15. 4 8155芯片的使用 一、作片外256B RAM用 低8位地址范围为:00H~FFH 二、作扩展I/O口用 PA口、PB 口、PC 口 注意:工作方式、地址 三、作定时器扩展用 一般先写计数常数,再写命令字。

  16. 5 8031与8155的接口及简单编程 一、8031与8155的连接方法

  17. 二、8155的基本操作程序段 1、对8155中的RAM进行操作 例1 (1)向8155RAM中的5FH单元写入数据32H; (2)从8155RAM中的98H单元读取数据。 程序段如下: (1)写数据: MOV DPTR,#7E5FH MOV A,#32H MOVX @DPTR,A (2) 读数据: MOV DPTR,#7E98H MOVX A ,@DPTR

  18. 2、对8155中的I/O口和定时器进行操作 例2 设置8155,使用I/O口和定时器:使A口为基本输入方式,B口为基本输出方式;定时器作方波发生器,对输入的脉冲进行24分频。试编程实现之。 思路:先对定时器赋初值和设定输出波形,向定时器/计数器寄存器中写;再设定A、B口的工作方式和传输方向,并启动定时器工作,向命令寄存器中写。 程序段如下:

  19. (1)对定时器赋初值和设定输出波形: 定时器/计数器寄存器地址:7F04H、7F05H MOV DPTR,#7F04H MOV A,#24 MOVX @DPTR,A INC DPTR MOV A,#01000000B MOVX @DPTR,A (2)设定A、B口的工作方式并启动定时器工作: 命令寄存器地址:7F00H MOV DPTR,#7F00H MOV A,#11000010B MOVX @DPTR,A

  20. 9.2 人-机通道配置与接口技术 • 9.2.1 键盘接口及处理程序 • 9.2.2 LED显示器接口及显示程序 • 9.2.3 串行口控制的键盘/LED显示器接口电路

  21. 9.2.1 键盘接口及处理程序 • 键盘可以分为独立连接式和行列式(矩阵式)两类,每一类按其译码方法又都可分为编码及非编码两种类型. • 1)独立式非编码键盘接口及处理程序

  22. +5v P1.0 P1.1 P1.7 键盘接口形式: (1)独立式键盘电路: 独立式键盘电路:每个按键单独占有一根I/O接口引线。 优点:电路简单;缺点:当键数较多时,要占用较多的I/O线. 程序P/231

  23. “ 1 ” “ 0 ” 抖动时间 <10ms <10ms 开关动作时间 >100ms +5v I/O 接 口 单 片 机 & +5v 开关 消除抖动电路 & 后沿抖动 前沿抖动 检查键盘是否有键被按下,消除按键抖动。 硬件电路消除抖动或软件消除抖动。

  24. 下列程序为省略了软件去抖动措施的程序 P0F:LJMP PROM0 P1F:LJMP PROM1 ………. P7F:LJMP PROM7 PROM0:…. LJMP START PROM1:….. LJMP START ….. PROM7:…. LJMP START Start:mov a,#0ffh mov P1,a Mov a,P1 PL1:JNB ACC.0,P0f JNB ACC.1,P1F JNB ACC.2,P2F JNB ACC.3,P3F JNB ACC.4,P4F JNB ACC.5,P5F JNB ACC.5,P6F JNB ACC.6,P7F LJMP START

  25. 例9-1 :设计一个有4个独立式按键盘接口,并编写键扫 描程序 CPL A ANL A,#0FH KEY1:JNZ KEY1 LCALL D-10MS MOV A,B JB ACC.0,PKEY1 JB ACC.1,PKEY2 JB ACC.2,PKEY3 JB ACC.3,PKEY4 EKEY:RET PKEY1:LCALL K1 RET PKEY2:LCALL K2 RET PKEY3:LCALL K3 RET PKEY4:LCALL K4 RET D-10MS:MOVR7,#10H DS1:MOV R6,#0FFH DS2:DJNZ R6,DS2 DJNZ R7,DS1 RET KEY:MOV P1,#0FFH MOV A,P1 CPL A ANL A,#0FFH JZ KEY LCALL D-10MS MOV A,P1 CPL A ANL A,#0FH JZ KEY MOV B,A MOV A,P1

  26. C0 C1 R0 R1 +5v 键盘 I/O接口 0 1 (2)矩阵式键盘:

  27.   非编码式键盘识别按键的方法有两种: 一是行扫描法, 二是线反转法。 • 1) 行扫描法 • 通过行线发出低电平信号, 如果该行线所连接的键没有按下的话, 则列线所接的端口得到的是全“1”信号, 如果有键按下的话, 则得到非全“1”信号。  • 为了防止双键或多键同时按下, 往往从第 0 行一直扫描到最后 1 行, 若只发现 1 个闭合键, 则为有效键, 否则全部作废。 • 找到闭合键后, 读入相应的键值, 再转至相应的键处理程序。

  28. 2) 线反转法 线反转法也是识别闭合键的一种常用方法, 该法比行扫描速度快, 但在硬件上要求行线与列线外接上拉电阻。  先将行线作为输出线, 列线作为输入线, 行线输出全“0”信号, 读入列线的值, 然后将行线和列线的输入输出关系互换, 并且将刚才读到的列线值从列线所接的端口输出, 再读取行线的输入值。那么在闭合键所在的行线上值必为 0。这样, 当一个键被按下时, 必定可读到一对唯一的行列值。

  29. 键盘处理程序任务: 1.键输入: 检查键盘是否有键被按下,消除按键抖动。确定被按键的键 号,获取键号。 硬件电路消除抖动或软件消除抖动。 • 键译码: 键号为键盘位置码,根据键号查表得出被按键的键值。 键值:数字键0~9; 字符键0AH~0FH; 功能键10H~ 。 键码=行首键号+列号 (键号必须依次是从左至右书写) 或键码=列首键号+行号 (键号必须依次是从上至下书写)

  30. N 有按键信号? Y 延时等待10ms N 仍有按键信号? Y 键盘处理 N 按键释放? Y 3.键处理: 根据键值转移到不同程序段。 若键值属于数字、字符键,则调用显示数字和字符的子程序。 若键值属于功能键,则进行多分支转移,执行各个功能程序段。 二、键盘接口方法: 1、利用单片机本身的并行口; 2、利用单片机本身的串行口; 3、利用通用接口芯片8155、8255等; 4、利用专用接口芯片8279等。 三、键盘接口的控制方式: 1、随机方式:每当CPU空闲时执行键盘扫描程序。 2、中断方式:键的按下引起中断后,单片机对键盘进行扫描。 3、定时方式:单片机定时地对键盘进行扫描。

  31. 有按键输入? 延时消抖 确有按键? 键扫描求键号 延时等待 按键释放? 键译码求键值 是数字键? 跳转各功能程序 修改显示缓冲区 按键处理程序: N Y N Y N Y N Y

  32. 键码=行首键号+列号 (键号必须依次是从左至右书写) 或键码=列首键号+行号 (键号必须依次是从上至下书写) 6 7 0 1 14 15 8 9 接口应用: 1、使用8155作键盘接口: 扫描法:列线输出,行线输入。 列线逐列输出0,某行有按键,行线输入就为0; 若无按键,行线输入全部为1。 P2.7=0,P2.0=1: A口地址为:7F01H; C口地址为:7F03H。

  33. 2. 键盘接口电路 图 采用8155的键盘接口电路

  34. 判定有无键闭合的子程序: KS1: MOV DPTR,#7F01H MOV A,#00H ;A口送00H MOVX @DPTR,A INC DPTR INC DPTR ;建立C口地址 MOVX A,@DPTR ;读C口 CPL A;A取反,无键按下则全“0” ANL A,#0FH ;屏蔽A高半字节(C口只4位) RET 执行KS1子程序的结果是:有闭合键则(A)≠ 0; 无闭合键则(A)=0。 CPL A;负逻辑不直观,常采取行列线加反相器或 软件求反的方法把键盘改成正逻辑。

  35. KEY1:ACALL KS1 ;调用判断有无键按下子程序 JNZ LK1 ;有键按下时,(A)≠0转消抖延时 KEY2:ACALL TM6ms AJMP KEY1 ;无键按下返回 LK1: ACALL TM12ms ;调12 ms延时子程序 ACALL KS1 ;查有无键按下,若有则真有键按下 JNZ LK2 ;键(A)≠ 0逐列扫描 AJMP KEY2 ;不是真有键按下,返回 LK2:MOV R2,#0FEH ;初始列扫描字(0列)送入R2 MOV R4,#00H ;初始列(0列)号送入R4 LK4:MOV DPTR,#7F01H ;DPTR指向8155PA口 MOV A,R2 ;列扫描字送至8155PA口 MOVX @DPTR,A INC DPTR ;DPTR指向8155PC口 INC DPTR 键盘扫描子程序如下:(硬件线路如图,8155的A口、B口、C口和控制口地址分别为7F01H、7F02H、7F03H,设8155A已在主程序中初始化。已设定为A口方式0输出,C口的低4位方式0输入。)

  36. MOVX A,@DPTR ;从8155 PC口读入行状态 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 ;键未释放,等待 POP ACC ;键释放,键码→A RET ;键扫描结束,出口状态(A)=键码

  37. NEXT: INC R4 ;准备扫描下一列,列号加1 MOV A,R2 ;取列扫描字送累加器A JNB ACC.7,KEND ;判断8列扫描否?扫描完返回 RL A ;扫描字左移一位,变为下一列扫描字 MOV R2,A ;扫描字送入R2保存 AJMP LK4 ;转下一列扫描 KEND:AJMP KEY1 KS1: MOV DPTR,#7F01H;DPTR指向8155PA口 MOV A,#00H ;全扫描字→A MOVX @DPTR,A ;全扫描字送往8155PA口 INC DPTR ;DPTR指向8155PC口 INC DPTR MOVX A,@DPTR ;读入PC口行状态 CPL A ;变正逻辑,以高电平表示有键按下 ANL A,#0FH ;屏蔽高4位,只保留低4位行线值 RET ;出口状态:(A)≠0时有键按下

  38. TM12ms:MOV R7,#18H ;延时12 ms子程序 TM: MOV R6,#0FFH TM6: DJNZ R6,TM6 DJNZ R7,TM RET TM6ms: MOV R7,#0CH ;延时6 ms子程序 TM2: MOV R6,#0FFH TM62: DJNZ R6,TM6 DJNZ R7,TM RET

  39. 2、使用8279作键盘接口:P207图7.36 74LS156为双2-4译码器/分配器 0 1 3 4 8 6 5 7 键码=行首键号+列号 (键号必须依次是从左至右书写) P2.7=0时: A0=P2.0=1:命令口地址为:7FFFH; A0=P2.0=0:数据口地址为:7EFFH。 (程序略)

  40. 3、使用中断方式作键盘接口: 12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 键码=列首键号+行号 (键号必须依次是从上至下书写) 当有键按下时,INT1为低,向CPU发出中断申请,在中断服务 程序中除完成键识别、键功能处理外,仍须有清除键抖动等功能。

  41. BUFF EQU 30H • KEYADR:MOV A,SBUF • CJNE A,#0FH,KYARD1 • AJMP DIGPRO • KYARD1:JC DIGPRO • KEYTBL:MOV DPTR,#JMPTBL • CLR C • SUBB A,#10H • RL A • JMP @A+DPTR • JMPTBL:AJMP AAA • AJMP BBB • AJMP CCC • AJMP DDD • …….

  42. 下面的程序是用行扫描法进行键扫描的程序, 其中KS1 为判键闭合的子程序。 有键闭合时(A)=0。 DIR为数码显示器扫描显示子程序, 执行一遍的时间约6 ms。 程序执行后, 若键闭合, 键值存入A中, 键值的计算公式是: 键值=行号×4+列号; 若无键闭合, 则A中存入标志FFH。 KEY1:LCALL KS1 ; 检查有无闭合键? JNZ LK1 ; (A)=0, 有键闭合则转 LJMP LK8 ; 无闭合键则返回  LK1: LCALL DIR ; 延时 12 ms LCALL DIR ; 清抖 LCALL KS1 ; 再检查有键闭合否? JNZ LK2 ; 有键闭合则转 LJMP LK8 ; 无键闭合则返回

  43. LK2: MOV R3, #00H ; 行号初值送R3 MOV R2, #FEH ; 行扫描初值送R2 LK3: MOV DPTR, #0101H ; 指向 8155 口A MOV A, R2 ; 行扫描值送A MOVX @DOTR, A ; 扫描 1 行 INC DPTR INC DPTR ; 指向 8155 口C MOVX A, @DPTR ; 读入列值 ANL A, #0FH ; 保留低 4 位 MOV R4, A ; 暂存列值 CJNZ A, #0FH, LK4 ; 列值非全“1”则转 MOV A, R2 ; 行扫描值送A

  44. JNB ACC.7, LK8 ; 扫至最后一行则转 • RL A ; 未扫完, 则移至下一行 • MOV R2, A ; 行值存入R2 中 • INC R3 ; 行号加 1 • SJMP LK3 ; 转至扫描下一行 • LK4: MOV A, R3 ; 行号送入A • ADD A, R3 ; 行号×2 • MOV R5, A  • ADD A, R5 ; 行号×4 • MOV R5, A ; 存入R5 中 • MOV A, R4 ; 列值送A

  45. LK5: RRC A ; 右移一位 JNC LK6 ; 该位为 0 则转 INC R5 ; 列号加 1 SJMP LK5 ; 列号未判完则继续 LK6: MOV 20H, R5; 存键值 LK7: LCALL DIR ; 扫描一遍显示器 LCALL KS1 ; 发扫描信号 JNZ LK7 ; 键未释放等待 LCALL DIR ; 键已释放 LCALL DIR ; 延时 12 ms, 清抖 MOV A, 20H ; 键值存入A中 KND: RET

  46. LK8: MOV A, #FFH ; 无键标志FFH存入A中 RET  KS1: MOV DPTR, #0101H ; 判键子程序 MOV A, #00H ; 全扫描信号 MOVX @DPTR, A ; 发全扫描信号 INC DPTR INC DPTR ; 指向8155口C MOVX A, @DPTR ; 读入列值 ANL A, #0FH ; 保留低4位 ORL A, #F0H ; 高4位取“1” CPL A ; 取反, 无键按下则全“0” RET

  47. 9.2.2 LED显示器接口及显示程序 1. LED显示器结构与原理

  48. 各段码位的对应关系如下:

  49. 表 十六进制数及空白与P的显示段码

More Related