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

第一课 序言《AI8051U的特点》

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:13:42 | 显示全部楼层
PnIM1.x     n代表端口
PnIMO.x   .x就是第几位
Pn.x 口中断模式

比如B0这列: P00M0=0  P00M1=0 P01就是下降沿模式

接着看中断使能:

截图202601262113409968.jpg
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:16:31 | 显示全部楼层
还是P00这位:
P00INTE =1 就可以使能中断了

每一个脚位都是独立的:



截图202601262116295249.jpg
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:18:39 | 显示全部楼层
接着看端口中断标志寄存器(PxINTF)

只要前面的模式和一个中断打开,一旦触发了以后

这里就会触发这个PXINTF的这个寄存器:

截图202601262118368048.jpg
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:19:39 | 显示全部楼层
中断号的处理:

截图202601262119363310.jpg
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:21:00 | 显示全部楼层
不装这个插件的话,中断号太大

插件的安装方法:

截图202601262120574912.jpg
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:22:47 | 显示全部楼层
还可以用13号中断装接:

截图202601262122446679.jpg
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:25:52 | 显示全部楼层
  1. void main(void)
  2. {
  3.         Sys_init();                                                                                //系统初始化
  4.         usb_init();                                     //USB CDC 接口配置
  5.     IE2 |= 0x80;                                    //使能USB中断
  6.         Timer0_Init();                                                                        //定时器初始化
  7.         Init_595();
  8. //        INT1_Init();  //外部中断1(P33按下)中断初始化                                                                        //外部中断1初始化
  9.         P3_IO_Init(); //P3端口用作中断初始化,(P33按下)
  10. //上面这句实际是IO初始化,是所有IO口都能
  11. //用作外部中断的,之所以还用P33,主要是实验板约束       
  12.         EA = 1;                                                                                        //IE |= 0X80;
  13.        
  14.         P40 = 0;
  15.        
  16.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  17. //        WDT_CONTR = 0X24;
  18.        
  19.         while(1)
  20.         {
  21.                
  22.         if (bUsbOutReady)                                                        //如果接收到了数据
  23.         {
  24.             //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  25.                        
  26.             usb_OUT_done();                                                        //
  27.         }
  28. //                Task_Pro_Handler_Callback();                                //执行功能函数
  29. //                if(P33 !=0)
  30. //                        WDT_CONTR = 0X34;
  31.                
  32.                 P00 = !P00;
  33.                 P01 = !P01;
  34.                 P02 = !P02;
  35.                 P03 = !P03;
  36.                
  37.                
  38.                
  39.                 Delay3000ms();
  40.                
  41. /*不信中断,可以用下面代码替换
  42.                 if(P33==0)
  43.                 {
  44.                         P04 = !P04;
  45.                         P05 = !P05;
  46.                         P06 = !P06;
  47.                         P07 = !P07;
  48.                
  49.                 }
  50. 你会发现,P33就很不灵光了吧?*/
  51.         }
  52. }
复制代码

我们把上节课的外部中断关了:
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:27:45 | 显示全部楼层
  1. void P3_IO_Init(void)   //P3端口用作中断初始化
  2. {
  3.         P3IM0 = 0X00; //P3口中断模式为下降沿中断
  4.         P3IM1 = 0x00;
  5.         P3INTE= 0X08; //使能 P3.3 口中断
  6. //        P3IM0 = 0X00;                //IO中断模式设置为了下降沿
  7. //        P3IM1 = 0Xff;
  8. //       
  9. //        P3INTE= 0X08;                //打开中断               
  10.        
  11. }
  12. void P3_IO_ISR(void) interrupt 40    //P3端口用作中断初始化
  13. {
  14.         u8 intf;
  15.         intf = P3INTF;
  16.         if(intf)  //判断intf是否为0,为0就是没有触发
  17.         {
  18.                 P3INTF = 0;       
  19.                 if(intf & 0X08)  //判断是否P33按下  01就是P30,02就是P31,04就是P32
  20.                 {
  21.                         P04 = !P04;
  22.                         P05 = !P05;
  23.                         P06 = !P06;
  24.                         P07 = !P07;
  25.                 }
  26.        
  27.         }
  28.        
  29.        
  30. }   
  31.    
复制代码

其中新的中断初始化如上:
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:41:45 | 显示全部楼层
B3这个位对应1000  ,就是8  

P3INTE =0x08 ;   //P33启用中断!

因为1个口只有1个中断号

你要会判断是8个脚的哪个脚按下:

if(intf & 0X08)  //判断是否P33按下  01就是P30,02就是P31,04就是P32

编译链接下载:

效果和外部中断 是 一样的!
截图202601262141274995.jpg
回复

使用道具 举报 送花

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

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-26 21:43:20 | 显示全部楼层
端口中断优先级控制寄存器(PINIPL,PINIPH)

还可以配置优先级:
截图202601262142477106.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-6 02:23 , Processed in 0.114798 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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