第五课 单片机的内部结构 三
上一课中 我们提到了 DJNZ R6 #250 这条指令被执行了 250*250=62500 次 就产生了延时 那
么这个时间是多少呢 它又是如何计算出来的呢 这一课就来讨论这个问题
一 单片机的时序
1 时序的由来
我们已经知道单片机执行指令的过程就是顺序地从 ROM程序存储器中取出指令一条一条的顺 序执行 然后进行一系列的微操作控制 来完成各种指定的动作 它在协调内部的各种动作时必须要有
一定的顺序 换句话说 就是这一系列微操作控制信号在时间上要有一个严格的先后次序 这种次序就
是单片机的时序 这就好比我们学校上课时用的电铃 为了保证课堂秩序 学校就必须在铃声的统一协 调下安排各个课程和活动 那么单片机的时序是如何规定的呢 接着往下看
2 时序的周期
计算机每访问一次存储器的时间 我们把它称为一个机器周期 它是一个时间基准 就象我们日
常生活中使用的秒一样 计算机中一个机器周期包括 12 个振荡周期 什么是振荡周期 一个振荡周期 是多少时间 振荡周期就是振荡源的周期 也就是我们使用的晶振的时间周期 一个 12M 的晶振 它的
时间周期是多少呢 电子技术过的朋友应该不难算出T=1/f也就是 1/12微秒那么使用 12M 晶 振的单片机 它的一个机器周期就应该等于 12*1/12微秒也就是 1 S
在 89C51 单片机中 有些指令只要一个机器周期 而有些指令则需要两个或三个机器周期 另外
还有两条指令需要 4 个机器周期 这也不难理解 你在家擦地板的话总比擦桌子的时间要长 不过我可 是大男子主义 从来不做家务的 开句玩笑 如何衡量指令执行时间的长短 我们就要用到一个新的
概念 指令周期—即执行一条指令所需的机器周期 INTEL 公司规定了每一条指令执行的机器周期 当 然这不需要我们非把它记住 不过在这里 DJNZ 指令我们是要记住的 它是双周期指令 执行一次需要
两个机器周期 即 2 S 12M 晶振的话回到我们上一课的实验 延时的时间就应该算出来了吧 是
62500*2 S=125000 S 也就是 125mS 这么大的数字也就 0.125S 怪不得 LED1 闪烁的这么快 这里 给大家出个题目 在上一课的实验中 如何延长闪烁的时间 想想看 怎么做 当然 不会也没关系
二 单片机的时钟电路
大家已经知道 单片机是在一定的时序控制下工作的 那么时序和时钟又有什么关系呢 时钟是
时序的基础 单片机本身就如同一个复杂的同步时序电路 为了保证同步工作方式的实现 电路就要在 唯一的时钟信号控制下按时序进行工作 那么单片机内的时钟是如何产生的呢
1 内部时钟电路
18
----------------
在 MCS-51 单片机的内部有一个高增益的反相放大器 其输入端为引脚 XTAL119 脚输出端为
XTAL218 脚我们只要在外部接上两个电容和一个晶振 就能构成一个稳定的自激振荡器 它的内 部电路的工作原理就不介绍了 这里主要讲一下电容和晶振的选择 看上面的图 晶振的大小与单片机
的振荡频率有关 我们到串行接口时再详细讲解 电容的大小影响着振荡器振荡的稳定性和起振的快速
性 通常选择 10-30P 的瓷片电容或校正电容 另外在设计电路时 晶振和电容应尽可能的靠近芯片
以减少 PCB 板的分布电容保证振荡器工作的稳定性 提高系统的抗干扰能力
2 外部时钟电路
除了内部时钟方式外 单片机还可以采用引入外部时钟的振荡方式 什么时候需要采用外部时钟 方式呢 当我们的系统由多片单片机组成时 为了保证各单片机之间时钟信号的同步 就应当引入唯一 的公用的外部脉冲信号作为各单片机的振荡脉冲 此时应将 XTAL2 悬空不用 外部脉冲信号由 XTAL1 引
入 如上右图所示 这是大虾们的作品 在此就不介绍了
三 本课总结
本课的内容比较少 我就罗嗦一下 讲几句题外话 我是一个只有初中毕业 没有读过多少书的
人 从小就爱好无线电 记得很小的时候 当通讯兵的父亲带回来几本电子方面的书籍 从此就迷上了 无线电 那种痴迷程度决不亚于现在的小孩迷恋游戏机 至今仍然清楚的记得 曾经因为装成功一台 6 管收音机而兴奋的几天几夜没睡好觉 那个时候 我国的电子工业还刚刚起步 买一个 3AX31 的三极管 都要特地跑到市区 而且价格奇贵 几乎要用去一个月的零化钱 当时最愿意去的地方就是上海的虬江 路电子旧货市场 因为在那里可以淘到好多旧的电子元件 初中毕业以后 在当地根本就找不到一家电 子企业 只好在镇上开了一家电器修理店 也就是这几年 边干边做地学了不少在今天已根本无法再学 得进去的 电子啊 空穴啊 移位啊 寄存啊 等等理论知识 由于身边没有一个可以请教的老师 为 了加深学习的印象 所以只好一边做实验一边学理论 尽管进度很慢 但效果竟然还不错 好在当时搞 家电修理的收入还可以 加上没有家庭负担 也就这么过来了
随后的几年 做过工人 也当过老师 但更多的时间是在搞技术开发 这些年来 看到很多的昔 日同学靠导腾房地产或者做生意发了财 可自己依然还在这个领域默默无闻的钻研着 但我还是没有后
悔 也从来没有想过改行 因为电子技术那众多迷人而未知的领域常常会使我深深地陷入其中 以至无 法自拔 也感叹自己搞了这么多年 还只是一个入门者
现在老是听到有些年轻的朋友说我要速成单片机 速成 C 语言 速成什么什么的 每当我看到或 听到这些话的时候 总有一种说不出的滋味 现在的社会 什么都讲究个效率 这本来没有错 但学一 项技术也能速成 实在让人有点不知道说什么好 就单片机而言 即使你现在只有 15 6 岁 也很有天
赋 想把现在的几种主流单片机都搞懂并很好的应用到实践中去 没有个几年恐怕也难 更何况单片机 的技术是在不断发展的 你想跟也来不及
不过 话又说回来 我不是要打击大家的学习积极性 单片机是一种非常宽泛的技术 它的设计 是为了满足大多数的需要 换言之 即使你并没有把全部的知识都理解得很深透 或者说没有把每种单 片机都搞懂 也没关系 你一样可以在实际的产品开发中应用它 因为几乎没有一个产品会把全部的指 令都用起来
好了 废话讲了半天 还是言归正传吧 希望大家课后多进行交流 因为在我看来 技术只有不 断的交流 才会有进步 闭门造车只有 S 路一条
四 第 5 课习题
1 什么是单片机的机器周期 什么是振荡周期 什么是指令周期 它们之间的关系是怎么样的
2 什么是单片机的时序
3 单片机有几种振荡方式
4 简述单片机内部时钟的产生过程
19
----------------
第六课 单片机的内部结构 四
在前一课中 我们讲述了单片机的时序和时钟 大家是不是又觉得有些头疼了 下面让我们再来
做两个实验放松一下
一 单片机 I/O 口的输出实验
1 实验程序 程序如下
LOOP:MOV P1,#0FFH ; LCALL DELAY ; MOV P1,#00H ; LCALL DELAY ; LJMP LOOP ;
DELAY:MOV
R7,#250
;
D1:MOV
R6,#250
;
D2:DJNZ R6,D2 ; DJNZ R7,D1 ; RET ; END
还是老规矩 调试 写入源代码 编译 下载 看到了什么 8 只 LED 灯都在闪烁注意 前面
的实验是让一个 LED 灯闪烁分析一下程序
2 程序分析
这段程序和前面的程序比较 有两处不同 第 1 条 原来是 SETB P1.0 现在改为 MOV P1 #0FFH
第 3 条 原来是 CLR P1 现在改为 MOV P1 #00H 为什么这样改了之后就变成了 8 只 LED 灯同时闪 烁了 原来 P1 代表了 P1.7-P1.0 的全部 我们把它当作一个存储器单元即一个字节不过对一个存
储器单元送数就应该用 MOV 指令了 在这里 P1P1.7-P1.0接的是 LED 灯也就是负载它起到了
一个输出端的作用 那如果把 P1 改为 P0 或 P2 或 P3 行不行呢 答案是肯定的 为什么 我们稍后再谈
接着看第 2 个实验
二 单片机 I/O 口的输入实验
1 实验程序
程序如下
MAIN:MOV
P3,#0FFH
;
LOOP:MOV
A,P3
;
END.
MOV P1,A ;
LJMP LOOP ;
同样的方法把程序下载到单片机 按下第 1 个按钮 第 1 个 LED 灯亮了 按下第 2 个按钮 第 2
个 LED 灯亮了 松开按钮 相应的灯就灭了 是不是有点象工业控制中的点动控制原理 分析一下这个 程序
2 程序分析
看附图的实验系统硬件接线图 有 4 个按钮分别接到了 P3.2 P3.3 P3.4 P3.5 引脚上 再来分 析一下程序 第 1 条 使 P3 口包括 P3.7-P3.0全部为高电平为什么 MOV P3 #0FFH 能使 P3 口全
部为高电平 我们在下一课中讨论第 2 条 MOV A P3 MOV 我们已经知道 是送数的意思 这条指 令的意思就是把 P3 口的数送到 A 中去 A 是什么呢 我们也可以把它看成一个中间单元 就象 R7 寄存
器一样 第 3 条指令就是把 A 中的数送到 P1 口去 第 4 条是循环 这些我们都已经见过 当我们按下
20
----------------
P3.2 所连接的按钮时 #0FFH 这个数就被送到了 A 中 通过程序又送到了 P1 使 P1.2 输出低电平 LED3 就亮了 按下 P3.3-P3.5 连接的按钮 对应的 LED4-LED6 也亮了 松开按钮 相应的 LED 灯就灭了 如 果把按钮接到 P2.0-P2.7 或 P0.0-P0.7 可不可以呢 当然可以 所以在这里 P3 口又起到了一个输入端 的作用
由上面两个实验我们得出结论 凡是以 P 开头的管脚都可以用作输入输出口 在 89C51 中这 32
个管脚我们就称之为并行口 它们实际上就是特殊功能存储器 SFR什么是特殊功能寄存器 我们后面 再讲中的四个 记作 P0 P1 P2 P3 它们都是双向通道 即既可以作为输出口 也可以作为输入
口 作输出时数据可以锁存 作输入时数据可以缓冲锁存和缓冲是什么意思 忘了 我也不告诉你
自己回去看数字电路基础 呵呵 不是我不肯讲 只是自己看可以加深印象那么它们是怎么实现输 入输出功能的呢 继续往下看
三 单片机并行口的结构分析 先来看看输入结构
1 输入结构
I/O 口作为输入口时有两种工作方式 即所谓的读端口与读引脚 读端口时实际上并不从外部读 入数据 而是把端口锁存器的内容读入到内部总线 经过某种运算或变换后再写回到端口锁存器 只有 读端口时才真正地把外部的数据读入到内部总线 上面图中的两个三角形表示的就是输入缓冲器 CPU 将根据不同的指令 分别发出 读端口 或 读引脚 信号 以完成不同的操作 这是由硬件自动完成
的 不需要我们操心
读引脚时 也就是把端口作为外部输入线时 首先要通过外部指令把端口锁存器置 1然后再 实行读引脚操作 否则就可能读入出错 为什么 看上面的图 如果不对端口置 1端口锁存器原来 的状态有可能为 0 Q 端为 0 Q^为 1加到场效应管栅极的信号为 1该场效应管就导通 对地 呈现低阻抗,此时即使引脚上输入的信号为 1也会因端口的低阻抗而使信号变低 使得外加的 1
信号读入后不一定是 1若先执行置 1 操作 则可以使场效应管截止 引脚信号直接加到三态缓 冲器中 实现正确的读入 由于在输入操作时还必须附加一个准备动作 所以这类 I/O 口被称为 准双
向 口 89C51 的 P0 P1 P2 P3 口作为输入时都是 准双向 口 接下来让我们再看另一个问题
从图中可以看出 这四个端口还有一个差别 除了 P1 口外 P0 P2 P3 口都还有其他的功能 这些功
21
----------------
能又是作什么用的呢 下面我们就来详细讲解这个问题
2 端口的工作原理
1P0 口
先来看 P0 口 从图中可以看到 P0 口的内部有一个 2 选 1 的选择器 它受内部信号的控制 如 果在图中的位置则处在 I/O 口工作方式 此时相当于一个 准双向口 输入时须先将口置 1每根
口线可以独立定义为输入或输出 但是须在口线上加上拉电阻 如果将开关往另一个方向 则就是另一
个功能—作为地址/数据复用总线用 此时不能逐位定义为输入/输出 它有两种用法 当作数据总线用
时 输入 8 位数据 而当作地址总线用时 则输出低 8 位地址 再强调一点 当 P0 口作为地址/数据复 用总线用之后 就再也不能作 I/O 口使用了 讲到这里 也许大家会感到困惑 什么叫作地址/数据复
用 这其实是当单片机的并行口不够用时 需要扩展输入输出口时的一种用法 具体如何使用 这就比 较复杂了 我们只能留到下册课程中再来给大家讲解 这里大家只要知道一下就可以了 了解了 P0 口
再来看 P1 口
2P1 口
同 P0 不同 P1 口只能作为 I/O 口使用 但它的内部有一个上拉电阻 所以连接外围负载时不需 要外接上拉电阻 这一点 P1 P2 P3 都一样 务必请大家记住
3P2 口
P2 口作为 I/O 口线用时 与 P0 口一样 当内部开关向另一个方向时 即作地址输出时 可以输 出程序存储器或外部数据存储器的高 8 位地址 并与 P0 口输出的低地址一起构成 16 位的地址线(注意 和数据总线的区别 数据总线是 8 位的 很多书上都会提到 51 单片机是 8 位数据总线 16 位地址总线
但都不会解释有什么不同 看到这里你应该明白了吧) 16 位的地址可以寻址 64K 的程序存储器或外部 数据存储器 为什么 下一课我们再给大家解释 这里要注意的是当 P2 口作为地址总线时 这高 8 位 地址线是 8 位一起输出的 不能象 I/O 口线那样逐位定义 这和 P0 口是一样的
4P3 口
P3 口作为 I/O 口线用时 同其他的端口相同 也是 准双向口不同的是 P3 口的每一位都有 另一种功能 也叫第二功能 各位的功能如下 它们的具体作用我们用到时再详细解释
位的功能如下 它们的具体作用我们用到时再详细解释
端口位 | 第二功能 | 注释 |
P3.0 | RXD | 串行口输入 |
P3.1 | TXD | 串行口输出 |
P3.2 | INTO | 外部中断 0 |
P3.3 | INT1 | 外部中断 1 |
P3.4 | T0 | 计数器 0 计数输入 |
P3.5 | T1 | 计数器 1 计数输入 |
P3.6 | WR | 外部 RAM 写入选通信号 |
P3.7 | RD | 外部 RAM 读出选通信号 |
讲到这里 也许您会问 既然单片机的引脚有第二功能 那么 CPU 是如何来识别的呢 这是一个 令许多初学者困惑的问题 几乎没有一本教科书提到过这个问题 其实单片机的第二功能是不需要人工 干预的 也就是说只要 CPU 执行到相应的指令 就自动转成了第二功能
了解了各个 I/O 口的功能和作用后 再来给大家讲解一下单片机 I/O 与外围电路的连接方法 这 可是蛮重要的哦
四 单片机 I/O 口的连接方法
当单片机的 I/O 口作输出时可以直接与外部设备连接 不过由于在实际的应用中 由于其驱动电 流是有限的DATA SHEET 上说是 20mA所以我们常常需要通过接口电路来扩展它的驱动能力 在单片
机的后向通道控制系统中 常用的功率控制器件有机械继电器 晶闸管 固态继电器等等 下面我们将
以机械继电器和固态继电器的应用为例介绍其具体的使用方法
1 单片机与机械继电器的接口
我们知道 单片机的一个 I/O 口只能灌入 20mA 的电流 所以往往不足以驱动一些功率开关比如
22
----------------
稍大一点的机械继电器等此时 就应该采用必要的扩展电路 如何来实现单片机与机械继电器的接 口呢 其实很简单 我们通常采用下面的接法如图为了防止前向通道信号的干扰 常采用一些光
电隔离器件 比如光电耦合器 4N25 PC814 等 当单片机的 P1.0 脚输出为低电平时 光藕受电导通
Q1 饱和开通 继电器吸合 负载电路接通
另外为了防止电压间的互相干扰 继电器的工作电压 VDD 与单片机的工作电压 VCC 不要使用同一 个电源 接地端也不要连在一起 即所谓的模拟地与数字地分开 驱动管的电流要大于继电器的工作电 流,其他的元件就不讲了 大家自行分析一下 讲了单片机与继电器的接口 再来介绍与固态继电器的 接口方法 接着往下看
2 单片机与固态继电器的接口
普通继电器由于开关速度慢 易跳火 易机械磨损 通常用于要求不高的场合 在某些特殊应用 场合 比如防火 防爆等系统中 则应采用固态继电器 固态继电器是一种无触点的电子继电器 它的 输入端只要很小的控制电流 可以与单片机的 I/O 口直接连接 输出则采用双向晶闸管控制 其输入输 出间均通过内部光电耦合器隔离 可以防止信号间的干扰 是单片机接口的理想器件 随着其技术的成
熟 应用的广泛 价格也已经非常的便宜 1A/250V 的目前在 10 元左右 它与单片机的连接方法如图 所示 当 - 端所接的 P1.0 为低电平时 SSR 导通 负载工作
除了以上两种连接方法外 单片机与 TTL CMOS 管等都可以连接 具体的方法这里就不介绍了
大家可以自行找一下相关的资料
五 本课总结
输入和输出口简称 I/O 口是单片机与外部电路接口的唯一途径 四个并行口的结构是有一定 区别的 如何根据系统的设计要求和产品用途来正确 灵活地使用是初学者必须掌握的基本功 我们必
须好好搞清楚它的功能和用途
六 第 6 课习题
1 P0 P1 P2 P3 口的驱动电流分别是多少
2 什么是输入 什么是输出
3 找本数字电路的书 了解一下 D 触发器的原理
23
----------------
联系客服