MCS-51单片机功能模块及其应用.ppt

上传人:sh****n 文档编号:6382246 上传时间:2020-02-24 格式:PPT 页数:40 大小:257.55KB
返回 下载 相关 举报
MCS-51单片机功能模块及其应用.ppt_第1页
第1页 / 共40页
MCS-51单片机功能模块及其应用.ppt_第2页
第2页 / 共40页
MCS-51单片机功能模块及其应用.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
胡景春 单片机原理及应用 4 1并行口及其应用4 2定时器及其应用4 3串行接口UART4 489C52FLASH程序存储器 第四章MCS 51单片机功能模块及其应用 4 1并行口及其应用 MCS 51单片机中有 个双向 位 并行I O端口 线 每线都配备独立的端口锁存器 输出驱动器和输入缓冲器 用于与外界设备之间交换信息4 1 1P0口 P0口一位结构图 P0口除了作普通的I O口 直接和外部设备打交道外 还用作片外总线的地址总线AB0 AB7的低八位和数据总线 注 单片机复位后4个端口对外均呈现高电平 P2口除了作普通的I O口 直接和外部设备打交道外 还用作片外总线的地址总线的高八位地址线AB8 AB15 P2口P0口在作输出入口使用时 由于它无内部上拉电阻 为了在口线上输出高电平并具有一定的驱动能力 必须外接上拉电阻 注意 作输入口使用时 为了防止口锁存器对输入口线的输入信号造成影响 必须先往口锁存器写1 同理 P2口作输入时 也必须先往口锁存器写1 P2口一位结构图 P1口一位结构图 P1口只用作普通输入输出口 P1口从单片机的使用角度来看 P1是一个真正的双向口 而其他三个端口都是准双向口 注意 和P0 P2口一样 为防止口锁存器对输入口线造成影响 P1口作输入时 也必须先往口锁存器写1 P3口一位结构图 P3口除了作普通的I O口 功能和P1口一样 直接和外部设备打交道外 还具有第二功能 P3 0串行输入口 RXD P3 1串行输出口 TXD P3 2外中断0 INT0 P3 3外中断1 INT1 P3 5定时 计数器1的外部输入口 T1 P3 6外部数据存储器写选通 WR P3 4定时 计数器0的外部输入口 T0 P3 7外部数据存储器读选通 RD 4 3中断系统应用举例 例1 1 如图所示为电加热锅炉控制工作原理图和单片机控制系统 当压力报警信号发出时 要求排汽电磁阀通电 打开排汽电磁阀以减少锅炉内蒸汽压力 当低水位限位报警信号发出时 打开进水阀进水 当高水位限位报警信号发出时 关闭进水阀停止进水 当温度达到100 时 关闭电加热丝 当温度低于95 时 接通电加热丝 请设计控制软件 图4 3电加热锅炉控制工作示意图 解 从示意图和控制系统电原理图中可以看出 该系统有5个中断源 而单片机只有2个外部中断请求 本系统中5个中断源通过或非门后接入外部中断1 5个中断源中哪个发生中断请求还需要通过查询程序进行判断 查询顺序的先后决定了这5个中断源的优先级高低 参考程序如下 ORG0000HLJMPMAINORG0013HLJMPINT1ORG0100HMAIN SETBEX1 允许INT1中断SETBEA 开中断HALT SJMPHALT 等待中断ORG1000H中断服务程序 INT1 JBP1 0PRESS P1 0 1转压力报警服务程序LOOP1 JBP1 1HIGH P1 1 1转高水位服务程序JBP1 2LOW P1 2 1转低水位服务程序 LOOP2 JBP1 3HEATOFF P1 3 1转100 服务程序JBP1 4HEATON P1 4 1转95 服务程序LOOP3 RETIPRESS SRTBP1 5 压力报警服务程序JBP1 0PRESSCLRP1 5SJMPLOOP1HIGH CLRP1 6 高水位服务程序SJMPLOOP2LOW SETBP1 6 低水位服务程序SJMPLOOP2HEATOFF CLRP1 7 100 服务程序SJMPLOOP3HEATON SETBP1 7 95 服务程序SJMPLOOP3END 5 1定时 计数器的概述5 2定时 计数器的控制5 3定时 计数器的工作方式5 4定时 计数器的一般编程步骤5 5定时 计数器的应用举例 第五章MCS 51单片机的定时 计数器 5 1定时 计数器概述 在单片机的内部结构中 有两个16位可编程的定时 计数器 它们具有四种工作方式 其控制字和状态均在相应的特殊功能寄存器中 通过对控制寄存器的编程 就可方便地选择适当的工作方式 5 2定时 计数器的控制 1 定时器控制寄存器TCON 88H TR0 定时 计数器0运行控制位 0停止 1开始工作 与GATE位的状态有关 软件置位 软件复位 TR1 定时 计数器1运行控制位 用法与TR0类似 TF0 TF1 分别是定时 计数器T0 T1的溢出标志位 2 定时方式寄存器TMOD 89H GATE 门控位 GATE 0启动不受 INT0或 INT1的控制 GATE 1启动受 INT0或 INT1的控制 C T 外部计数器 定时器方式选择位C T 0定时方式 C T 1计数方式M1M0工作模式选择位 编程可决定四种工作模式 5 3定时 计数器的工作方式 5 3 1工作方式0 13位定时 计数器 定时器 计数器方式0的计数器结构 图5 2方式0等效逻辑结构 在计数工作方式下 计数器的计数值范围是 20 213 1 8192在定时工作方式时 定时时间的计算公式为 定时时间 8192 计数初值 晶振周期 12 8192 计数初值 机器周期计数初值 8192 定时时间 机器周器 2n 定时时间 机器周期如果单片机的晶振选为6 000MHz 则最长定时时间为 8192 0 1 6 10 6 12 16384 10 6 s 16384 us 定时器 计数器运行控制的情况 由TR0控制的情况要运行控制位TR0能够控制定时器 计数器的运行 其或门的输出一定要为1 这就意味着GATE要设置为0或者INT0 1 因此在单片机的定时或计数应用中 要注意定时器方式寄存器TMOD的GATE位一定要设置为0 由INT0控制的情况要能用INT0来控制定时器 计数器的运行 TR0和GATE均应设置为1 这种情况可用于测量外部信号的脉冲宽度 例5 1 设单片机晶振频率为6MHZ 使用定时器1以方式0产生周期为500 s的等宽正方波连续脉冲 并由P1 0输出 以查询方式完成 解 计算计数初值欲产生500 s的等宽正方波脉冲 只需在P1 0端以250 s为周期交替输出高低电平即可实现 为此定时时间应为250 s 使用6MHZ晶振 则一个机器周期为2 s 方式0为13位计数结构 设待求的计数初值为X 则 213 X 2 10 6 250 10 6求解得 X 8067 二进制数表示为0001111110000011B 十六进制 按方式0的13位11111100XXX00011 表示得 高8位为0FCH 低5位为03H 相关控制寄存器的设定TMOD各位的设定 设定方式0 M1M0 00 实现定时 C T 0 定时应用 GATE 0 TCON 地址 88H 是可以位寻址的 又因与该题有关的位只有TR1 故这里采用位寻址方式 用设置TR1 1来启动定时器T1 TR1 0来停止定时器T1 IE题目要求采用查询方式 当定时时间到定时器溢出标志位TF1置1时 不允许产生中断 故应禁止中断 即置IE 00H 参考程序 ANLTMOD 0FH 设置T1为定时工作方式0ORLTMOD 00H 且不影响T0的工作MOVTH1 0FCH 置计数初值MOVTL1 03HMOVIE 00H 禁止中断LOOP SETBTR1 启动定时器JBCTF1 LOOP1 查询计数溢出AJMPLOOPLOOP1 MOVTH1 0FCH 重新设置计数初值MOVTL1 03HCPLP1 0 输出取反AJMPLOOP 重复循环END 5 3 2工作方式1 16位定时 计数器 图5 3方式1等效逻辑结构 在计数工作方式下 计数器的计数值范围是 20 216 1 65536在定时工作方式时 定时时间的计算公式为 定时时间 65536 计数初值 晶振周期 12 65536 计数初值 机器周期计数初值 65536 定时时间 机器周器 2n 定时时间 机器周期如果单片机的晶振选为6 000MHz 则最长定时时间为 65536 0 1 6 10 6 12 131072 10 6 s 131072 us 例2 2 设单片机晶振频率为6MHZ 要求使用定时器0工作方式1产生周期为500 s的等宽正脉冲 并在P1 0端输出 试编写采用中断方式完成的相关程序 解 计算计数初值 216 X 1 6 10 6 12 250 10 6X 65411 FF83H 即可得 TH0 0FFH TL0 83H 设置各相关控制寄存器TMOD应设置为XXXX0001B IE和TCON均采用位寻址方式 参考程序 ORG0000HSTART AJMPMAINORG000BHAJMPINTERORG0100HMAIN ANLTMOD 0F0H 置定时器0工作方式1ORLTMOD 01HMOVTH0 0FFH 设置计数初值MOVTL0 83HSETBEA CPU开中断SETBET0 定时器0开中断SETBTR0 启动定时器0SJMP 等待中断INTER MOVTH0 0FF 重新设置计数初值MOVTL0 83HCPLP1 0 输出取反RETI 中断返回END 2 3 3工作方式2 8位循环计数 图2 4方式2等效逻辑结构 方式2与方式0 1的区别 工作方式0和工作方式1的最大特点就是计数溢出后 计数器为全0 因而循环定时或循环计数应用时就存在反复设置初值的问题 这给程序设计带来许多不便 同时也会影响计时精度 工作方式2就具有自动重装载功能 即自动加载计数初值 所以也有的文献称之为自动重加载工作方式 在这种工作方式中 16位计数器分为两部分 即以TL0为计数器 以TH0作为预置寄存器 初始化时把计数初值分别加载至TL0和TH0中 当计数溢出时 不再象方式0和方式1那样需要 人工干预 由软件重新赋值 而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载 方式2在串口通讯时 常用作波特率发生器 例2 3 已知晶振频率fosc 6MHz 要求使用定时器0以工作方式2产生100 s定时 在P1 0输出周期为200 s的连续正方波脉冲 试编写相关程序 解 计算计数初值在6MHZ晶振下 一个机器周期为2 s 假设计数初值为X 则 28 X 2 10 6 100 10 6求解得 X 206 0CEH 各有关控制寄存器的设置IE和TCON均采用位寻址方式 即分别将应位置 1 或 0 TMOD的设置 定时器 计数器0为方式2 M1M0 10 为实现定时功能C T应设置为0 为允许定时器 计数器0能通过TR0进行运行控制 须使GATE 0 定时器 计数器1不用 通常应不改变其参数 故应将其屏蔽起来 参考程序 查询方式 ANLTMOD 0F0H 设置定时器0ORLTMOD 02H 为工作方式2MOVTH0 0CEH 设置计数初值MOV TL0 0CEHMOVIE 00H 禁止中断SETBTR0 启动定时LOOP JBCTF0 LOOP1 查询计数溢出AJMPLOOPLOOP1 CPLP1 0 输出方波 初值自动装入AJMPLOOP 参考程序 中断方式 主程序 ANLTMOD 0F0HORLTMOD 02HMOVTH0 0CEHMOVTL0 0CEHSETBEA CPU开中断SETBET0 定时器0开中断SETBTR0 启动定时SJMP 等待中断中断服务程序 CLPP1 0RETI 5 3 4工作方式3 双8位定时方式 图5 5方式3等效逻辑结构 前三种工作方式 对两个定时器 计数器的设置和使用是完全相同的 但是在工作方式3下 两个定时器 计数器的设置和使用却是不同的 1 工作方式3下的定时器 计数器0在工作方式3下 定时器 计数器0被拆成两个独立的8位计数器TL0和TH0 其中TL0既可以用作计数 又可以用作定时 定时器 计数器0的各控制位和引脚信号全归它使用 其功能和操作与方式0和方式1完全相同 而且逻辑电路结构也极其类似 如图5 13a所示 定时器 计数器0的高8位TH0 则只能作为简单的定时器使用 而且由于定时器 计数器0的控制位已被TL0占用 因此只好借用定时器 计数器1的控制位TR1和TF1 即以计数溢出去置位TF1 而定时的启动和停止则由TR1的状态控制 在工作方式3下 定时器 计数器0可以构成两个定时器或一个定时器一个计数器 2 在定时器 计数器0设置为工作方式3时的定时器 计数器1定时器 计数器1不能工作于方式3 只能工作于方式0 方式1或方式2 且在定时器 计数器0已工作于方式3时 定时器 计数器1通常用作串行口的波特率发生器 以确定串行通信的速率 因为已没有计数溢出标志位TF1可供使用 因此只能把计数溢出直接送给串行口 如图5 14所示 当作为波特率发生器使用时 只需设置好工作方式 便可自动运行 如要停止工作 只需送入一个把它设置为方式3的方式控制字就可以了 5 4定时 计数器的一般编程步骤 首先必须对定时计数器进行初始化 然后再开启定时或计数 简单的总结一下 定时器 计数器的初始化包括以下内容 1 确定工作方式 对TMOD赋值 如 MOVTMOD 06H指令 设定T0为计数器工作方式 2 预置定时计数器中计数的初值 直接写入TH和TL 如MOVTH0 00H两条指令 设定计数初值 MOVTL0 00H 3 开放定时器 计数器的中断 对IE位赋值 4 启动定时器 计数器 如 SETBTR0 5 计数初值的计算方法N 8192 定时时间 机器周器 2n 定时时间 机器周期n视工作方式不同而不同 方式0 n 13 最多计数脉冲是8192个 方式1 n 16 最多计数脉冲是65536个 方式2和方式3 n 8 最多计数脉冲是256个 5 5定时 计数器的应用举例 例5 4 单片机对按键次数 99次 进行计数 并在发光二极管上实时显示 图5 6例5 4的硬件电路图 任务描述 用手按动按键S3 每按键一次S3引脚上出现一个负脉冲 单片机计数一次 并实时将按键次数以BCD码方式 在发光二极管上面显示 图5 7 例5 4 流程图 ORG0000HLJMPMAINORG0030HMAIN MOVTMOD 06H 外部计数方式2MOVTH0 00H 设定计数初值MOVTL0 00H SETBTR0 启动计数器A1 MOVA TL0CPLAMOVP1 A 送显示SJMPA1END 例5 6 单片机上电 单灯按1HZ频率循环 一旦按下按键S1 发光二极管按双灯循环 松开此键 单灯继续原来的循环 见图5 6 图5 8例5 6的流程图 参考程序 ORG0000HLJMPMAINORG0003HLJMPINT 0 INT0中断入口地址ORG000BHLJMPDELAY T0中断入口地址MAIN SETBIT0 INT0边沿触发MOVTMOD 01H T0方式1 16位 MOVTL0 38H 延时0 05S 初值MOVTH0 50H 见备注 SETBPT0 T0设定为高级SETBEA 开中断SETBEX0 允许INT0中断SETBET0 允许T0中断 MOVB 20 设定中断次数SETBTR0 启动T0MOVA FEH D1亮代码BEGIN MOVP1 A D1亮CJNEB 00 等待中断MOVB 20RLASJMPBEGININT 0 PUSHACCMOVA FCH D1D2亮代码LOOP MOVP1 ACJNEB 00 MOVB 20RLAJNBP3 2 LOOPPOPACCRETIDELAY MOVTL0 38HMOVTH0 50HDECB 20 0 05 1SRETIEND
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!