找回密码
 立即注册
楼主: YangHY

第一课 序言《AI8051U的特点》

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-5 20:40:13 | 显示全部楼层
普通外部中断 任务二 一进入主函数先执行while 显示0
按P33 低电平触发不松手显示1
按P47 低电平触发不松手显示2
数码管显示0:执行while函数 显示1:执行P3_I0中断
显示2:执行P4_I0中断

因为是普通外部中断40比41中断等级高,按住P33后再按P47
不管怎样都不会响应P47中断,倒过来按住P47后再按P33
肯定先执行P00的40号中断,然后假如松手P33,而P47不松手
就执行P47的41号中断,P47松手就返回while,使用AI8051U
特有的普通IO口中断,也是正常按优先级来
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-5 20:54:08 | 显示全部楼层
先把P4 调为最高中断优先级


void P4_IO_Init(void)   //P47端口用作中断初始化
{
        P4IM0 = 0X00; //P4口中断模式为低电平中断
        P4IM1 = 0xFF;
        P4INTE= 0X80; //使能 P4.7 口中断,7是最高位对应0X80

        PINIPH |=  (1<<4);  //设置P47口中断优先级为3级(最高)1<<4就是0x10
        PINIPL  |=  (1<<4);    //写入最高优先级,|是不影响其他位
//这样你会发现出问题了,定时器0的优先级都给搞低
//了,所以无法正常显示2,所以要去把定时器0 的优先级也调整到最高
        
}


接着要把定时器0 的优先级也调整到最高:



void Timer0_Init(void)                //1毫秒@24.000MHz
{
        TM0PS = 0x00;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x30;                                //设置定时初始值
        TH0 = 0xF8;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断

        IPH |=  (1<<1);  //把定时器0优先级设置为最高
        IP  |=  (1<<1);


}


这样就正常了

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-5 20:54:47 | 显示全部楼层
优先级是要规划的:

截图202601052054459161.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-5 20:56:26 | 显示全部楼层
课后:

第十四课到此结束
截图202601052055535244.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-9 19:02:01 | 显示全部楼层
先复习一下中断优先级:

例如把P4口中断优先级搞到最高:

void P4_IO_Init(void)   //P47端口用作中断初始化
{
        P4IM0 = 0X00; //P4口中断模式为低电平中断
        P4IM1 = 0xFF;
        P4INTE= 0X80; //使能 P4.7 口中断,7是最高位对应0X80

        PINIPH |=  (1<<4);    //设置P47口中断优先级为3级(最高)
        PINIPL |=  (1<<4);    //写入最高优先级加或|是不想干扰其他位
//这样你会发现出问题了,定时器0的优先级都给搞低
//了,所以无法正常显示2
       
}
截图202601091901046167.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-9 19:04:26 | 显示全部楼层
然后我们把定时器0的中断优先级也调整到最高:

void Timer0_Init(void)                //1毫秒@24.000MHz
{
        TM0PS = 0x00;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x30;                                //设置定时初始值
        TH0 = 0xF8;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断

        IPH |=  (1<<1);  //把定时器0优先级设置为最高
        IP   |=  (1<<1);  //加或|是不想干扰其他位


}
截图202601091903548837.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-9 19:07:58 | 显示全部楼层
这里定时器0 的优先级明显应该比端口4的优先级重要

其实现在大家都是最高级,但定时器是排在前面的,

应该没问题:

截图202601091907543183.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-9 19:11:50 | 显示全部楼层
现在感觉前面没有试验箱的时候

看的太快了,好几个实验都没有好好做

毕竟是借的试验箱,操作时间有限,打算回过头去

重新再做一次!

前天收到试验箱了,感谢STC,感谢姚总和赵经理

先把第14集的实验再做一次!

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-9 19:18:14 | 显示全部楼层
先复习第13集:

14中断系统
中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在 CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。
当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。
用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使 CPU响应相应的中断申请,每一个中断源可以用软件独立地控制为开中断或关中断状态,部分中断的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。

总结一下:

当中央处理机 CPU正在处理某件事的另外界发生了紧急事件请求,CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再同到项京缺由每给地方,维体分水的工作,这样的过程称为中断,实现这种功能的部件称为中断系统。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-9 19:20:19 | 显示全部楼层
中断是可以嵌套的:

CPU 总是先响应优先级别最高的中断请求
CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,每一个中断源可以用软件独立地控制为开中断或关中断
部分中断的优先级别均可用软件设置,高优先级的中断造求可以打断低优先级的中断

顺序如下图:
截图202601091920164407.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-2 18:23 , Processed in 0.119602 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表