STC89C52MCU--内外部资源1

来源:互联网 发布:nginx 视频点播服务器 编辑:程序博客网 时间:2024/06/06 20:04

中断概念

51单片机油五个中断源

1. INT0 -- 外部中断0,P3.2口 低电平或者下降沿触发中断

2. INT1 -- 外部中断1,P3.3口低电平或者下降沿触发中断

3.T0 -- 定时器/计数器中断,由T0 计数器计满回零引起

4.T1 -- 定时器/计数器中断,由T1 计数器计满回零引起

5.T2 -- 定时器/计数器中断,由T2 计数器计满回零引起 (STC89C52)

6. TI/RI -- 串口中断,串行端口完成一帧字符发送/接收后引起

中断级别中断源默认中断级别序号(C语言用)入口地址(汇编语言)INT0最高00003HT0第二1000BHINT1第三20013HT1第四3001BHTI/RI第五40023HT2第六5002BH

IE(Interrupt Enable)中断允许寄存器

IE寄存器位序号D7D6D5D4D3D2D1D0位符号EA-ET2ESET1EX1ET0EX0位地址AFH-ADHACHABHAAHA9HA8HEA -- 全局中断允许位,在此条件下,由各个中断控制位确定相应中断的打开或者关闭

ET2 -- 定时器2中断允许位

EX0 -- 外部中断0中断允许位

ES-- 串行中断允许位

以上位为1时打开相应中断,设置为0时候关闭中断

IP(Interrupt Priority)中断优先寄存器

IP寄存器位序号D7D6D5D4D3D2D1D0位符号   PSPT1PX1PT0PX0位地址   BCHBBHBAHB9HB8HPS -- 串行口优先级控制位

PT1 -- 定时器1优先级控制位

PX1 -- 外部中断1优先级控制位

以上位地址设置为1则为高优先级中断,否则为低优先级中断

51单片机定时器/计数器

51单片机中有两个16位可编程的定时器/计数器,由高低两个八位寄存器组成。TMOD寄存器是定时器/计数器的工作方式寄存器,TCON是控制寄存器,控制T0,T1的启动和停止以及设置溢出位。 加1计数器技术脉冲有两个来源,一个是由系统时钟振荡器的12分频后送来;另外一个个是T0或T1引脚引入的外部脉冲源,每来一个脉冲计数器加一次,当加到计数器全为1时,再输入一个脉冲就使计数器清零,且计数器的益处使TCON寄存器中的TF0或TF1置一,向CPU发出中断请求()计数器中断使能时),如果工作于定时模式,表示定时时间已到;如果工作在基数模式,则表示计数已满。

所以 计数值N * Tcy = 定时时间t; 设置为计数模式时,外部事件技术脉冲由T0和T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器T0、T1加1,更新的计数值在下一周期的S3P1期间装入计数器。由于检测一个从1~0的下降沿需要两个机器周期,因此要求被采样的电平至少维持一个机器周期。当晶振频率为12MHZ时候, 最高计数频率不能超过 1/2MHZ,即技术脉冲频率要大于2us.

计数器/定时器工作方式寄存器TMOD

TMOD寄存器位序号 D7 D6 D5 D4 D3D2 D1 D0 位符号GATE C/T M1M0GATE C/T M1M0高四位是定时器1控制位;低四位是T0控制位,字节为止89H,不能位寻址。单片机复位时候TMOD全部清零。

GATE:门控制位,GATE = 0 定时器/计数器启动与停止仅受TCON寄存器中TRX(X=0,1)来控制,如果GATE=1, 则由TCON的TRX和外部中断引脚(INT0和INT1)上的电平状态共同决定。

C/T = 1,计数器模式;C/T = 0则为定时器模式

M1M0: 工作方式选择位,定时器/计数器的4种工作方式

M0M1M1M0工作方式0013计数器/定时器0116定时器/计数器108位初值自动装填的8位定时器/计数器11仅适用于T0,分成两个八位计数器,T1停止计数

定时器/计数器控制寄存器TCON

TCON位序号D7D6D5D4D3D2D1D0位符号TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H寄存器上电清零并且可以为操作
TF1/TF0: 硬件置位,并且申请中断,进入中断程序中由硬件置零,所以不需要在中断中进行操作;如果是软件查询方式的话,查询到一的话要软件清零。
TR1/TR0:定时器运行控制位,GATE = 0时,TR1/TR0置1启动定时器;如果GATE = 1,INT1/INT0置1且TR1/TR0置1,才可以启动定时器/计数器。软件清零关闭定时器。

IE1: 外部中断1请求标志位,该位置由硬件置位和清零。

IT1: 外部中断触发方式选择位置,0 = 下降沿触发方式; 1 = 低电平有效

计数器初始化: THX= (65536 - N)256 TLX= (65536 - N)% 256N= t / Tcy


中断服务程序的写法

void 函数名() interrupt 中断号 using 工作组

{

中断服务程序内容

}

中断服务程序不能有参数和返回值,using 工作组是指这个中断函数使用单片机内存中4组工作寄存器中的哪一组,C51编译器在编译程序时候回自动分配工作组。


#include<reg52.h>


#define uchar undigned char
#define uint unsigned int
sbit led1 = P1^0;
uchar num =0;


void main()
{
TMOD = 0x01;
TH0 = (65536 - 45872)/256;
TH0 = (65536 - 45872)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
whiel()
{
if(num ==20)
{
num =0;
led1 = ~led1;
}
}
}


void T0_time() interrupt 1
{
TH0 = (65536 - 45872)/256;
TH0 = (65536 - 45872)%256;
num++;
}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅族手机费电快怎么办 魅族mx4pro玩王者荣耀卡怎么办 魅蓝5s玩游戏卡怎么办 魅蓝s6玩游戏卡怎么办 OPPO王者荣耀对局闪退怎么办 魅族手机太慢怎么办 魅蓝5信号不好怎么办 魅蓝数据网速慢怎么办 魅族联通网速慢怎么办 魅族手机wifi信号弱怎么办 魅蓝e2信号差怎么办 魅蓝e2gps信号弱怎么办 魅族网络信号差怎么办 魅族手机gps信号弱怎么办 魅族手机突然没有信号怎么办 魅族手机流量信号不好怎么办 魅族手机wifi信号差怎么办 魅族5s信号不好怎么办 魅族mx5的双击不亮屏怎么办 魅族mx5返回键失灵怎么办 电信苹果3g网速慢怎么办 魅蓝6开不了机怎么办 手机应用被锁了怎么办 魅族电池不耐用怎么办 魅族mx6现在很卡怎么办 魅族e2手机屏幕背景黑色怎么办 魅族x6手机锁了怎么办 360n5返回键失灵怎么办 360n5返回键不好用怎么办 魅族手机锁屏怎么办 魅族手机锁住了怎么办 手机己锁定怎么办魅族 魅蓝u10触屏没反应怎么办 魅蓝e2手机锁定怎么办 苹果手机声音键坏了怎么办 一加6的屏幕问题怎么办 魅蓝note6卡顿怎么办 苹果4s内屏坏了怎么办 魅族mx6一直重启怎么办 魅族充电慢了怎么办啊 笔记本玩游戏掉帧怎么办