51单片机-STC89C52系列学习第三篇之中断学习

八个中断请求源:
1、外部中断0
2、外部中断1
3、外部中断 2
4、外部中断3
5、定时器0中断
6、定时器1中断
7、定时器2中断
8、串口中断
所有的中断都具有四个中断优先级:
优先级0:0,0(最低)
优先级1:0,1
优先级2:1,0
优先级3:1,1(最高)
中断触发方式:
外部中断0、1、2、3既可低电平触发也可下降沿触发。
定时器中断0、1:溢出
串口中断:发送或接收完成
在这里插入图片描述
C语言编程,中断查询次序号就是中断号:
void Int0_ISR(void) interrupt 0;
void timer0_ISR(void) interrupt 1;
void Int1_ISR(void) interrupt 2;
void timer1_ISR(void) interrupt 3;
void uart_ISR(void) interrupt 4;
void timer2_ISR(void) interrupt 5;
void Int2_ISR(void) interrupt 6;
void Int3_ISR(void) interrupt 7;

中断寄存器:

符号描述地址
IE中断使能寄存器0XA8
IP中断优先级(低)寄存器0XB8
IPH中断优先级(高)寄存器0XB7
TCON定时器、计数器0和1控制寄存器0X88
SCON串口控制 寄存器0X98
T2CON定时器、计数器2控制寄存器0XC8
XICON中断辅助控制寄存器0XC0
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的STC89C5251单片机数字时钟程序,以下是代码: ```c #include<reg52.h> //包含STC89C52的头文件 unsigned char second, minute, hour; //定义秒、分、时变量 void delay(unsigned int i) //延时函数 { unsigned int j, k; for(j=0;j<i;j++) for(k=0;k<125;k++); } void display(unsigned char num) //数码管显示函数 { unsigned char code table[]={ // 0 1 2 3 4 5 6 7 8 9 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; P0 = table[num]; //将数码管段码通过P0口输出 } void main() { TMOD = 0x01; //设置计时器T0为模式1 TH0 = 0x3c; //设置计时器T0的初始值 TL0 = 0xb0; TR0 = 1; //启动计时器T0 ET0 = 1; //允许计时器T0中断 EA = 1; //开启总中断 while(1) { display(hour/10); //显示时的十位 P2 = 0xfe; //选择第一位数码管 delay(5); //延时5毫秒 display(hour%10); //显示时的个位 P2 = 0xfd; //选择第二位数码管 delay(5); display(minute/10); //显示分的十位 P2 = 0xfb; //选择第三位数码管 delay(5); display(minute%10); //显示分的个位 P2 = 0xf7; //选择第四位数码管 delay(5); display(second/10); //显示秒的十位 P2 = 0xef; //选择第五位数码管 delay(5); display(second%10); //显示秒的个位 P2 = 0xdf; //选择第六位数码管 delay(5); } } void timer0() interrupt 1 //计时器T0中断函数 { TH0 = 0x3c; //重置计时器T0的初始值 TL0 = 0xb0; second++; //秒数加1 if(second == 60) //如果秒数等于60,进位到分 { second = 0; minute++; if(minute == 60) //如果分数等于60,进位到时 { minute = 0; hour++; if(hour == 24) //如果小时等于24,归零 { hour = 0; } } } } ``` 您可以根据自己的需要对代码进行修改,比如更改延时时间、数码管接口等。希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值