wuzhengmin
发表于 2025-8-22 12:10:48
外部中断x:x=2-4触发只有下降沿,触发后它就会标记为这个INTxIF的一个标志位,如果说我们打开了EX2和EX3,优先级位最低,不能改中断优先级外部中断x:x=2-4INTxIFEXn
EA
wuzhengmin
发表于 2025-8-22 12:38:05
下面看外部中断1的例子:外部中断1:IT1IE1EX1EAIE1:外部中断1请求源(INTI/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该中断时由硬件清“0”IE1。
ITI:外部中断源1触发控制位。ITI-0,上升沿或下降沿均可触发外部中断1.ITI-1,外部中断1程控为下降沿触发方式。EXI:外部中断 1 中断允许位。0:禁止 INTI 中断1:允许 IN1 中断
打开手册看P771:
15.5.3INT1 中断(上升沿和下降沿),可同时支持上升沿和下降沿
设置还是3步:
IT1=1; //使能INT1 下降沿中断EX1=1;//使能INT1 中断
EA=1;//打开总中断
对应中断函数中断号是2
void INT1_Isr() interrupt 2{
}
wuzhengmin
发表于 2025-8-22 12:46:15
各个中断服务函数对应的中断号,见下图:
试验箱上默认端口是高电平,按下就是低电平!
wuzhengmin
发表于 2025-8-22 13:24:04
任务1:编写外部中断1的程序
void INT1_Init(void) //INT1中断(上升沿和下降沿)P33按下,0可同时支持上升沿和下降沿
{
IT1 = 1; //下降沿中断,0是上升沿和下降沿都可以
EX1 = 1; //打开中断允许
EA = 1; //打开总中断
}
void INT_ISR(void) interrupt 2//INT1中断(上升沿和下降沿)P33按下,可同时支持上升沿和下降沿
{
P04 = !P04;
P05 = !P05;
P06 = !P06;
P07 = !P07;
//P33按下,P01就取反
}当然,首先要在main.c里初始化:
INT1_Init();//外部中断1(P33按下)中断初始化 //外部中断1初始化
wuzhengmin
发表于 2025-8-26 10:44:33
第十四集 先看第十七集 串口的简单应用
今天我们先跳到串口:
串口是最常用,最基本的通讯方法,我们从STC89C51开始就经常用,先看看这段代码:
//1.发送OPEN\r\n打开数码管,数码管显示“- - - -” 11 22 OPEN\r\n
//2.发送CLOSE\r\n打开数码管,数码管全部熄灭
//3.再打开的情况下,串口发送DAT+123\r\n,数码管显示数值“123”
void Usart2_RunTask(void)
{
if( Rec_Num >= 6 ) //是否接收到了6位以上的数据
{
if(( Rec_Dat == '\n' ) && ( Rec_Dat == '\r' ) ) //末尾判断
{
if( ( Rec_Dat == 'O' ) && ( Rec_Dat == 'P' ) && ( Rec_Dat == 'E' ) && ( Rec_Dat == 'N' ))
{ }
if( ( Rec_Dat == 'D' ) && ( Rec_Dat == 'A' ) &&( Rec_Dat == 'T' ) && ( Rec_Dat == '+' ) && ( Rec_Dat == '1' ) && ( Rec_Dat == '2' ) && ( Rec_Dat == '3' ))
{
passward = 8;
passward = 8;
passward = 8;
passward = 8;
Uart2_SendStr( "DAT+123!\r\n" );
}
}
Rec_Num = 0;
}
}
}
上面是 单片机接收到DAT+123\r\n 就先在数码管前4位显示8888 接着通过串口2发送“DAT+123!”
wuzhengmin
发表于 2025-8-26 10:46:34
我们故意多回复一个!给PC,表面收到的是“DAT+123\r\n”
回复的是 “ DAT+123!\r\n”
wuzhengmin
发表于 2025-8-26 11:17:26
这里其实要理解结束符“\r\n”
仔细看下图:
页:
7
8
9
10
11
12
13
14
15
16
[17]