解释下列代码void interrupus_Init() // 中断初始化 { IE=0xaa; //打开中控总开关并允许 T0T1T2 的中断请求 EIE2=0X20; //允许 INT7 中断 EIP2=0x20; //规定 INT7 的中断为高优先级 }
时间: 2023-10-31 16:42:58 浏览: 32
这段代码是中断初始化的函数,主要是配置中断相关的寄存器,使得系统能够正确响应和处理中断请求。具体解释如下:
1. IE=0xaa; //打开中控总开关并允许 T0T1T2 的中断请求
这里设置中断控制寄存器 IE 的值为 0xaa,其中二进制表示为 10101010。这个值的含义是开启所有中断,并且允许 T0、T1 和 T2 的中断请求。这样就可以让系统响应这些定时器的中断请求。
2. EIE2=0X20; //允许 INT7 中断
这里设置外部中断使能寄存器 EIE2 的值为 0x20,其中二进制表示为 00100000。这个值的含义是允许 INT7 外部中断请求。INT7 是一个外部中断源,一般用于处理外部设备的中断请求,例如按键、串口等。
3. EIP2=0x20; //规定 INT7 的中断为高优先级
这里设置外部中断优先级寄存器 EIP2 的值为 0x20,其中二进制表示为 00100000。这个值的含义是将 INT7 外部中断设置为高优先级,这样在多个中断同时发生时,系统会先响应 INT7 中断。
相关问题
#include "system.h" #include "stc8a8k64s4a12.h" void Init_Serial(void) { SCON=0X50; PCON=0X80; ES=1; EA=1; TMOD=0X20; AUXR=0X00; TL1=243; //9600 TH1=243; TR1=1; } void main() { unsigned int i; System_Init(); Init_Serial(); P3_Mode_PullUp(PIN_0|PIN_1); SBUF=0XAA; while(1) { for(i=0;i<50000;i++); SBUF=0XAA; } } void s_int(void) interrupt 4 { if(TI==1) { TI=0; } if(RI==1) { RI=0; } }标注每一行代码的注释
// 引入系统头文件
#include "system.h"
// 引入单片机头文件
#include "stc8a8k64s4a12.h"
// 串口初始化
void Init_Serial(void) {
SCON=0X50; // 8 位数据,可变波特率,允许接收
PCON=0X80; // 波特率不加倍
ES=1; // 允许串口中断
EA=1; // 开启总中断
TMOD=0X20; // 定时器 1,模式 2
AUXR=0X00; // 不使用辅助定时器 1
TL1=243; // 波特率为 9600
TH1=243; // 波特率为 9600
TR1=1; // 启动定时器 1
}
void main() {
unsigned int i;
// 初始化系统
System_Init();
// 初始化串口
Init_Serial();
// 将 P3.0 和 P3.1 引脚设置为上拉输入
P3_Mode_PullUp(PIN_0|PIN_1);
// 发送一个字节的数据
SBUF=0XAA;
// 无限循环
while(1) {
// 延时
for(i=0;i<50000;i++);
// 发送一个字节的数据
SBUF=0XAA;
}
}
// 串口中断处理函数
void s_int(void) interrupt 4 {
if(TI==1) { // 如果是发送中断
TI=0; // 清除发送中断标志位
}
if(RI==1) { // 如果是接收中断
RI=0; // 清除接收中断标志位
}
}
#include "system.h" #include "stc8a8k64s4a12.h" #include "Timer0.h" sbit K1=P3^4; void Init_Serial(void) { SCON=0X50; PCON=0X80; ES=1; EA=1; // TMOD=0X20; TMOD |= 0x20; AUXR=0X00; TL1=243; //9600 TH1=243; TR1=1; } void UART_SendByte(unsigned char Byte) { SBUF=Byte; while(TI==0); TI=0; } void main() { System_Init(); P3_Mode_PullUp(PIN_0|PIN_1); P0_Mode_OUT_PP(0XFF); Init_Serial(); Timer0Init(); while(1) { } } void Timer0_Poutine() interrupt 1//������P3^4������ж� { static unsigned int T0Count; TL0=(65536-3)%256; TH0=(65536-3)/256; P0=~P0; UART_SendByte(0xaa); } void s_int(void) interrupt 4 { if(TI==1) { TI=0; } if(RI==1) { RI=0; if(SBUF==0XAA){P2=0XFE;} if(SBUF==0X55){P2=0XFF;} UART_SendByte(SBUF); } }标注每一行代码的注释
// 引入系统头文件
#include "system.h"
// 引入STC8A8K64S4A12芯片的头文件
#include "stc8a8k64s4a12.h"
// 引入Timer0头文件
#include "Timer0.h"
// 定义P3^4为按键K1
sbit K1=P3^4;
// 初始化串口
void Init_Serial(void) {
SCON=0X50; // 设置串口为工作模式1,8位数据,可变波特率
PCON=0X80; // 波特率加倍
ES=1; // 使能串口中断
EA=1; // 使能总中断
TMOD=0X20; // 设置Timer1为工作模式2
TL1=243; //9600波特率下,Timer1初值为243
TH1=243; // 9600波特率下,Timer1重载值为243
TR1=1; // 启动Timer1
}
// 串口发送一个字节
void UART_SendByte(unsigned char Byte) {
SBUF=Byte; // 把数据保存到SBUF寄存器
while(TI==0); // 等待发送完成
TI=0; // 清除中断标志位
}
void main() {
System_Init(); // 系统初始化
P3_Mode_PullUp(PIN_0|PIN_1); // 设置P3.0和P3.1为上拉输入模式
P0_Mode_OUT_PP(0XFF); // 设置P0口为输出模式
Init_Serial(); // 初始化串口
Timer0Init(); // 初始化定时器0
while(1) { // 主循环
}
}
// 定时器0中断服务函数
void Timer0_Poutine() interrupt 1 {
static unsigned int T0Count; // 定义静态变量,用于计数
TL0=(65536-3)%256; // 设置定时器0初值
TH0=(65536-3)/256; // 设置定时器0重载值
P0=~P0; // 取反P0口状态
UART_SendByte(0xaa); // 发送0xaa,用于测试
}
// 串口中断服务函数
void s_int(void) interrupt 4 {
if(TI==1) { // 判断是否为发送中断
TI=0; // 清除中断标志位
}
if(RI==1) { // 判断是否为接收中断
RI=0; // 清除中断标志位
if(SBUF==0XAA){P2=0XFE;} // 如果收到0xaa,P2口输出0xFE
if(SBUF==0X55){P2=0XFF;} // 如果收到0x55,P2口输出0xFF
UART_SendByte(SBUF); // 发送接收到的数据
}
}