AT89S52中断系统及应用(汇编)
- 格式:doc
- 大小:175.50 KB
- 文档页数:9
主要性能● 与MCS-51单片机产品兼容● 8K字节在线系统可编程Flash存储器● 1000次擦写周期● 4.0V-5.5V工作电压● 全静态操作:0Hz~33Hz● 三级加密程序存储器● 256*8字节的内部数据存储器● 32个可编程I/O口线● 三个16位定时器/计数器● 八个中断源● 全双工UART串行通道● 低功耗空闲和掉电模式● 掉电后中断可唤醒● 看门狗定时器● 双数据指针● 掉电标识符● 快速编程周期● 灵活ISP编程(字节和模式)● 绿色(-免费)工作包操作1功能特性描述AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2. 引脚结构3. 引脚描述3.1 VCC : 电源3.2 GND: 地3.3 P0 口:P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL 逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
at89s52中断资源原理
AT89S52是一种微控制器,具有多个中断源。
这些中断源包括两个外部中
断(INT0和INT1),三个定时器中断(定时器0、1、2),以及一个串行口中断。
每个中断源都可以通过设置或清除特殊寄存器IE中的相关中断允
许控制位来启用或禁用。
此外,还有一个中断允许总控制位EA,可以一次
禁止所有中断。
具体来说,外部中断0(INT0)和外部中断1(INT1)的中断请求信号由相应的脚输入,其标志分别为IE0和IE1。
定时器/计数器T0和T1计数溢出
发出的中断请求标志分别为TF0和TF1。
串行口的中断请求标志为发送中断TI或接收中断RI。
而定时器2的中断请求源有两个:计数溢出(TF2)和“捕捉”(EXF2),这两种中断请求标志共用一个中断矢量。
这些中断请求标志分别由TCON、SCON和T2CON的相应位锁存。
其中,TCON寄存器是定时器/计数器的控制寄存器,字节地址为88H,可位寻址。
在程序进入中断服务后,这些标志位可以被硬件清零。
对于某些标志位,如TF0和TF1,它们的值在计数溢出的那个周期的S5P2被置位,并一直保持
到下一个周期被电路捕捉下来。
而对于定时器2的标志位TF2,它在计数溢出的那个周期的S2P2被置位,并在同一个周期被电路捕捉下来。
请注意,为了保持代码的简洁性和易于维护,用户软件不应给位和位写入1。
它们是为AT99系列新产品预留的。
以上内容仅供参考,如需更多信息,建议查阅AT89S52的官方数据手册或
咨询专业技术人员。
单片机原理及应用之AT89S52AT89S52是一款由Atmel公司生产的8位单片机,采用CMOS工艺制造,并且内部集成了丰富的功能模块和外设接口。
它具有较高的性能和良好的稳定性,广泛应用于各种电子设备中。
AT89S52单片机的基本原理是通过控制器对内部资源进行配置和控制,从而实现各种功能。
它的主要构成部分包括中央处理器(CPU),存储器(RAM和ROM),输入/输出接口(IO),定时/计数器(Timer/Counter)和串行通信接口等。
首先,AT89S52单片机的CPU是其心脏部件,它采用基于8051内核的结构,具有8位数据总线和16位地址总线。
CPU负责执行程序指令,以及对数据进行运算和处理。
其次,AT89S52内部集成了包括RAM、ROM和EEPROM等多种存储器。
其中,RAM用于临时存储数据和程序,ROM用于存储程序代码,EEPROM可用于存储非易失性数据。
AT89S52还具有强大的输入/输出接口,用于与外部设备进行通信。
它具有多个I/O引脚,可以用于连接传感器、显示器、键盘等外部设备,并通过程序控制实现数据的输入和输出。
除此之外,AT89S52还内置了多个定时/计数器模块,用于生成精确的时间延迟和计算时间。
这些定时/计数器可以用于测量时间、产生脉冲信号、控制外设设备等。
此外,AT89S52还支持多种串行通信接口,如UART、SPI和I2C等。
这些接口可以与其他设备进行数据传输和通信,实现单片机与外部设备的数据交互。
AT89S52单片机应用广泛。
它既可以作为独立的控制芯片,也可以作为其他数字电路和模拟电路的核心控制部分。
在家电、电子仪器、工业自动化和电子玩具等领域,AT89S52都有着重要的应用。
具体来说,AT89S52可以用于控制家电设备,如洗衣机、空调、微波炉等。
它通过连接传感器和执行器,实现对温度、光照强度等参数的检测和控制。
此外,AT89S52还可以用于仪器设备的控制。
例如,可以将其用作控制面板上的核心处理器,实现对仪器设备的各种参数监测和控制。
AT89S52单片机中断过程AT89S52单片机中断分为四个阶段:中断采样、中断查询、中断响应、中断返回。
执行中断时,必须满足以下三个条件:(1) 中断源有中断申请;(2) 此中断源的中断允许位为1;(3) CPU开中断,即总开关EA=1;1.中断采样中断采样针对外部中断请求信号而言,在S5P2对相应引脚采样,根据其电平状态高/低,判断相应的中断请求。
2.中断查询在每个机器周期的S5P2后,由硬件自动地去查询相应的中断标志位,先查询高级中断,再查询低级中断,同级中断按内部中断优先级顺序查询。
如果查询到有中断标志位为1,则说明有中断请求发生,接着从相邻的下一个机器周期的S1状态开始开展中断响应。
3.中断响应CPU响应中断时,先置位相应的优先级激活触发器,封锁同级和低级的中断。
然后程序根据中断源的类别,在硬件的控制下转向相应的中断入口单元,执行中断服务程序。
中断响应的过程如下图。
图中断响应过程4.中断返回中断服务程序的最后一条指令必须是中断返回指令RETI。
CPU执行完这条指令后,把响应中断时所置位的优先级激活触发器清0,然后从堆栈中弹出两个字节内容(断点地址)装入程序计数器PC中,CPU就从原来被中断处重新执行被中断的程序。
5. 中断的响应时间中断响应时间是指从查询中断请求标志位开始到转向中断矢量地址所需的机器周期数。
响应中断的时间依中断请求发生的情况不同有长有短,因此,AT89S52单片机发生中断的时间根据中断类型和中断执行的方式不同而不同。
外部中断和的电平在每个机器周期的S5P2时被采样并锁存到IE0和IE1中,这个置入到IE0和IE1的状态在下一个机器周期才被查询电路查询。
如果产生了一个中断请求,而且满足响应的条件,CPU响应中断,查询中断请求标志位,同时这个周期恰好是指令的最后一个周期,则在这个机器周期结束后,中断请求被CPU 响应,产生一条硬件自动生成的长调用指令LCALL,以使CPU转到相应的服务程序入口。
主要性能● 与MCS-51 单片机产品兼容● 8K 字节在系统可编程Flash 存储器● 1000 次擦写周期● 全静态操作:0Hz~33Hz● 三级加密程序存储器● 32 个可编程I/O 口线● 三个16 位定时器/计数器● 八个中断源● 全双工UART 串行通道● 低功耗空闲和掉电模式● 掉电后中断可唤醒AT89S528位微控制器R● 看门狗定时器● 双数据指针● 掉电标识符功能特性描述AT89S52 是一种低功耗、高性能CMOS8 位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52 具有以下标准功能:8k 字节Flash,256 字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2 种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8K字节在系统可编程FlashAT89S52Rev. 1919-07/011AT89S52 引脚结构2AT89S52 方框图引脚功能描述3VCC :电源GND:地AT89S52P0口:P0 口是一个8 位漏极开路的双向I/O 口。
作为输出口,每位能驱动8 个TTL 逻辑电平。
对P0 端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0 口也被作为低8 位地址/数据复用。
5.4.2 定时/计数器中断C语言编程实例AT89S52单片机定时/计数器中断电路原理图如图所示:图5-5 定时器中断的电路原理图AT89S52单片机定时/计数器中断C语言程序实例如下所示:/*********************************************************************** 程序名; 时钟实验1* 功能:数码管通过动态扫描显示时间,时间可设定,调整时间时时钟不走;* 定时器0用于设定1s定时,定时器1用于设定调节时间时时间的闪烁;* k1用于进入和退出时间调节模式,k2时间加1,k3时间减1。
* 编程者:ZPZ* 编程时间:2008/10/9**********************************************************************/#include<reg52.h> //包含头文件#define uint unsigned int //变量类型宏定义#define uchar unsigned charsbit led=P2^7; //定义LED等端口sbit key1=P2^0; //定义键盘端口sbit key2=P2^1;sbit key3=P2^2;uchar num=0,temp=0,count=0; //定义全局变量uchar aa;uchar hour,min,sec;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义显示断码表(共阳)/*****************************************函数名:delay功能:延时1ms左右参数:z返回值:无******************************************/void delay(uint z){uint i,j; //定义局部变量for(i=z;i>0;i--) //循环for(j=120;j>0;j--); //循环}/*****************************************函数名:display功能:显示函数参数:a,b,c,d,e,f,aa返回值:无*******************************************/void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar aa){if(num==1){P1=0x01&aa;P0=a;delay(2);}else{P1=0x01;P0=a;delay(2);} //时的十位显示if(num==1){P1=0x02&aa;P0=b;delay(2);}else{P1=0x02;P0=b;delay(2);} //时的个位显示if(num==2){P1=0x04&aa;P0=c;delay(2);}else{P1=0x04;P0=c;delay(2);} //分的十位显示if(num==2){P1=0x08&aa;P0=d;delay(2);}else{P1=0x08;P0=d;delay(2);} //分时的个位显示if(num==3){P1=0x10&aa;P0=e;delay(2);}else{P1=0x10;P0=e;delay(2);} //秒时的十位显示if(num==3){P1=0x20&aa;P0=f;delay(2);}else{P1=0x20;P0=f;delay(2);} //秒时的个位显示}/*****************************************函数名:read_key功能:读按键函数参数:无返回值:无*******************************************/void read_key(){if(key1==0) //如果K1按下{delay(10); //延时消抖if(key1==0) //再次判断K1是否按下{while(1) //K1若按下进入时间调节主循环{if(key1==0) //在调节主循环中判断K1是否按下{led=0; //有按键按下点亮LED灯delay(10); //延时消抖if(key1==0) //再次判断K1是否按下{num++; //K1若按下,按一次num值加1if(num>3){num=0;break;} //如果num值大于3则num值清0,退出循环}while(~key1); //送按键消抖led=1; //按键松开熄灭LED灯}if(key2==0) //判断K2是否按下{led=0;delay(10);if(key2==0){if(num==1){hour++;if(hour==24)hour=0;}//小时加1if(num==2){min++;if(min==60)min=0;}//分钟加1if(num==3){sec++;if(sec==60)sec=0;}//秒加1}while(~key1);led=1;}if(key3==0) //判断K3是否按下{led=0;delay(10);if(key3==0){if(num==1){hour--;if(hour==0)hour=23;} //小时减1if(num==2){min--;if(min==0)min=59;} //分钟减1if(num==3){sec--;if(sec==59)sec=59;} //秒减1}while(~key1);led=1;}if(count<=15) //调节时间时,实现要调节的时间闪烁display(table[hour/10],table[hour%10],table[min/10],table[min%10],table[sec/10],table[sec%10],0xff);if(count>15)display(table[hour/10],table[hour%10],table[min/10],table[min%10],table[sec/10],table[sec%10],0x00);}}while(~key1);}}/*****************************************函数名:time_change功能:时间调整函数参数:无返回值:无*******************************************/void time_change(){read_key(); //判断是那一个按键按下if(temp>=20) //如果定时器0定时1s到{temp=0; //temp清0sec++; //秒加1if(sec>=60) //如果秒>=60分加1{sec=0;min++;if(min>=60) //如果>=60时加1{min=0;hour++;if(hour>24) //如果时>24时清0{hour=0;}}}}}/*****************************************函数名:timer_init功能:定时器初始化参数:f返回值:无******************************************/void timer_init(bit f){TMOD=0x11; //定时器0/1均工作在方式1TH0=0x3c; //定时器0赋初值50msTL0=0xb0;TH1=0x3c; //定时器1赋初值50msTL1=0xb0;EA=1; //开总中断ET0=1; //开定时器0中断ET1=1; //开定时器1中断TR0=f; //f=1启动定时器0,f=0关闭定时器0TR1=f; //f=1启动定时器1,f=0关闭定时器1}/*******************************************函数名: main功能: 主函数参数: 无返回值: 无/*******************************************/void main(){P2=0xff;hour=12; //设定时间初值min=59;sec=50;aa=0xff; //aa赋0xfftimer_init(1); //定时器初始化while(1) //主循环{time_change(); //调节时间display(table[hour/10],table[hour%10],table[min/10],table[min%10],table[sec/10],table[sec%10],0 xff);//送显示}}/*******************************************函数名: timer0功能: 定时器0中断函数参数: 无返回值: 无/*******************************************/void timer0() interrupt 1 using 1{ TH0=0x3c; //重赋初值50msTL0=0xb0;temp++; //temp加1}/*******************************************函数名: timer1功能: 定时器1中断函数参数: 无返回值: 无/*******************************************/void timer1() interrupt 3 using 3{ TH1=0x3c; //重赋初值50msTL1=0xb0;count++; //count加1if(count>=20) //如果1s时间到count清0count=0;}6.3 独立键盘输入独立键盘的电路原理图如图5-6所示:独立键盘的C语言程序如下所示:/*********************************************************************** 程序名:独立键盘实验(晶振11.0592MHZ)* 功能:数码管上显示00~99按一下K1数值加1,按一下K2数值减1* 编程者:ZPZ* 编程时间:2008/9/14**********************************************************************/#include<reg52.h> //包含头文件#define uchar unsigned char //宏定义#define uint unsigned int#define data_bus P0sbit wei1=P1^1; //定义位选口sbit wei2=P1^0;sbit key1=P3^2; //定义键盘口sbit key2=P3^3;uchar counter=0; //定义一个全局变量uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义断码表0~9 /*******************************************函数名:delay功能:延时1ms左右参数:z返回值:无********************************************/void delay(uint z){ uint i,j; //定义局部变量for(i=z;i>0;i--) //循环for(j=120;j>0;j--); //循环}if(counter==0) //如果counter=0,counter=99counter=99;counter--; //如果k2按下counter-1 }while(key2==0); //判断k2是否松开}}/*******************************************函数名:display功能:显示函数参数:shi,ge返回值:无********************************************/void display(uchar shi,uchar ge){wei1=0; wei2=1; //选通第一个数码管关断另一个data_bus=table[shi]; //送要显示的段码delay(2);wei2=0; wei1=1; //选通第二个数码管/关断另一个data_bus=table[ge]; //送要显示的段码delay(2);}/*******************************************函数名: main功能: 主函数参数: 无返回值: 无/********************************************/void main(){ while(1){ key_scan(); //键盘扫面display(counter/10,counter%10); //送显示}}。
一、单片机系统结构1.1总体结构AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
1.1.1系统组成单片机上集成了中央处理单元CPU、随机存储器RAM、只读存储器ROM、定时器/计数器和多种输入/输出(I/O),如并行I/O、串行I/O和A/D转换器等。
就其组成而言一块单片机就是一台计算机。
典型的结构如图1-1所示。
由于它具有许多适用于控制的指令和硬件支持而广泛应用于工业控制、仪器仪表、外设控制、顺序控制器中,所以又称为微控制单元(MCU)。
AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB 可在线编程闪存。
该器件采用Atmel公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。
片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI串行口改写或用同用的非易失性存储器改写。
通过把通用的8位CPU与可在线下载的Flash集成在一个芯片上,AT89S52便成为一个高效的微型计算机。
它的应用范围广,可用于解决复杂的控制问题,且成本较低。
其结构框图如图所示。
1.1.2单片机工作原理AT89S52的主要特性如下:兼容MCS51产品8K字节可擦写1000次的在线可编程ISP 闪存4.0V到5.5V的工作电源范围全静态工作:0Hz ~24MHz3级程序存储器加密256字节内部RAM32条可编程I/O线3个16位定时器/计数器8个中断源UART串行通道低功耗空闲方式和掉电方式通过中断终止掉电方式看门狗定时器双数据指针灵活的在线编程(字节和页模式)引脚功能与封装按照功能,AT89S52的引脚可分为主电源、外接晶体振荡或振荡器、多功能I/O 口、控制和复位等。
at89s52单片机2篇第一篇:AT89S52单片机简介(1500字)AT89S52单片机是一种基于汇编语言的微型电子控制器,由Intel公司设计和制造。
它是一款高效、可靠的单片机,广泛应用于各种电子设备和嵌入式系统中。
在本文中,我们将介绍AT89S52单片机的基本特性和应用领域。
AT89S52单片机具有8位中央处理器(CPU),可执行各种指令和算术运算。
它内置了8KB的闪存存储器,可用于存储程序和数据。
此外,它还包含了256字节的随机存取存储器(RAM),用于临时存储数据。
AT89S52单片机具有丰富的输入输出(IO)端口,可与外部设备进行通信。
它具有4个8位的通用输入输出端口(P0,P1,P2,P3),以及多个特殊功能端口(如串行通信口、定时器和计数器等)。
这些端口可通过设置寄存器的值来进行配置和控制。
AT89S52单片机还具有多个定时器和计数器模块。
定时器可以用来生成精确的时间延迟,计数器可以用来计数外部事件的次数。
这些模块对于控制和定时各种任务非常有用,例如控制电机速度和周期性的数据采集。
AT89S52单片机还支持串行通信,可以与其他设备(如传感器、显示器等)进行数据交换。
它具有一个内置的串行通信口(UART),可实现异步和同步串行通信协议。
由于AT89S52单片机具有较小的尺寸和低功耗特性,因此非常适合用于嵌入式系统和便携式设备中。
它可以与各种传感器、执行器和显示器等外部设备配合使用,实现各种功能,如温度监测、智能控制和数据显示等。
简而言之,AT89S52单片机是一款功能强大的微型电子控制器,具有广泛的应用领域。
它适用于各种电子设备和嵌入式系统,可以实现各种功能和任务。
下面我们将进一步介绍AT89S52单片机在工业自动化领域的应用。
第二篇:AT89S52单片机在工业自动化中的应用(1500字)AT89S52单片机在工业自动化中起着重要的作用。
工业自动化是利用电子控制系统和计算机技术,对工业生产过程进行自动化控制和管理的一种技术手段。
(一)MSC-51单片机中断系统的结构一.外部中断源1.INT0:外部中断0,由P3.2端口线引入,低电平或下降沿引起。
IT0:INT0触发方式控制位,可由软件进和置位和复位。
IT0=0,INT0为低电平触发方式。
IT0=1,INT0为负跳变触发方式。
IE0:INT0中断请求标志位。
当有外部的中断请求时,这位就会置1(这由硬件来完成)。
当CPU响应中断后,由硬件将IE0清0。
2.INT1:外部中断1,由P3.3端口线引入,低电平或下降沿引起。
IT1:INT0触发方式控制位,可由软件进和置位和复位IT1=0,INT1为低电平触发方式IT1=1,INT1为负跳变触发方式IE1:INT1中断请求标志位当有外部的中断请求时,这位就会置1(这由硬件来完成)当CPU响应中断后,由硬件将IE0清0二.内部中断源1.T0:定时器/计数器0中断,由T0计满回零引起。
TF0:定时器T0的溢出中断标记。
当T0计数产生溢出时,由硬件置位TF0。
当CPU响应中断后,再由硬件将TF0清0。
2.T1:定时器/计数器1中断,由T1计满回零引起。
TF1:定时器T0的溢出中断标记。
当T1计数产生溢出时,由硬件置位TF1。
当CPU响应中断后,再由硬件将TF1清0。
与定时/计数相关的特殊功能寄存器TMOD和TCONⅠ、TMOD:用于设置T/C的工作方式GATE:门控制位,用于控制定时器的启动是否受外部中断源信号的影响。
GATE=0时,与外部中断无关。
C/T:功能选择位,当C/T=1时为计数方式,C/T=0时为定时方式。
Ⅱ、TCON:TF0(TF1):为T0(T1)定时器溢出中断标志位。
TR0(TR1):为T0(T1)运行控制位,当TR0(TR1)=1是启动T0(T1)3.TI/RI:串行I/O中断,串行口完成一帧字符发送/接收后引起。
(二)中断允许寄存器IE作用:中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。
EA--ES ET1EX1ET0EX0EA:总开关,如果它等于0,则所有中断都不允许。
AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
1、与MCS-51单片机产品兼容;2、8K字节在系统可编程Flash存储器;3、1000次擦写周期;4、全静态操作:0Hz-33MHz;5、三级加密程序存储器;6、32个可编程I/O口线;7、三个16位定时器/计数器;8、六个中断源;9、全双工UART串行通道;10、低功耗空闲和掉电模式;11、掉电后中断可唤醒;12、看门狗定时器;13、双数据指针;14、掉电标识符。
AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程AT89S52引脚图DIP封装Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
P0 口:P0口是一个8位漏极开路的双向I/O口。
AT89S52单片机中断系统 - 单片机AT89S52单片机的中断系统共有8个中断源,6个中断矢量,两级中断优先级,可实现两级中断服务程序嵌套,通过软件来屏蔽或允许相应的中断请求。
每一个中断源可以编程为高优先级中断或低优先级中断,允许或禁止向CPU申请中断。
中断系统的特殊功寄存器有中断允许寄存器IE、中断优先级寄存器IP等。
图1为AT89S52单片机的中断系统结构示意图。
AT89S52有两个外部中断源INT0、INT1;串口通信有接收和发送两个中断源,经过一个或门,公用同一个中断矢量;定时器/计数器0、定时器/计数器1的溢出中断源对应两个中断矢量;定时/计数器2有计数溢出和捕获两种中断源,经或门共用一个中断矢量。
图1 中断系统结构示意图 (1) 来自P3.2引脚上的外部中断请求(外部中断0),低电平或下降沿(从高到低)有效,通过设置IT0的值可将外部中断0设置为低电平触发或下降沿触发,IT0=0时,为电平触发方式,当引脚上出现低电平时就向CPU申请中断;IT0=1时,为跳变触发方式,当引脚上出现负跳变时,置位TCON.1的IE0中断请求标志位,向CPU申请中断。
CPU在每个机器周期的S5P2状态采样IE0标志位,当条件满足,则响应中断请求。
(2) 来自P3.3引脚上的外部中断请求(外部中断1),低电平或下降沿有效。
其功能与操作同。
(3) T0 片内定时器/计数器0溢出(TF0)中断请求。
定时/计数器0无论内部定时或对外部事件T0计数,当计数器(TH0、TL0)计数溢出,置位TCON.5的TF0中断请求标志位。
CPU在每个机器周期的S5P2状态时采样TF0标志位,当条件满足时CPU响应中断请求,转向对应的中断矢量,执行该中断服务程序,并由硬件自动将TF0标志位清0。
(4) T1片内定时器/计数器1溢出(TF1)中断请求。
其功能和操作类似定时/计数器0。
其中断请求标志位为TCON.7的TF1。
(5) T2片内定时器/计数器2溢出中断请求。
1第5章AT89S52中断系统及应用本章要点:➢了解中断的基本概念、中断的作用及中断请求方式➢掌握AT89S52单片机中断结构➢掌握AT89S52单片机6个中断源的中断请求、中断屏蔽、优先级设置等初始化编程方法➢掌握非接触式IC卡门禁系统的中断应用方法5.1中断的概念为了提高CPU的工作效率以及对实时系统的快速响应,产生了中断控制方式的信息交换。
在日常生活中广泛存在着“中断”的例子。
例如一个人正在看书,这时电话铃响了,于是他将书放下去接电话。
为了在接完电话后继续看书,他必须记下当时的页号,接完电话后,将书取回,从刚才被打断的位置继续往下阅读。
由此可见,中断是一个过程。
计算机是这样处理的,当有随机中断请求后,CPU暂停执行现行程序,转去执行中断处理程序,为相应的随机事件服务,处理完毕后CPU恢复执行被暂停的现行程序。
在这个过程中,应注意如下几方面:✓外部或内部的中断请求是随机的,若当前程序允许处理应立即响应;✓在内存中必须有处理该中断的处理程序;✓系统怎样能正确地由现行程序转去执行中断处理程序;✓当中断处理程序执行完毕后怎样能正确地返回。
现在再从另一方面分析,整个中断的处理过程就像子程序调用,但是本质的差异是调用的时间是随机的,调用的形式是不同的。
因此,是否可以认为处理中断的过程是一种特殊的子程序调用。
如图5.1和图5.2 所示。
中断有两个重要特征:程序切换(控制权的转移)和随机性。
图5.1 子程序调用过程图5.2中断的执行过程5.2AT89S52中断源与中断向量地址中断源就是向CPU发出中断请求的来源。
AT89S52共有六个中断源:2个外部中断(INT0和INT1)、3个定时器中断(定时器0、1和2)和1个串行中断。
如图5.3所示。
2 5.2.1外部中断外部中断包括外部中断0和外部中断1。
它们的中断请求信号分别由单片机引脚/P3.2和/P3.3输入。
外部中断请求有两种信号方式:电平方式和脉冲方式。
1第5章AT89S52中断系统及应用本章要点:➢了解中断的基本概念、中断的作用及中断请求方式➢掌握AT89S52单片机中断结构➢掌握AT89S52单片机6个中断源的中断请求、中断屏蔽、优先级设置等初始化编程方法➢掌握非接触式IC卡门禁系统的中断应用方法5.1中断的概念为了提高CPU的工作效率以及对实时系统的快速响应,产生了中断控制方式的信息交换。
在日常生活中广泛存在着“中断”的例子。
例如一个人正在看书,这时电话铃响了,于是他将书放下去接电话。
为了在接完电话后继续看书,他必须记下当时的页号,接完电话后,将书取回,从刚才被打断的位置继续往下阅读。
由此可见,中断是一个过程。
计算机是这样处理的,当有随机中断请求后,CPU暂停执行现行程序,转去执行中断处理程序,为相应的随机事件服务,处理完毕后CPU恢复执行被暂停的现行程序。
在这个过程中,应注意如下几方面:✓外部或内部的中断请求是随机的,若当前程序允许处理应立即响应;✓在内存中必须有处理该中断的处理程序;✓系统怎样能正确地由现行程序转去执行中断处理程序;✓当中断处理程序执行完毕后怎样能正确地返回。
现在再从另一方面分析,整个中断的处理过程就像子程序调用,但是本质的差异是调用的时间是随机的,调用的形式是不同的。
因此,是否可以认为处理中断的过程是一种特殊的子程序调用。
如图5.1和图5.2 所示。
中断有两个重要特征:程序切换(控制权的转移)和随机性。
图5.1 子程序调用过程图5.2中断的执行过程5.2AT89S52中断源与中断向量地址中断源就是向CPU发出中断请求的来源。
AT89S52共有六个中断源:2个外部中断(INT0和INT1)、3个定时器中断(定时器0、1和2)和1个串行中断。
如图5.3所示。
2 5.2.1外部中断外部中断包括外部中断0和外部中断1。
它们的中断请求信号分别由单片机引脚/P3.2和/P3.3输入。
外部中断请求有两种信号方式:电平方式和脉冲方式。
电平方式的中断请求信号是低电平有效,即只要在或引脚上出现低电平时,就激活外部中断标志。
脉冲方式的中断请求信号则是脉冲的负跳变有效。
在这种方式下,在两个相邻机器周期内,或引脚电平状态发生变化,即在第一个机器周期内位为高电平,第二个机器周期内为低电平,就激活外部中断标志。
5.2.2内部定时和外部计数中断单片机芯片内部有三个定时器/计数器,对脉冲信号进行计数。
若脉冲信号为内部振荡器输出的脉冲(机器周期信号),则计数脉冲的个数反映了时间的长短,称为定时方式。
若脉冲信号为来自T0/P3.4、T1/P3.5、T2/P1.0的外部脉冲信号,则计数脉冲的个数仅仅反映外部脉冲输入的多少,称为计数方式。
当定时器/计数器发生溢出(计算器状态由FFFFH再加1,变为0000H状态),CPU查询到单片机内部硬件自动设置的一个溢出标志位为1时,便激活中断。
定时方式中断由单片机芯片内部发生,不需要在芯片外部设置引入端。
计数方式中断外部输入脉冲(负跳变)引起,脉冲加在引脚T0/P3.4、T1/P3.5、T2/P1.0端。
5.2.3串行中断串行中断是为串行通信的而需要设置的。
当串行口发送完或接收完一帧信息时,单片机内部硬件便自动串行发送或接收中断标志位置1。
当CPU查询到这些标志位为1时,便激活串行中断。
串行中断是由单片机内部自动发生的,不需要在芯片外设置引入脚。
5.2.4中断矢量地址中断源发出请求,CPU响应中断后便转向中断服务程序。
中断源引起的中断服务程序入口地址即为中断矢量地址。
中断向量地址是固定的,用户不可改变。
中断服务入口地址如表5.1所示。
表5.1 中断源及其对应的矢量地址中断源中断标志位中断矢量地址外部中断0()IE00003H 定时器0(T0)中断TF0000BH 外部中断1()IE10013H 定时器1(T1)中断TF1001BH串行口中断发送中断TI0023H 接收中断RI定时器2(T2)中断T2溢出中断TF2002BH T2EX中断EXF2由于两个相邻的中断服务程序入口地址间隔仅为8字节,一般的中断服务程序是容纳不下的。
通常是在相应的中断服务程序入口地址中放一条长跳转指令LJMP,这样就可以转到64KB的任何可用区域了。
若在2KB范围内转移,则可存放AJMP指令。
由于0003H~002BH是中断矢量地址区,因此,单片机应在程序入口地址0000H处放一条无条件转移指令(如LJMP XXXXH),转到指定的主程序地址。
5.3中断标志与控制要实现中断,首先中断源要提出中断申请,而中断请求的过程是单片机内部特殊功能寄存器TCON和SCON相关状态位—中断请求标志位置1的过程,当CPU响应中断时,中断请求标志位才由硬件或软件清0。
5.3.1定时器/计数器控制寄存器TCONTCON主要用于寄存外部中断请求标志、定时器溢出标志、和外部中断触发方式的选择。
该寄存器的字节地址是88H,可以位寻址;位地址是88H~8FH。
其格式如下:位序D7D6D5D4D3D2D1D0位标志TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H其中与中断有关的控制位共6位:IE0和IE1:外部中断请求标志。
当CPU采样到(或)端出现有效中断请求(低电平或脉冲下降沿)时,IE0(或IE1)位由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。
IT0和ITl:外部中断请求信号触发方式控制标志。
IT0(或IT1)=1,(或)信号为脉冲触发方式,脉冲负跳沿有效;IT0(或IT1)=0,(或)信号电平触发方式,低电平有效。
IT0(或IT1)位可由用户软件置1或清0TF0和TFl:定时器/计数器溢出中断请求标志。
当定时器0(或定时器1)产生计数溢出时,TF0(或TF1)由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。
TR0和TR1:TR0(或TR1)=1,表示启动定时器0(或定时器1);该标志位也可用于查询方式,即用户程序查询该位状态,判断是否应转向对应的处理程序段。
待转如处理程序后,必须由软件清0。
5.3.2串行口控制寄存器SCONSCON的字节地址是98H,可以位寻址;位地址是98H~9FH。
其格式如下:位序D7D6D5D4D3D2D1D0位标志SM0SM1SM2REN TB8RB8TI RI位地址9FH9EH9DH9CH9BH9AH99H98H其中与中断有关的控制位共2位:TI:串行口发送中断请求标志。
当串行口发送完一帧信号后,由片内硬件自动置1。
但CPU响应中断时,并不清除TI,必须在中断服务程序中由软件对TI清0。
RI:串行口接收中断请求标志。
当串行口接收完一帧信号后,由片内硬件自动置1。
但CPU响应中断时,并不清除RI,必须在中断服务程序中由软件对其清0。
应当指出,AT89S52系统复位后,TCON和SCON中各位被复位成“0”状态,应用时要注意各位的初始状态。
5.3.3中断允许控制寄存器IECPU对中断源的开放和屏蔽,以及每个中断源是否被允许中断,都受中断允许寄存器IE控制。
中断允许控制寄存器IE对中断的开放和关闭实行两级控制。
即有一个总中断位EA。
5个中断源还有各自的控制位进行控制。
,力量看来,-IE寄存器的字节地址是A8H,可以位寻址;位地址是A8H~AFH。
其格式如下:位序D7D6D5D4D3D2D1D0位标志EA—ET2ES ET1EX1ET0EX0位地址AF AEH ADH ACH ABH AAH A9H A8H其中与中断有关的控制位共7位:EA:中断允许总控制位。
EA=0时,中断总禁止,禁止一切中断;EA=1时,中断总允许,而每个中断源允许与禁止,分别由各自的允许位确定。
EX0和EX1:外部中断允许控制位。
EX0(或EX1)=0,禁止外部中断(或);EX0(或EX1)=1,允许外部中断(或)。
ET0和ET1:定时器中断允许控制位。
ET0(ET1)=0,禁止定时器0(或定时器1)中断;ET0(ET1)=1,允许定时器0(或定时器1)中断。
ES:串行中断允许控制位。
ES=0,禁止串行(TI或RI)中断;ES=1,允许串行(TI或RI)中断。
ET2:定时器2中断允许控制位。
ET2=0,禁止定时器2(TF2或EXF2)中断;ET2=1,允许定时器2(TF2或EXF2)中断;在单片机复位后,IE各位被复位成“0”状态,CPU处于关闭所有中断的状态。
所以,在单片机复位以后,用户必须通过程序中的指令来开放所需中断。
5.3.4中断优先级控制寄存器IPAT89S52单片机具有高、低2个中断优先级。
高优先级用“1”表示,低优先级用“0”表示。
各中断源的优先级由中断优先级寄存器IP进行设定。
IP寄存器字节地址为B8H,可以位寻址;位地址为0BFH~0B8H。
寄存器的内容及位地址表示如下:位序D7D6D5D4D3D2D1D0位标志——PT2PS PT1PX1PT0PX0位地址BF BEH BDH BCH BBH BAH B9H B8H其中与中断有关的控制位共6位:PX0:外部中断0()中断优先级控制位;PT0:定时器0(T0)中断优先级控制位;PX1:外部中断1()中断优先级控制位;PT1:定时器1(T1)中断优先级控制位;PS:串行口中断优先级控制位;PT2:定时器2(T2)中断优先级控制位。
各中断优先级的设定,可用软件对IP的各位置1或清0,为1时是高优先级,为0时是低优先级。
当系统复位后,IP各位均为0,所有中断源设置为低优先级中断。
例如:CPU开中断可由以下两条指令来实现:SETB 0AFH ;EA置1或0RL IE,#80H ;按位“或”,EA置1CPU关中断可由以下两条指令来实现:CLR 0AFH ;EA清0或ANL IE,#7FH ;按位“与”,EA清0又如设置外部中断源为高优先级,外部中断源为低优先级,可由下面指令来实现:SETB 0B8H ;PX0置1CLR 0BAH ;PXl清0或MOV IP,#000××0×1B ;PX0置1,PXl清05.4优先级结构中断优先级只有高低两级,所以在工作过程中必然会有两个或两个以上中断源处于同一中断优先级。
若出现这种情况,内部中断系统对各中断源的处理遵循以下两条基本原则:1.低优先级中断可以被高优先级中断所中断,反之不能;2.一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。
当CPU同时收到几个同一优先级的中断请求时,CPU将按自然优先级顺序确定应该响应哪个中断请求。
其自然优先级排列如下:中断源同级自然优先级外部中断0 最高级定时器0中断外部中断1定时器1中断串行口中断定时器2中断最低级【例5.1】设AT89S52的片外中断为高优先级,片内中断为低优先级。