最新51单片机的基本端口操作
单片机:第八章 51单片机IO接口

51单片机I/O接口
本章内容
8.1 P0-P3口的功能 (重点) 和内部结构(了解) 8.2 I/O口编程举例 (重点) 8.3 用并行口设计LED数码显示器 (掌握) 8.4 用并行口设计键盘电路 (掌握)
8.1 P0-P3口的功能和内部结构
(1)所谓双向,是既能做输入,又能做输出。
所谓准双向口,是指该端口在用作输入线时,必须先 写入“1”。 (2)内部结构是设计芯片时决定的,如果以后不设计单片 机,那么不必在意。只简单的了解即可。
g
d
(b) e
c
e
f
g
1 2 34 5
com ed c
dp
com
dp
xgf ed cba 0 1 0 1 1 0 1 1 =5bh
8.3 用并行口设计LED数码显示器
8.3 用并行口设计LED数码显示器
• (1)数码管显示方式
静态方式
动态方式
8.3 用并行口设计LED数码显示器
• (2)数码管译码方式
8.2 I/O口编程举例
• 解:4个开关对应4个LED灯,因此适合用字节的方式进行操作。
ORG 0000H
ABC: MOV P1, #0FH 的正确读入
;高四位灭,低四位送“1”,确保开关状态
MOV A, P1
;读P1口引脚开关状态至A
SWAP A
;低四位开关状态转换到高四位
ANL A, #0F0H
8.3 用并行口设计LED数码显示器
• (3)举例 –软件译码
【例8-3】 接有五个共阴极数码管的动态显示接口电路, P1.7接开关,当 开关打向位置“1”(GND)时, 显示“12345”字样,当开关打向 “2”(高电平)时,显示“HELLO”字样,试编写其程序。
最新51单片机IO端口的四种输入输出模式

51单片机IO端口的四种输入输出模式(by wuleisly)单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O 口吗?你真的能按你的需要配置I O口吗?一、准双向口输出准双向口输出类型可用作输出和输入功能而不需重新配置口线输出状态。
这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。
当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。
(准双向口有3个上拉晶体管适应不同的需要)准双向口读外部状态前,要先锁存为‘1’,才可读到外部正确的状态.二、强推挽输出推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉。
推挽模式一般用于需要更大驱动电流的情况。
三、仅为输入(高阻)输入口带有一个施密特触发输入以及一个干扰抑制电路。
四、开漏输出配置(若外加上拉电阻,也可读)当口线锁存器为0时,开漏输出关闭所有上拉晶体管。
当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到V c c。
如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。
这种方式的下拉与准双向口相同。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
关于I/O口应用注意事项:1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。
因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了.有些实际没有损坏,加上拉电阻就O K了有些是外围接的是NP N三极管,没有加上拉电阻,其实基极串多大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强推挽输出.2.驱动L E D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个C MO S电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单?片机的弱上拉口在由0变为1时,会有2时钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在软件处理上,不要出现按键两端的I/O口同时为低.一种典型三极管控制电路:如果用弱上拉控制,建议加上拉电阻R1(3.3K~10K),如果不加上拉电阻R1(3. 3K~10K),建议R2的值在15K以上,或用强推挽输出。
51系列单片机P0端口具体讲解

有关单片机P0口具体讲解图1(一)在我们讲解P0端口之前我们首先梳理一下各个端口有什么不同之处:P0口有三个功能:1、外部扩展存储器时,当做数据(Data)总线(如图1中的D0~D7为数据总线接口)2、外部扩展存储器时,当作地址(Address)总线(如图1中的A0~A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻(后面将详细介绍)。
P1口只做I/O口使用:其内部有上拉电阻。
P2口有两个功能:1、扩展外部存储器时,当作地址总线使用(如图1中的A8~A15为地址总线接口)2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。
图2(注:该图只是P0口的一位,也就是说P0口有8个相同的这样的结构)图3(二)由图2可以看出每个P0口都有这些元件:一个锁存器,两个三态输入缓冲器和一个输出驱动电路组成在访问外部存储器时,P0是一个真正的双向口,当P0输出地址/数据信息时,CPU内部法控制电平“1”来打开上面的与门,又使模拟开关MUX把地址/数据信息经过反相器和T1接通(我们称上面的场效应晶体管FET为T1,下面的场效应管FET为T2);输出的地址/数据信息既通过与门去驱动T1,又通过反相器去驱动T2,是两个FET构成推拉输出电路;1.当P0口作为外部扩展存储器的数据地址总线时:●若地址数据信息为“0”,那么这个信号就使得T1截止,使T2导通(经过反反相器作用使得T2接收到的信号为“1”,根据场效应晶体管的特性,T2导通),若T2导通,那么T2的上下两个N极就导通,而发射极(下面的N极)接地信号则为“0”,这样P0口就相当于接收到了“0”信号;●若地址数据信息输入“1”,则该信号使T2截止,使T1导通,在T1导通情况下,T1的上下N极导通,使得VCC与P0相同,从而输出高电平,即“1”信号;●若从P0口输入信号,信号从引脚通过输入缓冲器进入内部总线;2.当P0口作为一般I/O口使用时:●CPU内部发布控制信号“0”,封锁与门,使得T1截止,同时使模拟开关MUX把锁存器的非Q端与T2端的栅极接通;●在P0口作为输出时,由于非Q端和T2的倒相作用,那么内部总线上的信息与到达P0口上的信息是同相的,只要写脉冲加到锁存器的CL端,内部总线上的信息就会P0的引脚上;●但是由于此时T2为漏极开路输出,所以要外接上拉电阻。
51单片机IO端口的四种输入输出模式

51单片机IO端口的四种输入输出模式 (by wuleisly)单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O口吗你真的能按你的需要配置I O口吗一、准双向口输出准双向口输出类型可用作输出和输入功能而不需重新配置口线输出状态。
这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。
当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。
(准双向口有3个上拉晶体管适应不同的需要)准双向口读外部状态前,要先锁存为‘1’,才可读到外部正确的状态.二、强推挽输出推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉。
推挽模式一般用于需要更大驱动电流的情况。
三、仅为输入(高阻)输入口带有一个施密特触发输入以及一个干扰抑制电路。
四、开漏输出配置(若外加上拉电阻,也可读)当口线锁存器为0时,开漏输出关闭所有上拉晶体管。
当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到Vc c。
如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。
这种方式的下拉与准双向口相同。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
关于I/O口应用注意事项:1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。
因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了.有些实际没有损坏,加上拉电阻就O K了有些是外围接的是NP N三极管,没有加上拉电阻,其实基极串多大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强推挽输出.2.驱动LE D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个CM OS 电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单片机的弱上拉口在由0变为1时,会有2时钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在软件处理上,不要出现按键两端的I/O口同时为低.一种典型三极管控制电路:如果用弱上拉控制,建议加上拉电阻R1~10K),如果不加上拉电阻R1~10K),建议R2的值在15K以上,或用强推挽输出。
很全的51单片机IO端口详解(带图)

80C51的I/O端口结构及应用特性一,I/O端口的结构1,锁存器加引脚的典型结构80C51的I/O端口都有内部总线实现操作控制。
P0-P3四个I/O 口都可以做普通I/O口,因此,要求具有输出锁存功能。
内部总线有事分时操作,因此每个I/O端口都有相应的锁存器。
然而I/O端口又是外部的输入/输出通道,必须有相应的引脚,故形成了I/O端口的锁存器加引脚的典型结构。
2,I/O口的复用功能(1)I/O口的总线复用。
80C51在使用并行总线扩展时,P0口可作为数据总线口和低8位地址总线口,这是,P0为三态双向口。
P0口输出总线的地址数据信号,P2口输出高8位地址信号。
(2)I/O口的功能复用。
I/O口的P3为功能复用的I/O端口。
端口有复用输出的控制端;引脚也有复用输入的控制端。
3,准双向结构P0,P1,P2,P3口做普通I/O口使用时,都是准双向口结构。
准双向口的典型结构见P1口位结构图。
准双向口的输入操作和输出操作本质不同,输入操作时读引脚状态;输出操作时对口锁存器的写入操作。
有口锁存器和引脚电路可知:当有内部总线对只1或只0时,锁存器的0、1状态立即反应到引脚上。
但是输入操作(读引脚)时,如果口锁存器的状态为0,引脚被嵌位在0状态,导致无法读出引脚的高电平输入。
二,I/O端口的应用特性1,引脚的自动识别。
无论P0,P2口的总线复用,还是P3口的功能复用,内部资源会自动选择,不需要通过指令的状态选择。
2,口锁存器的读、该、写操作。
许多涉及到I/O端口的操作,只是涉及口锁存器的读出、修改、写入的操作。
这些指令都是一些逻辑运算指令、置位/清除指令、条件转移指令以及将I/O口作为目的地址的操作指令。
3,读引脚的操作指令。
如果某个I/O口被指定为源操作数,则为读引脚的操作指令。
例如,执行MOV A,P1时,P1口的引脚状态传送到累加器中,执行MOV P1,A是,指令则将累加器的内容传送到P1口锁存器中。
4,准双向口的使用。
MCS-51单片机的8位并行输入输出端口(课堂PPT)

为什么要读锁存器而不去读引脚?
为什么“读——修改——写”操作不是从引脚回取 信号?因为: 1. 引脚信号与外部设备连接,易受外界干扰; 2. 引脚上的电平往往不能正确反映前次的输出结果。
Vcc 负载
16
【举例】在当前状态下,将
P0.2的电平变“1”,其余
P0.0
位不变。
P0.1 P0.2
MOV A,#00000100B
26
4.5 并行端口使用中应注意的问题
如何使用并行端口来直接驱动电流比较大的负载 (如:LED)?是采用“拉电流”还是“灌电流”?
Vdd Vdd
Px.y
Vdd
Px.y
灌电流方式 输出”0”点亮LED
拉电流方式 输出高电平点亮LED
27
1. 使用灌电流的方式与电流较大的负载直接连接时, MCS51的端口可以吸收约20mA的电流而保证端口电平不高 于0.45V,但驱动逻辑并不符合人们的日常习惯。
第四章 MCS-51单片机的8位并行输入输出端口 本章内容
重点掌握MCS-51单片机的四个8位并行I/O口的硬 件结构特点和使用。
1
本章目录
4.1 P0口 4.2 P1口 4.3 P2口 4.4 P3口 4.5 并行端口使用中应注意的问题 4.6 单片机与继电器等大电流负载的接口
2
4.1 P0口
4
读锁存器 内部总线 写锁存器 读引脚
P0口的位结构图
Vcc
Vcc
地址/数据 控制(=0时)
1/0
DQ
锁存器
CL /Q
MUX (控制=0时)
P0.x 引脚
5
硬件组成: 1,一个输出锁存器(D型触发器); 2,二个三态门(控制读引脚或读锁存器); 3,与门和MUX等元件组成的输出控制电路; 4,一对场效应晶体管FET构成的输出电路.
51单片机的P1、P2、P3口的工作原理

基于proteus的51单片机仿真实例五十、51单片机的P1、P2、P 3口的工作原理1、P1口某一位的内部电路结构如下图所示,在51单片机的P0,P1,P2,P3口中,P1口的结构最简单,用途也最单一。
仅仅只作为普通的数据输入/输出(I/O)端口使用。
从图中可以看出,P0口与P1口的主要差别在于:P1端口用内部上拉电阻代替了P0端口的场效应管,并且输出的信息只有内部总线的信息,没有了数据/地址总线的复用。
1)P1口用作输入端口如果P1口用作输入端口,即Q=0,/Q=1;则场效应管导通,引脚被直接连到电源的地GND上,即使引脚输入的是高电平,被直接拉低为“0“,所以,与P0端口一样,在将数据输入P1端口之前,先要通过内部总线向锁存器写”1“,这样/Q=0,场效应管截止,P1端口输入的“1”才可以送到三态缓冲器的输入端,此时再给三态门的读引脚送一个读控制信号,引脚上的“1”就可以通过三态缓冲器送到内部总线。
具有这种操作特点的输入/输出端口,一般称之为准双向I/O口,51单片机的P1,P2,P3口都是准双向口。
而P0端口由于输出具有三态功能(输出端口的三态是指:高电平,低电平,高阻态这三态),所以在作为输入端口时,无需先写“1”然后再进行读操作。
2)P1口用作输出端口如果P1口用作输出端口,应给锁存器的写锁存CP端输入写脉冲信号,内部总线送来的数据就可以通过D端进入锁存器并从Q和/Q端输出,如果D端输入“1”,则/Q=0,场效应管截止,由于上拉电阻的作用,在P1.X引脚输出高电平“1”,反之,如果D端输入“0”,则/Q =1,场效应管导通, P1.X引脚连到地线上,从而在引脚输出“0”。
2、P2口的内部电路结构如下图所示,可以看出P2口既有片内上拉电阻,又有切换开关MUX,所以P2口在功能上兼有P0和P1端口的特点,这主要体现在输出功能上,当切换开关向下接通时,从内部总线输出的一位数据经反相器和场效应管反相后,输出在端口引脚线上;当多路开关向上时,输出的一位地址信号也经反相器和场效应管反相后,输出在端口引脚线上。
51单片机的基本端口

51单片机的基本端口单片机是一种集成电路芯片,具有微处理器核心、存储器、I/O端口和各种外设接口等功能。
其中,基本端口是单片机最常用的功能之一,用于与外部设备进行数据交互和信号传输。
本文将介绍51单片机的基本端口及其使用方法。
一、引脚功能51单片机的引脚一共有40个,其中包括了多个基本端口引脚。
这些引脚的功能可以根据实际需要进行配置,比如作为输入端口、输出端口、中断源等。
以下是常用的几个基本端口引脚和其功能描述:1. P0口:P0.0~P0.7分别对应引脚号32~39,可用作通用I/O端口。
默认情况下,P0口是上拉输入模式,需要通过对应的寄存器设置为输出模式。
2. P1口:P1.0~P1.7分别对应引脚号1~7和40,同样可用作通用I/O端口。
在默认情况下,P1口是上拉输入模式,也需要通过寄存器进行配置。
3. P2口:P2.0~P2.7分别对应引脚号21~28,是可编程的8位I/O端口。
与P0和P1不同,P2口默认是输出模式,不需要进行配置。
二、使用方法在使用51单片机的基本端口之前,需要理解相关的寄存器和位控制。
以下是基本的使用方法:1. 配置端口模式:通过相应的寄存器设置,将需要使用的引脚设置为输入模式或输出模式。
2. 引脚输入:通过读取相应端口的寄存器,可以获取引脚的输入状态。
3. 引脚输出:通过写入相应端口的寄存器,可以控制引脚的输出状态。
4. 端口中断:通过对应的中断使能设置,可以使端口引脚成为一个中断源,触发中断服务程序。
需要注意的是,在编写代码时,应根据实际需要选择合适的端口和引脚进行配置和操作,以达到所需的功能。
三、示例代码下面是一个简单的示例代码,演示了如何使用51单片机的基本端口来控制LED灯的亮灭:```c#include <reg52.h>sbit LED = P1^0; // 将P1.0引脚定义为LEDvoid delay(unsigned int count){unsigned int i, j;for(i = 0; i < count; i++)for(j = 0; j < 1000; j++);}void main(){while(1){LED = 0; // LED亮delay(1000); // 延时LED = 1; // LED灭delay(1000); // 延时}}```通过以上示例代码,可以看到将P1.0引脚定义为LED,并通过改变LED引脚的输出状态来控制LED的亮灭。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机的基本端口操作第一章51单片机的基本端口操作主要对单片机最简系统在实际应用中的使用方法,从简单到复杂地实现单片机最简系统的基本功能。
“点亮最简单的单片机系统”从单片机原理上介绍单片机的基本组成和最简单系统的典型电路,以及有关单片机C51编程方法和例程。
“更加明亮的小灯”从功能上介绍如何使LED发光稳定,从原理上介绍单片机I/O口的电气特性和使用方法。
“定时亮灭的小灯”介绍如何使LED灯定时亮、灭,从单片机原理上介绍定时器的使用和编程方法。
“小灯亮灭的人工控制”从功能上介绍如何通过按键控制LED灯的亮灭,从单片机原理上介绍单片机中断的使用和编程方法。
先复习下Keil 51的操作。
1.1点亮最简单的单片机系统常用MCS-51系列单片机引脚功能说明提问:什么是单片机系统、提问:单片机中晶振有什么作用?回答:单片机访问一次存储器的时间,称之为一个及其周期,是一个时间基准。
一个机器周期包括12个时钟周期。
如果一个单片机选择了12MHz 晶振,它的时钟周期是1/12us ,它的一个机器周期是12X (1/12us ),也就是1us 。
若是12MHz 的晶振,当单片机中定时/计数器的数值加1时,实际经过的时间就是1us 。
提示:晶振电路,复位电路基本电路图:发光二极管导通压降通常为1.7V-1.9V;为什么要接电阻?电路原理及器件选择?89C51:单片机,控制发光二极管亮灭OSC:晶振,在本例中选择12MHz的立式晶振C3,C2:晶振电路的起振电容,容值为22pFL1:发光二极管R1:限流电阻,阻值为1k欧地址分配和连接?P1.0:与发光二极管电路相连,控制LED发光二极管阴极的电平高低RESET:复位引脚X1,X2:单片机的晶振引脚程序设计:延时程序:我们先不使用单片机的定时器,而是直接采用软件的延时程序定时控制发光二极管的亮灭。
在12M晶振时,一个指令周期为1us,那么1M次就是1s。
程序代码:#include<reg51.h>sbit gate=P1^0; //位定义void main(void){unsigned int i,j;while(1){for(i=1000;i>0;i--) //双重循环,延时约1sfor(j=1000;j>0;j--);gate=!gate; //对P10取反,控制小灯}}补充:结合第五代开发板电路图可以看到…1.2更加明亮的小灯外加与非门做驱动电路,增大电流,当然也有相应的电子驱动芯片。
1.3定时亮灭的小灯下面我们进入单片机最重要的内容之一,定时和中断。
1.什么是单片机的定时器?MSC-51单片机一般有两个内部的16位定时器/计数器,分别成为T0和T1.分别有两个8位的RAM单元组成,即每个计数器都是16位的计数器,最大计数量为2的16次方等于65536.而定时和计数的关系是什么呢?找个同学告诉我吧。
定时器每完成一个时间的定时,计数器就加1.2.一定要计满65536个数吗?3.如何使用MCS-51单片机的定时器呢?定时器有两个特定的寄存器TMOD和TCON,就象定时器的操作界面。
首先介绍定时器/计数器的方式寄存器TMOD。
TMOD的控制字可以看到,高四位和第四位分别代表两个定时器/计数器,所以我们可以以TMOD第四位来说明各位的定义与功能。
GATE:分为两种情况,GATE=0时,定时器的起停和INT1无关,在这种情况下,定时器的起停只取决与TR0.GATE=1时,在此种情况下定时器/计数器的开关不仅要由TR0来控制,而且还要受到INT1引脚的控制,只有TR1为1时,且INT1引脚也是高电平,定时器才能开始工作。
C/T:定时/计数器功能选择。
如果C/T为0就做定时器,如果C/T为1就做计数器。
当然只能二选一。
M1,M0:用M1,M0来控制定时器/计数器4种工作方式的选择。
工作方式0:M1=0,M0=0.13位定时.计数方式。
它由TL(1/0)的低五位和TH(0/1)的8位构成13位的计数器,此时TL(1/0) 的高3位未用。
工作方式1:M1=0,M0=1.是16位定时/计数方式,其他特性与工作方式0相同。
工作方式2:M1=1,M0=0.自动重装初值的8位定时/计数器。
初值放在T(0/1)的高8位。
在工作方式2,只有低8位参与计算,而高8位不参与计算,用作预置数存放,技术范围256。
每当计数溢出,就会打开T(0/1)的高、低8位之间的开关,计预置数进入低8位。
这是由硬件自动完成的。
通常这种方式用于波特率发生器(我们将在串行接口中讲解)工作方式3:M1=1,M0=1.这种工作方式下,定时/计数器被拆成2个独立的定时/计数器来用。
其中,TL0可以构成8位的定时器或计数器的工作方式,儿TH0则只能作为定时器来用。
只有在T1以工作方式2运行时,才让T0以工作方式3运行。
然后,我们介绍控制寄存器TCONTCON控制寄存器TR0: T0的运行控制位。
启动定时器T0没有专门的指令,而是通过TR0进行控制。
当GATE=0时,T0的运行只取决于TR0的0和1;当门控位GATE=1时,仅当TR0=1,并且外中断0引脚上的输入值为高电平时,T0才开始计数,这两个条件缺一不可TF0: T0的溢出和中断申请标志位。
当T0溢出时,硬件置位TF0,表示提出了中断申请。
该标志位可以通过软件查询,也可以用软件清零和置位,在单片机响应中断申请后,硬件自动清零。
TR1:TF1:接下来我们来看一个典型的定时器程序。
要求:定时10ms,P1.0反相。
//定义头文件和位定义#include<reg51.h>#include<stdio.h>sbit P00=P0^0;sbit P13=P1^3;void main(void){//初始化端口P0=0xFF;P13=0;//初始化定时器TMOD=0x01;TH0=0xD8;TL0=0xF0;//启动定时器,开中断TR0=1;ET0=1;EA=1;//等待循环while(1);}//定时器0中断服务子程序void timer0_ISR(void) interrupt 1 using 1 {//定时器初始重载TH0=0xD8;TL0=0xF0;//操作P00=!P00;}到这里,大家肯定就会有疑惑,什么叫做中断服务子程序,什么又叫做中断。
我们稍后解释。
这里需要提醒大家的是单片机定时/计数器各种工作方式下的最大计数量。
工作方式0:13位,2的13次方等于8192次;工作方式1:16位,2的16次方等于65536次;工作方式2和3:都是8位的,2的8次方等于256次那么就出现了一个问题,如果我想定时1s的话,该怎么做呢?大家思考一下,然后我请个同学来回答。
下面我们一起来看看如何实现1s的定时亮灭。
#include<reg51.h>#include<stdio.h>#define unit unsigned int#define uchar unsigned charsbit P00=P0^0;sbit P13=P1^3;uint overflow_count=0;void main(void){P0=0xFF;P13=0;TMOD=0x01;TH0=0xD8;TL0=0xF0;TR0=1;ET0=1;EA=1;while(1){If(overflow_count==100) { P00=!P00;Overflow_count=0;};}void timer0_ISR(void) interrupt 1 using 1{TH0=0xD8;TL0=0xF0;Overflow_count++;}完成了小灯定时亮灭,我们就基本学会了如何使用单片机定时器/计数器的使用方法。
下面,就让我们来看看前面留下的问题----“中断”。
定义:中断属于一种对事件的实时处理过程,中断源可能随时停止CPU当前的工作,转而去处理中断服务程序,待中断服务程序完成后,再返回原来工作的断点处,继续原来的工作。
再者,我们需要知道,单片机内部有多个中断,分别是定时/计数器0中断----T0中断定时/计数器1中断----T1中断外中断0----INT0中断外中断1----INT1中断串口中断----串口中断那么,当不同的中断同时发出终端申请,自然就会有一个中断优先级的问题。
优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已经产生而未结束,又有一个中断产生的情况。
最后,就是中断的响应过程。
具体来说可以分为以下几个步骤。
保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈;寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址;执行中断服务程序,用中断服务程序处理需要改变的变量或者事件;中断返回,执行完中断服务程序后,从中断断点处返回主程序,继续执行主程序。
上面分什么是中断,中断优先级,中断的响应三个部分简单介绍了中断,下面我们来看看单片机中断系统有何作用。
简单的说,单片机在自动控制中所起到的作用就两个,一个是定时/计数,另一个就是中断的使用。
中断的作用如下:第一、实现高速CPU和低速外设之间的配合,利用中断方式进行I/O口操作,在宏观上可以看成CPU和外设的并行工作;第二、可以实现实时控制。
实时处理是控制系统对单片机提出的要求,各个设备可以随时向CPU发出中断申请,而CPU也必须做出快速响应和及时处理。
第三、实现故障的紧急处理。
当外设发生故障时,可以利用中断系统请求CPU及时处理这些故障。
第四、便于人机联系。
操作人员可以利用键盘等实现中断,完成人工介入。
接下来我们学习中断的使用!中断系统主要包括5个中断请求源和4个控制寄存器IE,IP,TCON和SCON来控制中断申请,中断开关和中断优先级。
1.中断方式和标志位TCONTCON的低四位用于外部中断的控制,高4位用于T0,T1的控制。
TCON中的控制字外部中断请求源IT0: INT0触发方式控制位,可由软件进行置位和复位。
IT0=0,INT0为低电平触发方式;IT0=1,INT0为负跳变触发方式。
IE0: INT0中断请求标志位。
当有外部中断的请求时,这位就会置1;在CPU响应中断后,IE0置0;IT1:IE1:2.中断允许寄存器IE中断允许寄存器IE其中:EA:总开关,如果它等于0,则所有中断都不允许ES:串行口中断允许ET1:定时器1中断允许EX1:外中断1中断允许ET0:定时器0中断允许EX0:外中断0中断允许5个中断的自然优先级为:外中断0----INT0中断----EX0定时器0----T0中断----ET0外中断1----INT1中断----EX1定时器1----T1中断----ET1串口中断----串口中断----ES中断优先级寄存器其中某位为1,那么就为高优先级。