找回密码
 立即注册
查看: 218|回复: 3

Ai8051U创新风格库函数学习打卡

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2025-2-13 09:55:01 | 显示全部楼层 |阅读模式
第一集:I/O口模式和传统外部中断

用到如下函数:
  1. // 声明函数
  2. void set_io_mode(io_mode mode, ...); // 批量设置IO的模式
  3. // 详细解释:mode为IO的模式,后面为可变参数的io_name参数,需要注意的是,输入完后需要添加Pin_End作为结束符
  4. // 例如set_io_mode(pu_mode,Pin00,Pin21,Pin32,Pin_End);就是将P00,P21,P32这3个IO设置为上拉输入模式
复制代码
  1. //函数功能:设置外部中断INT0~INT4的触发方式.可以一次性设置同一种模式的多个中断。
  2. //因为是变长函数,所以最后需要加上INT_End结束。
  3. //举例:set_int_mode(all_edge_mode,Int0,Int1,Int_End);//设置INT0和INT1为边沿中断
  4. void set_int_mode(int_mode mode, ...);
复制代码
  1. // 函数功能:获取中断状态
  2. // 返回值:0表示没有中断,1表示有中断
  3. // 举例:if(get_int_state(Int0))//判断INT0是否有中断
  4. char get_int_state(int_num num);
复制代码
跟着视频写了程序:
  1. #include <AI8051U.H>
  2. #include "set_int.h"
  3. #include "set_io.h"
  4. #include "intrins.h"
  5. void Delay1ms(void)        //@40.000MHz
  6. {
  7.         unsigned long edata i;
  8.         _nop_();
  9.         _nop_();
  10.         _nop_();
  11.         i = 9998UL;
  12.         while (i) i--;
  13. }
  14. void main(void)
  15. {
  16.         //初始化代码
  17.         EAXFR = 1;
  18.         CKCON = 0;
  19.         WTST = 0;
  20.         //设置IO模式,将P40置低
  21.         //设置P32和P33为高阻输入模式,同时打开内部上拉电阻
  22.         set_io_mode(pu_mode,Pin40,Pin00,Pin01,Pin02,Pin03,Pin_End);  //Pin40,Pin00,Pin01,Pin02,Pin03为准双向口模式
  23.         P40 = 0;
  24.         set_io_mode(hz_mode,Pin32,Pin33,Pin34,Pin35,Pin_End);   //Pin32,Pin33,Pin34,Pin35为高阻输入模式
  25.         set_io_mode(en_pur,Pin32,Pin33,Pin34,Pin35,Pin_End);    //打开Pin32,Pin33,Pin34,Pin35内部上拉电阻
  26.         Delay1ms();                                             //延时1ms
  27.         set_int_mode(falling_edge_mode,Int0,Int1,Int_End);      //Int0,Int1下降沿中断
  28.         EA = 1;
  29.         while(1)
  30.         {
  31.                 //循环执行的代码
  32.                 //int0,int1下降沿触发时,改变P00和P01的电平状态
  33.                 if(get_int_state(Int0))
  34.                 {
  35.                         P00 = ~P00;               //int0中断时执行
  36.                 }
  37.                 if(get_int_state(Int1))
  38.                 {
  39.                         P01 = ~P01;               //int1中断时执行
  40.                 }
  41.                 P02 = P34;
  42.                 P03 = P35;
  43.         }
  44. }
复制代码

Ai8051U创新风格库函数IO口模式和传统外部中断学习程序.zip (4.21 MB, 下载次数: 9)

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2025-2-14 17:26:54 | 显示全部楼层
第二集:IO中断

用到如下函数:
  1. // 声明函数
  2. void set_io_mode(io_mode mode, ...); // 批量设置IO的模式
  3. // 详细解释:mode为IO的模式,后面为可变参数的io_name参数,需要注意的是,输入完后需要添加Pin_End作为结束符
  4. // 例如set_io_mode(pu_mode,Pin00,Pin21,Pin32,Pin_End);就是将P00,P21,P32这3个IO设置为上拉输入模式
复制代码
  1. // 外部使用函数,第一个参数为ioint_mode枚举类型,第二个参数及其后面为io_name枚举类型
  2. // 这是一个变长函数,举一个例子:
  3. // set_ioint_mode(en_int,Pin00,Pin01,Pin02,Pin20,Pin_End);
  4. // 这样是将Pin00,Pin01,Pin02,Pin20的IO中断模式都使能,最后必须为Pin_End
  5. void set_ioint_mode(ioint_mode mode, ...);
复制代码
  1. // 这是一个获取中断标志位的函数,参数为io_name枚举类型,返回值为char类型
  2. // 返回值只会出现0和1,0表示没有中断,1表示有中断,查询一次后自动清除
  3. char get_ioint_state (io_name pin);
复制代码
  1. // 设置串口模式,默认配置为115200波特率,8位数据位,1位停止位.
  2. // 变长参数,可变参数为波特率、超时中断数据位,串口切换引脚,最后需要使用Uart_End结束。
  3. // 举个例子:set_uart_mode(Uart1, "9600bps", Uart1_P36_7, Uart_End);
  4. // 这个的意思是设置串口1为9600波特率,8位数据位,1位停止位,并切换引脚为P36和P37上,超时中断为64byte
  5. // 超时中断的作用是对数据自动分包,64byte就是没数据64个字节(根据波特率),就会自动中断,然后进行数据分包。
  6. // 再举个例子:set_uart_mode(Uart1, "32byte", "115200bps", Uart_End);
  7. // 这个的意思是设置串口1为115200波特率,并切换引脚为P30和P31上(默认引脚),超时中断为32byte。
  8. // 变长参数部分支持乱序输入,波特率和超时中断需要带上单位bps和byte,中间不要有空格。
  9. // 如果不输入变长参数,例如:set_uart_mode(Uart1, Uart_End);//则代表115200波特率,64byte,P30P31(UART1下)
  10. // 即不输入的选项拥有默认值,不设置也可以的。
  11. void set_uart_mode(uart_name uart, ...);
  12. // 默认值为115200波特率,超时中断64byte,引脚切换每个串口的第一个(参见上面的宏定义)
  13. // uart1是P30和P31,uart2是P12和P13,uart3是P00和P01,uart4是P02和P03
复制代码
实验箱程序如下:
  1. #include <AI8051U.H>
  2. #include "io_int.h"
  3. #include "set_io.h"
  4. #include "set_uart.h"
  5. void main(void)
  6. {
  7.         EAXFR = 1;
  8.         CKCON = 0;
  9.         WTST = 0;
  10.         //初始化程序
  11.         //按下P32,按下P33,通过串口打印出识别到的上升沿/下降沿
  12.         set_io_mode(hz_mode,Pin32,Pin33,Pin36,Pin_End);       //设置P32 P33 P36为高阻输入模式,上电默认为高阻输入模式
  13.         set_io_mode(en_pur,Pin32,Pin33,Pin36,Pin_End);        //设置P32 P33 P36内部的4K上拉电阻打开
  14.         set_io_mode(pp_mode,Pin37,Pin_End);                   //将串口发送脚P37设置为推挽输出,抗干扰
  15.         set_ioint_mode(falling_edge_mode,Pin32,Pin_End);      //设置P32为下降沿中断
  16.         set_ioint_mode(rising_edge_mode,Pin33,Pin_End);       //设置P33为上升沿中断
  17.         set_ioint_mode(en_int,Pin32,Pin33,Pin_End);           //同时打开P32 P33的IO中断
  18.        
  19.         set_uart_mode(Uart1,"115200bps",Use_Timer2,Base_8b,"64byte",Uart1_P36_7, Uart_End);
  20.         //设置串口1为115200bps的波特率,使用定时器2作为串口波特率发生器
  21.         //超时中断长度选择64byte ,引脚切换到P36、P37上
  22.                
  23.         EA = 1;
  24.         while(1)
  25.         {
  26.                 //循环执行的程序
  27.                 if(get_ioint_state(Pin32))                // 设置P32为下降沿中断
  28.         {
  29.             uart_printf(Uart1,"P32 Click\r\n");
  30.         }
  31.         if(get_ioint_state(Pin33))                // 设置P33为上升沿中断
  32.         {
  33.             uart_printf(Uart1,"P33 Click\r\n");
  34.         }
  35.         }
  36. }
复制代码
截图202502141725072822.jpg
擎天柱程序如下:
  1. #include <AI8051U.H>
  2. #include "io_int.h"
  3. #include "set_io.h"
  4. void main(void)
  5. {
  6.         EAXFR = 1;
  7.         CKCON = 0;
  8.         WTST = 0;
  9.         //初始化程序
  10.         //按下P32,按下P33,通过串口打印出识别到的上升沿/下降沿
  11.         set_io_mode(hz_mode,Pin32,Pin33,Pin_End);       //设置P32 P33 为高阻输入模式,上电默认为高阻输入模式
  12.         set_io_mode(en_pur,Pin32,Pin33,Pin_End);        //设置P32 P33 内部的4K上拉电阻打开
  13.     set_io_mode(pu_mode,Pin20,Pin21,Pin_End);   
  14.         set_ioint_mode(falling_edge_mode,Pin32,Pin_End);      //设置P32为下降沿中断
  15.         set_ioint_mode(rising_edge_mode,Pin33,Pin_End);       //设置P33为上升沿中断
  16.         set_ioint_mode(en_int,Pin32,Pin33,Pin_End);           //同时打开P32 P33的IO中断
  17.        
  18.                
  19.         EA = 1;
  20.         while(1)
  21.         {
  22.                 //循环执行的程序
  23.                 if(get_ioint_state(Pin32))                // 设置P32为下降沿中断
  24.         {
  25.             P20 = ~P20;
  26.         }
  27.         if(get_ioint_state(Pin33))                // 设置P33为上升沿中断
  28.         {
  29.             P21 = ~P21;
  30.         }
  31.         }
  32. }
复制代码

Ai8051U创新风格库函数IO中断学习程序.zip (1.83 MB, 下载次数: 9)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:127
  • 最近打卡:2025-05-02 09:41:21

13

主题

164

回帖

363

积分

中级会员

积分
363
发表于 2025-2-14 22:31:47 | 显示全部楼层
才知道还有库函数可以用

点评

深圳国芯人工智能有限公司-库函数 [attachimg]84710[/attachimg] USB型,Ai8051U创新风格库函数持续开发中,内部视频培训, 听取建议,2/8更新 https://www.stcaimcu.com/forum.php?mod=viewthread&tid=13629 (出  详情 回复 发表于 2025-2-15 08:45
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2025-2-15 08:45:44 | 显示全部楼层
阿杰爱*** 发表于 2025-2-14 22:31
才知道还有库函数可以用


深圳国芯人工智能有限公司-库函数
截图202502150844382622.jpg


USB型,Ai8051U创新风格库函数持续开发中,内部视频培训, 听取建议,2/8更新
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=13629
(出处: 国芯技术交流网站)


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 20:27 , Processed in 0.120416 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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