第六章 单片机
单片机原理及应用第6章80C51单片机的串行口

单片机原理及应用第6章80C51单片机的串行口80C51单片机是一种基于哈佛架构的8位单片机,具有强大的串行口功能。
串行口是一种通信接口,可以通过单根线传输数据。
本章将介绍80C51单片机的串行口原理及其应用。
一、80C51单片机的串行口原理80C51单片机的串行口包含两个寄存器,分别是SBUF(串行缓冲器)和SCON(串行控制寄存器)。
SBUF寄存器用来存储待发送或接收到的数据,SCON寄存器用来配置和控制串行口的工作模式。
80C51单片机的串行口有两种工作模式:串行异步通信模式和串行同步通信模式。
1.串行异步通信模式串行异步通信是指通信双方的时钟频率不同步,通信的数据按照字符为单位进行传输,字符之间有起始位、数据位、校验位和停止位组成。
80C51单片机的串行口支持标准的RS-232通信协议和非标准通信协议。
在串行异步通信模式下,SCON寄存器需要配置为相应的工作模式。
首先,需要选择串行口的工作模式。
80C51单片机支持第9位,即扩展模式,可以用来检测通信错误。
其次,需要设置波特率。
波特率是指数据每秒传输的位数,用波特率发生器(Baud Rate Generator,BRGR)来控制。
然后,需要设置起始位、数据位和停止位的配置,包括数据长度(5位、6位、7位或8位)、停止位的个数(1位或2位)。
在发送数据时,将待发送的数据通过MOV指令传送到SBUF寄存器,单片机会自动将数据发送出去。
在接收数据时,需要检测RI(接收中断)标志位,如果RI为1,表示接收到数据,可以通过MOV指令将接收到的数据读取到用户定义的变量中。
2.串行同步通信模式串行同步通信是指通信双方的时钟频率同步,在数据传输时需要时钟信号同步。
80C51单片机的串行同步通信支持SPI(串行外设接口)和I2C(串行总线接口)两种协议。
在串行同步通信模式下,SCON寄存器需要配置为相应的工作模式。
首先,需要选择串行口的工作模式。
80C51单片机支持主从模式,可以作为主设备发送数据,也可以作为从设备接收数据。
单片机第六章定时器

这种方式下,计数寄存器由13位组成,即THx高八位(作计数器)
和TLx的低5位构成。TLx的高3位未用。
计数时,TLx的低5位溢出后向THx进位,THx溢出后 将TFx置位,并向CPU申请中断。
用软件控制,置 l时,启动 T1;清0时,停止 T1。
TF0(TCON.5)——T0的溢出标志。
TR0(TCON.4)——T0的运行控制位。
用软件控制,置1时,启动T0;清 0时,停止 T0。
• IE1(TCON.3)——外部中断1中断请求标志位。
• IE0(TCON.1)——外部中断0中断请求标志位。
器之外,还可用作串行接口的波特率发生器。
6.2
定时器/计数器T0、T1
T0、T1 的内部结构简图示于图6-1中。从图中 可以看出,T0、T1由以下几部分组成:
• 计数器TH0、TL0和TH1、TL1;
•
•
特殊功能寄存器TMOD、TCON;
时钟分频器;
•
输入引脚T0、T1。
6.2.1 与定时器/计数器T0、T1有关的 特殊功能寄存器
⑵定时器/计数器T1
T0方式3时,T1可以工作在方式0、1、2三种方式 T1的结构如图6–6所示。 由于T0占用了原来T1的启动位TR1和溢出标志TF1, 所以此时T1溢出时不能置位溢出标志,不能申请中断, 其溢出信号送给串行口,此时T1作为波特率发生器。
T1的启停由写入方式字控制,当写入方式0/1/2 时,T1立即启动,写入方式3 时,立即停止工作。
分析:设置T0工作在方式2,计数功能,每记满100个外 部脉冲,从P1.0输出一个低电平脉冲信号(简化的打包 操作)。
单片机教程 第6章-中断系统

TCON位功能:
TF0/TF1:定时器溢出中断申请标志位: =0:定时器未溢出; =1:定时器溢出申请中断,进中断后自动清零。
③ IE1 —— 外中断中断请求标志 当P3.3引脚信号有效时,IE1=1 ④ IE0 —— 外中断中断请求标志 当P3.2引脚信号有效时,IE0=1
IE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。
=1:在INT0/INT1端申请中断的信号负跳变有效.
6.2
51单片机的中断系统
3、串行口中断设定
串行控制寄存器SCON控制字,字节地址:98H
SCON 位名称 位地址 功能 D7 D6 — — — — — — D5 — — — D4 — — — D3 — — — D2 — — — D1 TI 99H 串行发送 中断标志 D0 RI 98H 串行接收 中断标志
6.1
中断的概念
6.1.3 中断的分类 可分为三类: * 可屏蔽中断:由CPU的可屏蔽中断引脚INT引起的 中断。 * 非屏蔽中断:由CPU的非屏蔽中断引脚NMI引起的 中断(8086CPU)。 * 软件中断:由中断指令引起的中断(8086CPU)。 • 51单片机的中断可以分为:
①外部中断,由外部可屏蔽中断和外部计数器中断组成; ②内部中断,由内部定时器、串口传输中断等组成。
输入引脚。允许用户设定外部中断源以低电平或 者是负跳变方式触发。
6.2
51单片机的中断系统
②定时器溢出中断源:内部中断,51内部有两
个16位定时/计数器,它们由内部定时脉冲(主脉 冲12分频)或外部引脚T0、T1输入的外部计数脉 冲计数。当计数值溢出时,产生中断请求。这两 个16位定时/计数器的初值可由用户设定。
单片机原理及其接口技术--第6章 MCS-51单片机定时器计数器

单片机原理及其接口技术
T/C方式2的逻辑结构图
1
TH1/TH0
T8
T7
T6
T5
T4
T3
T2
T1
寄存器 计数器
束
TL1/TL0
T8
T7
T6
T5
T4
T3
T2
T1
主目录
上一页
下一页
结
单片机原理及其接口技术
4、方式3 M1M0=11 T0和T1有不同的工作方式
C/T0:
TH0和TL0被拆成2个独立的8位计数器。
28),向CPU申请中断,标志位TF1自动置位,若中
断是开放的,则CPU响应定时器中断。当CPU响应
中断转向中断服务程序时,由硬件自动将该位清0。
&
加1计数器 & 1
主目录
上一页
下一页
结
束
EA
ET1
单片机原理及其接口技术
2个模拟的位开关,前者决定了T/C的工作状态:当1单片机有2个特殊功能寄存器TCON和TMOD: TCON:用于控制定时器的启动与停止,中断标志。 TMOD:用于设置T/C的工作方式。
主目录
上一页
下一页
结
束
单片机原理及其接口技术
1.定时器控制寄存器TCON
88H TCON
位地址
D7
D6
D5
D4
D3
D2
D1
D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 8F 8E 8D 8C 8B 8A 89 88
过实时计算求得对应的转速。
主目录 上一页 下一页 结 束
单片机原理及其接口技术 对于定时/计数器来说,不管是独立的定时器芯片还是单
单片机原理及应用教程(C语言版)-第6章 MCS-51单片机的定时器计数器

6.1.1 单片机定时器/计数器的结构
MCS-51单片机定时器/计数器的原理结构图
T0(P3.4) 定时器0 定时器1 T1(P3.5) 定时器2 T2EX(P1.1)
T2(P1.0)
TH0
溢 出 控 制
TL0
模 式 溢 出
TH1
控 制
TL1
模 式 溢 出
TH2
TL2
重装 捕获
RCAP 2H
RCAP 2L
6.2.2 T0、T1的工作模式
信号源 C/T设为1,为计数器,用P3.4引脚脉冲 C/T设为0,为定时器,用内部脉冲 运行控制 GATE=1,由外部信号控制运行 此时应该设置TR0=1 P3.2引脚为高电平,T0运行 GATE=0, 由内部控制运行 TR0设置为1,T0运行
6.2.2 T0、T1的工作模式
6.2.3 T0、T1的使用方法
例6-1 对89C52单片机编程,使用定时器/计 数器T0以模式1定时,以中断方式实现从P1.0引 脚产生周期为1000µ s的方波。设单片机的振荡频 率为12MHz。 分析与计算 (1)方波产生原理 将T0设为定时器,计算出合适的初值,定 时到了之后对P1.0引脚取反即可。 (2)选择工作模式 计算计数值N
6.2.1 T0、T1的特殊功能寄存器
TR1、TR0:T1、T0启停控制位。 置1,启动定时器; 清0,关闭定时器。
注意: GATE=1 ,TRx与P3.2(P3.3)的配合控制。
IE1、IE0:外部中断1、0请求标志位 IT1、IT0:外部中断1、0触发方式选择位
6.2.2 T0、T1的工作模式
6.2.1 T0、T1的特殊功能寄存器
GATE=0,禁止外部信号控制定时器/计数器。 C/T——定时或计数方式选择位 C/T=0,为定时器;C/T=1,为计数器 计数采样:CPU在每机器周期的S5P2期间,对 计数脉冲输入引脚进行采样。
第六章 MCS-51单片机内部定时器

6.3.1 模式0及应用
在这种模式下,16位寄存器只用了13位。 其中,TL0的高3位未用,TH0占8位。当 TL0的低5位溢出时,向TH0进位。当TH0 溢出时,向中断标志位TF0进位,并申请中 断。 因此,可通过查询TF0 是否置位或考 察中断是否发生来判断定时器/计数器0的 操作完成与否。
(2)计算1ms定时T0的初值:
机器周期为(1/fOSC)×12=[1/(12×106)]×12=1μs, 设T0的 计数初值为X,则 (213-X)×1×10-6=1×10-3ms
X=213-1×10-3/(1×10) -6 =8192-1000=7192D=1110000011000
高8位: E0H 低5位: 18H
fosc=12MHz, 采用查询方式。
解:方波周期 T=1/100Hz=0.01s=10ms 用T1定时5ms 计数初值 X为: X=216-12×5×103/12=60536=EC78H 程序如下:
MOV TMOD, #10H ;T1模式1,定时方式
SETB TR1 LOOP:MOV TH1,#0ECH
例:晶振为12MHZ ,则计数周期为
T=12/(12*106)Hz =1微秒
最短的定时 周期
计数器工作方式:
当定时器/计数器为计数工作方式时,通过
引脚T0和T1对外部信号计数,外部脉冲的下降
沿触发计数
在每个机器周期的
采样过程:
S5P2期间采样引脚
当输入脉冲信号从1到0的负跳变时,计数器就 自动加1。 由于检测一个由1到0的跳变需要两 个机器周期,所以 计数的最高频率为振荡频 率的1/24。为了确保给定电平在变化前至少被 采样一次,外部计数脉冲的高低电平均需保持 一个机器周期以上。(占空比没有限制)
第六章_单片机最小系统

2. 键盘的查询与中断
3. 键盘管理中的键输入与键操作
7.2.3 并行I/O口扩展的LED显示电路 1. LED 显示器及显示原理 (1)LED显示器结构 (2) 显示器原理与显示段码 2. LED显示器显示方式
7.3 并行总线外围扩展技术 7.3.1 并行总线扩展基本问题 1. 并行总线扩展电路设计
80C51单片机最小系统
1、最小系统概念 最小系统概念
单片机最小系统,或者称为最小应用系统 是指用最少的元 单片机最小系统 或者称为最小应用系统,是指用最少的元 或者称为最小应用系统 件组成的单片机可以工作的系统.最小系统结构与单片机的 件组成的单片机可以工作的系统 最小系统结构与单片机的 类型有关。 类型有关。 对51系列单片机来说 最小系统一般应该包括 单片机、晶 系列单片机来说,最小系统一般应该包括 单片机、 系列单片机来说 最小系统一般应该包括:单片机 振电路、复位电路、按键输入、显示输出等。 振电路、复位电路、按键输入、显示输出等。
外部时钟 XTAL1 XTAL2
XTAL2
15~45pf× 15~45pf×2
1~12MHz(MCS-51) 12MHz(MCS-51) 24MHz(Atmel-89C) 0~24MHz(Atmel-89C)
(1)片内时钟振荡器与外部谐振电路 片内振荡器与外部谐振叫路构成了一个并联谐振的时钟 振荡电路。PD端可由内部软件编程来控制振荡电路的 启停。
(4) 电源监测复位 4. 应用系统中多复位要求的处理
第7章
• 单片机的并行扩展技术
7.1 并行外围扩展方式 有I/O方式和总线方式 7.1.1 并行I/O口与并行扩展总线 1. 两种扩展方式
2. 扩展方式选择 主要由所选择的外围器件决定。 3. 并行总线的I/O虚拟 通过I/O口虚拟总线时序及操作控制方式来扩展并 行总线接口。 7.1.2 并行I/O的扩展特性 输出锁存、握手交互、指令控制实现的时序协议 7.1.3 并行总线扩展特性 三态输出、时序交互、总线协议的CPU的时序自 动运行
第6章 MCS-51单片机系统扩展技术

6.3 数据存储器扩展
6.3.1 静态RAM扩展电路
6.3.2 动态RAM扩展电路
返回本章首页
6.3.1 静态RAM扩展电路
常用的静态RAM芯片有6116,6264,62256等,其 管脚配置如图6-13所示。
1.6264静态RAM扩展 额定功耗200mW,典型存取时间200ns,28脚双列直插 式封装。表6-1给出了6264的操作方式,图6-14为6264静 态RAM扩展电路。
图 6 9
A EEPROM
28 17
扩 展 电 路
写入数据
不是指令
查询 中断 延时
2.2864A EEPROM 扩展
2864A有四种工作方式: (1)维持方式 (2)写入方式 (3)读出方式 (4)数据查询方式
图 6 12
28 64
返回本节
A EEPROM
扩 展 电 路
串行E2PROM简介 串行E2PROM占用引线少、接线简单,适用于作为数据存储 器且保存信息量不大的场合。 以AT93C46/56/57/66为例,它是三线串行接口E2PROM, 能提供128×8、256×8、512×8或64×16、128×16、256×16 位,具有高可靠性、能重复擦写100,000次、保存数据100年 不丢失的特点,采用8脚封装。
第6章 MCS-51单片机系统扩展技术
6.1 MCS-51单片机系统扩展的基本概念
6.2 程序存储器扩展技术
6.3 数据存储器扩展 6.4 输入/输出口扩展技术
T0 T1
时钟电路
ROM
RAM
定时计数器
CPU
并行接口 串行接口 中断系统
P0 P1 P2 P3
TXD RXD
INT0 INT1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV A,R2 ;取出此次行扫描值 KEY1:LCALL KS1 ;查有无键闭合 JNB ACC.7,LK8 ;若已扫过最后 JNZ LK1 ;有键闭合转消颤 一行就退出扫描,否则扫下一行。 LJMP LK8 ;无键闭合则退出 RL A ;Acc中的“0”左移一位 LK1:LCALL DL6ms ;消颤12ms MOV R2,A ;新扫描值仍存进R2 LCALL DL6ms INC R3 ;行号加1指向下一行 LCALL KS1 ;再查有无键闭合 SJMP LK3 ;转LK3去扫描下一行 JNZ LK2 ;的确有,转处理 LJMP LK8 ;确实无,退出去 LK2:MOV R3,#00H ;(R3)←行号初值 @ 行号:第0行—第7行→(R3) MOV R2,#0FEH;(R2)←行扫描初值 (0,1,2,3,4,5,6,7) LK3:MOV DPTR #0101H;指向8155 A口 @ 行扫描值: 0FEH→ (R2) MOV A, R2 ;取行扫描值 MOVX,@DPTR,A ;送到行线上去 (FE,FD,FB,F7,EF,DF,BF,7F) INC DPTR FEH = 1111 1110 B(首次扫描) INC DPTR ;指向8155 C口 …………… MOVX A,@DPTR ;读列线的电平 BFH = 1011 1111 B (7次扫描) ANL A,#0FH ;保留C口低4位 7FH = 0111 1111 B (8次扫描) MOV R4,A ;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 注意: 表明此次送0的行有键按下,转LK4处理, 只有第8次扫描值最高位= 0 若=全1,表明此次送0的行无键按下。
按键组连接方式:独立连接键盘与矩阵连接键盘
独立连接键盘: 每键相互独立,各自与一条I/O线相 连,CPU可直接读取该I/O线的高/低电平状态。 特点:占I/O口线多,但判键速度快,多用于设置控 制键、功能键。适用于键数少的场合。 矩阵连接键盘: 键按矩阵排列,各键处于矩阵行/列 的结点处,CPU通过对连在行(列)的I/O线送已知电平 的信号,然后读取列(行)线的状态信息。逐线扫描, 得出键码。 特点:键多时占用I/O口线少,但判键速度慢,多用于 设置数字键。适用于键数多的场合。
KEY1:LCALL JNZ LJMP LK1:LCALL LCALL LCALL JNZ LJMP
KS1 ;查有无键闭合 LK1 ;有键闭合转消颤 LK8 ;无键闭合则退出 DL6ms ;消颤12ms DL6ms KS1 ;再查有无键闭合 LK2 ;的确有,转处理 LK8 ;确实无,退出去
查有无键闭合的子程序KS1:
第六章:
单片机的典型外围接口接术
本讲重点: 键盘接口(键盘种类,矩阵键盘的行扫描与 线反转法的电路、原理与编程); LED显示接口(动态与静态,硬件译码与 软件译码,电路与编程应用).
扩展键盘接口
键盘接口
键盘 单片机系统中完成控制参数输入及修改的基本输 入设备,是人工干预系统的重要手段。
单片机与计算机在键盘规模/键符设置等方面差别 很大。
键盘接口程序应具有如下功能:
(1)键扫描功能。即检测是否有键按下。 (2)键识别功能。确定被按下键所在的行列 位置。 (3)产生相应键的代码(键值)。 (4)消除按键弹跳以及能够识别多键及串键 (复合按键)。
软件消除抖动
有按键信号? N Y 延时等待10ms 仍有按键信号? N Y 键盘处理 按键释放? Y 消抖动程序框图 N
独立连接式键盘例1:
KEY:
P1.0 P1.1 P1.2 P1.3
51单片机
JNB JNB JNB JNB RET FUNC1: …… RET FUNC2: …… RET FUNC3: …… RET FUNC4: …… RET
P1.0,FUNC1 ;逐键判别 P1.1,FUNC2 P1.2,FUNC3 P1.3,FUNC4 ;无任何键按下由此返回 ;做P1.0要求的“功能1” ;做P1.1要求的“功能2” ;做P1.2要求的“功能3” ;做P1.3要求的“功能4”
矩阵式键盘名词注释
7行 @ 行号:第0行—第7行→R3 6行 (0,1,2,3,4,5,6,7) 5行 @ 行首值:(R3) X 4→ R5 4行 行 (0,4,8,12,16,20,24,28) 线 3行 @ 列值:C口低4位读进值→R4 2行 (0F,0E,0D,0B,07) 1行 0F:表示此行无键按下。 0行 0E—07:表示此行的0—3列 有键按下。 0列 1列 2列 3列 @ 键值:查得最后结果→ R5 列线 等于已知按键所在的行首值, 矩阵式键盘工作原理:先由行线 再加上所在列的序号。 同一行中,键值等于行首值 送出数据,送全“0”或每次只送 一位“0”;然后读进列线,判 连续依次加 1。 有无键按下或按键的位置并算出 键值。顺序扫描。
KEY1:LCALL KS1 ;查有无键闭合 JNZ LK1 ;有键闭合转消颤 LJMP LK8 ;无键闭合则退出 LK1:LCALL DL6ms ;消颤12ms LCALL DL6ms LCALL KS1 ;再查有无键闭合 JNZ LK2 ;的确有,转处理 LJMP LK8 ;确实无,退出去 LK2:MOV R3,#00H ;(R3)←行号初值 MOV R2,#0FEH;(R2)←行扫描初值 LK3:MOV DPTR #0101H;指向8155 A口 MOV A, R2 ;取行扫描值 MOVX @DPTR,A ;送到行线上去 INC DPTR INC DPTR ;指向8155 C口 MOVX A,@DPTR ;读列线的电平 ANL A,#0FH ;保留C口低4位 MOV R4,A ;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 若=全1,表明此次送0的行无键按下。
键盘分类 @ 按键值编码方式分 编码键盘与非编码键盘。 @ 按键组连接方式分 独立连接键盘与矩阵连接键盘。
按键值编码方式:编码键盘与非编码键盘
编码键盘: 采用专用的编码/译码器件,被按下的键 由该器件译码输出相应的键码/键值。 特点:增加了硬件开销,编码因选用器件而异,编 码固定,但编程简单。适用于规模大的键盘。 非编码键盘: 单片机系统多采用此类键盘 采用软件编/译码的方式,通过扫描,对每个被按下 的键判别输出相应的键码/键值。 特点:不增加硬件开销,编码灵活,适用于小规模 的键盘,特别是单片机系统。但编程较复杂,占CPU 时间时)调用,否则可能 漏判。4个键的优先级由指令顺序决定。
独立连接式键盘例2 ORG 0003H LJMP KEY ………… KEY: JNB P1.0,FUNC1 ;逐键判别 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.3,FUNC4 RETI ;无任何键按下由此返回 FUNC1: …… ;做P1.0要求的“功能1” RETI FUNC2: …… ;做P1.1要求的“功能2” RETI FUNC3: …… ;做P1.2要求的“功能3” RETI FUNC4: …… ;做P1.3要求的“功能4” RETI
MOV A,R2 ;取出此次行扫描值 JNB ACC.7,LK8 ;若已扫过最后 一行就退出扫描,否则扫下一行。 RL A ;Acc中的“0”左移一位 MOV R2,A ;新扫描值仍存进R2 INC R3 ;行号加1指向下一行 SJMP LK3 ;转LK3去扫描下一行 LK4:MOV ADD MOV ADD MOV MOV A, R3;此行有按键,取行号 A, R3 ;行号乘 4 R5, A ;得行首值 A, R5 ;即:0,4,8,12… R5, A ;暂存进 R5
KS1:MOV DPTR,#0101H ;指向 A口 MOV A, #00H ;8条行线都送0 MOVX @DPTR,A;送到行线上去 INC DPTR INC DPTR ;指向 C口 MOVX A,@DPTR ;读列线的电平 ANL A,#0FH ;保留C口低4位 若确有键按下,则Acc中必有“0” ORL A,#0F0H ;将Acc高4位赋1 CPL A ;Acc取反后,高4位=0; 若有键按下,则低4位中必有“1” RET
MOV A,R2 ;取出此次行扫描值 KEY1:LCALL KS1 ;查有无键闭合 JNB ACC.7,LK8 ;若已扫过最后 JNZ LK1 ;有键闭合转消颤 一行就退出扫描,否则扫下一行。 LJMP LK8 ;无键闭合则退出 RL A ;Acc中的“0”左移一位 LK1:LCALL DL6ms ;消颤12ms MOV R2,A ;新扫描值仍存进R2 LCALL DL6ms INC R3 ;行号加1指向下一行 LCALL KS1 ;再查有无键闭合 SJMP LK3 ;转LK3去扫描下一行 JNZ LK2 ;的确有,转处理 LJMP LK8 ;确实无,退出去 LK2:MOV R3,#00H ;(R3)←行号初值 LK4:MOV A, R3;此行有按键,取行号 MOV R2,#0FEH;(R2)←行扫描初值 ADD A, R3 ;行号乘 4 LK3:MOV DPTR #0101H;指向8155 A口 MOV R5, A ;得行首值 MOV A, R2 ;取行扫描值 ADD A, R5 ;即:0,4,8,12… MOVX,@DPTR,A ;送到行线上去 MOV R5, A ;暂存进 R5 INC DPTR INC DPTR ;指向8155 C口 MOVX A,@DPTR ;读列线的电平 ANL A,#0FH ;保留C口低4位 MOV R4,A ;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 若=全1,表明此次送0的行无键按下。
7行 6行 5行 4行 3行 2行 1行
行 线
检查的结果(出口): 若(A)≠0,则有键按下; 若(A)=0,则无键按下。
0行
0列 1列 2列 3列
列线
KEY1:LCALL KS1 ;查有无键闭合 @ 行号:第0行—第7行→(R3) JNZ LK1 ;有键闭合转消颤 LJMP LK8 ;无键闭合则退出 (0,1,2,3,4,5,6,7) LK1:LCALL DL6ms ;消颤12ms @ 行扫描值: 0FEH →(R2) LCALL DL6ms (FE,FD,FB,F7,EF,DF,BF,7F) LCALL KS1 ;再查有无键闭合 FEH = 1111 1110 B(首次扫描) JNZ LK2 ;的确有,转处理 FDH = 1111 1101 B (2次扫描) LJMP LK8 ;确实无,退出去 FBH = 1111 1011 B (3次扫描) LK2:MOV R3,#00H ;(R3)←行号初值 MOV R2,#0FEH;(R2)←行扫描初值 F7H = 1111 0111 B (4次扫描) LK3:MOV DPTR #0101H;指向8155 A口 EFH = 1110 1111 B (5次扫描) MOV A, R2 ;取行扫描值 DFH = 1101 1111 B (6次扫描) MOVX @DPTR,A ;送到行线上去 BFH = 1011 1111 B (7次扫描) INC DPTR 7FH = 0111 1111 B (8次扫描) INC DPTR ;指向8155 C口 MOVX A,@DPTR ;读列线的电平 @ 列值: (0F,0E,0D,0B,07) ANL A,#0FH ;保留C口低4位 从C口低4位读进 → (R4) MOV R4,A ;列值暂存进R4 0F:表示此行无键按下。 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 0E—07:此行的0—3列有键按下。 若=全1,表明此次送0的行无键按下。