找回密码
 立即注册
查看: 128|回复: 1

AI8051U 专属库函数 学习打卡

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-04-02 14:30:31
已绑定手机

4

主题

20

回帖

156

积分

注册会员

积分
156
发表于 2025-2-12 16:49:39 | 显示全部楼层 |阅读模式
第一节   IO口模式设置   手敲代码 亮灯成功


一 图片
截图202502121645346294.jpg

二 视频




三 主程序
  1. #include <AI8051U.H>
  2. #include "set_int.h"
  3. #include "set_io.h"
  4. #include "intrins.h"
  5. void Delay1ms(void)        //@40MHz
  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;    //设置访问片内扩展的xdata部分速度
  19.         WTST=0;     //设置取程序代码不等待,以最快的速度运行
  20.         //设置io端模式,将P40置为低电平
  21.         //设置P32和P33为高祖输入模式,同时打开内部的上拉电阻
  22.         set_io_mode(pu_mode,Pin40,Pin00,Pin01,Pin02,Pin03,Pin_End);
  23.         P40=0;
  24.         //set_io_mode(pp_mode,Pin40,Pin00,Pin01,Pin_End);
  25.         set_io_mode(hz_mode,Pin32,Pin33,Pin34,Pin35,Pin_End);
  26.         //设置p32和p33、P34、P35为高祖输入模式
  27.         set_io_mode(en_pur,Pin32,Pin33,Pin34,Pin35,Pin_End);
  28.         //打开内部上拉电阻后,最好加一段1MS的延时,以等待端口被拉高
  29.         
  30.   Delay1ms();//1ms的延时
  31.         
  32.   //打开p32和p33的内部上拉电阻
  33.         //set_io_mode(dis_pur,Pin32,Pin33,Pin_End); //关闭P32 P33的内部上拉电阻
  34.         //set_io_mode(en_pur,Pin33,Pin32,Pin_End); //关闭P32 P33的内部上拉电阻,参数顺序无所谓
  35.         set_int_mode(falling_edge_mode,Int0,Int1,Int_End);
  36.         //设置INT0 INT1为下降沿中断
  37.         //set_int_mode(rising_falling_edge_mode,Int0,Int1,Int_End)
  38.         //设置INT0 INT1为边沿中断
  39.         
  40.         EA=1;       //打开总中断
  41.         while(1)
  42.         {
  43.                 //需要循环执行的代码
  44.                 //INT0、INT1的下降沿时,改变P00和P01的电平状态
  45.                 if(get_int_state(Int0))
  46.                 {
  47.                         //INT0中断时执行的部分
  48.                         P00=~P00;
  49.                 }
  50.                 if(get_int_state(Int1))
  51.                 {
  52.                         //INT1中断时执行的部分
  53.                         P01=~P01;
  54.                 }
  55.                 P02=P34;
  56.                 P03=P35;
  57.         }
  58. }
复制代码
AI8051U专属库函数 第一集IO口模式设置.zip (103.06 KB, 下载次数: 6)
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-04-02 14:30:31
已绑定手机

4

主题

20

回帖

156

积分

注册会员

积分
156
发表于 2025-2-14 16:14:08 | 显示全部楼层
第二集   所有普通IO口都支持的外部中断   手打代码测试成功

实验箱版
一 截图
截图202502141554514254.jpg

二 程序
  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;   //设置访问片内扩展的xdata部分速度为最快
  9.         WTST=0;    //设置取程序代码不等待,以最快速度运行
  10.         
  11.         //初始化程序
  12.         //按下P32按键,按下P33按键,通过串口打印出识别到的上升沿/下降沿
  13.         set_io_mode(hz_mode,Pin32,Pin33,Pin36,Pin_End);    //设置p32/p33为高阻输入模式,默认就是高阻
  14.         
  15.         set_io_mode(en_pur,Pin32,Pin33,Pin36,Pin_End);       // 设置P32/P33内部的4K上拉电阻打开
  16.         
  17.         set_io_mode(pp_mode,Pin37,Pin_End);           //将串口发送脚P37设置为推挽输出,抗干扰
  18.         
  19.         set_ioint_mode(falling_edge_mode,Pin32,Pin_End);   //设置P32为下降沿中断
  20.         //set_ioint_mode(rising_edge_mode,Pin32,Pin_End);   //设置P32为上升沿中断
  21.         //set_ioint_mode(high_level_mode,Pin32,Pin_End);   //设置P32为高电平中断
  22.         //set_ioint_mode(low_level_mode,Pin32,Pin_End);   //设置P32为低电平中断
  23.         
  24.         set_ioint_mode(rising_edge_mode,Pin33,Pin_End);   //设置P33为上升沿中断
  25.         
  26.         set_ioint_mode(en_int,Pin32,Pin33,Pin_End);     //同时打开P32/P33的io中断
  27.         //set_ioint_mode(dis_int,Pin32,Pin33,Pin_End);     //同时关闭P32/P33的io中断
  28.         
  29.         set_uart_mode(Uart1,"115200bps",Use_Timer2,Base_8b,"64byte",Uart1_P36_7,Uart_End);
  30.         //设置串口1为115200bps的波特率,使用定时器2作为串口波特率发生器
  31.         //超时中断长度选择64byte,引脚切换到P36/P37上
  32.         
  33.         //set_uart_mode(Uart1,"9600bps",Use_Timerx,"32byte",Odd_9b,Uart1_P16_7,Uart_End);
  34.         //设置串口1为9600bps的波特率,使用定时器1作为串口波特率发生器
  35.         //超时中断长度选择32byte,引脚切换到P16/P17上
  36.         
  37.         //set_uart_mode(Uart1,Uart1_P36_7,Uart_End);
  38.         //支持默认值操作,这部分设置等效为
  39.         //设置串口1为115200bps的波特率,使用定时器2作为串口波特率发生器
  40.         //超时中断长度选择64byte,引脚切换到P36/P37上
  41.         
  42.         //set_uart_mode(Uart3,"9600bps",Use_Timerx,Base_8b,"64byte",Uart3_P50_1,Uart1_P36_7);
  43.         //set_uart_mode(Uart4,"38400bps",Use_Timerx,Base_8b,"64byte",Uart4_P52_3,Uart1_P36_7);
  44.         //实现设置两个串口工作在不同的波特率下,使用的是8位无校验模式
  45.         
  46.         //set_uart_mode(Uart3,"9600bps",Use_Timer2,Base_8b,"64byte",Uart3_P50_1,Uart1_P36_7);
  47.         //set_uart_mode(Uart4,"9600bps",Use_Timer2,Base_8b,"64byte",Uart4_P52_3,Uart1_P36_7);
  48.         //实现设置两个串口工作在相同的波特率下,使用的是8位无校验模式
  49.         
  50.         
  51.         EA=1;
  52.         while(1)
  53.         {
  54.                 //循环执行的程序
  55.                 if(get_ioint_state(Pin32))    // 设置P32为下降沿中断
  56.                 {
  57.                         uart_printf(Uart1,"P32 Click\r\n");
  58.                 }
  59.                 if(get_ioint_state(Pin33))    // 设置P33为上升沿中断
  60.                 {
  61.                         uart_printf(Uart1,"P33 Click\r\n");
  62.                 }
  63.         }
  64. }
复制代码


擎天柱版
一截图
截图202502141612075917.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;   //设置访问片内扩展的xdata部分速度为最快
  8.         WTST=0;    //设置取程序代码不等待,以最快速度运行
  9.         
  10.         //初始化程序
  11.         //按下P32按键,按下P33按键,通过串口打印出识别到的上升沿/下降沿
  12.         set_io_mode(hz_mode,Pin32,Pin33,Pin_End);    //设置p32/p33为高阻输入模式,默认就是高阻
  13.         
  14.         set_io_mode(en_pur,Pin32,Pin33,Pin_End);       // 设置P32/P33内部的4K上拉电阻打开
  15.         
  16.         set_io_mode(pu_mode,Pin20,Pin21,Pin_End);
  17.         
  18.         set_ioint_mode(falling_edge_mode,Pin32,Pin_End);   //设置P32为下降沿中断
  19.         //set_ioint_mode(rising_edge_mode,Pin32,Pin_End);   //设置P32为上升沿中断
  20.         //set_ioint_mode(high_level_mode,Pin32,Pin_End);   //设置P32为高电平中断
  21.         //set_ioint_mode(low_level_mode,Pin32,Pin_End);   //设置P32为低电平中断
  22.         
  23.         set_ioint_mode(rising_edge_mode,Pin33,Pin_End);   //设置P33为上升沿中断
  24.         
  25.         set_ioint_mode(en_int,Pin32,Pin33,Pin_End);     //同时打开P32/P33的io中断
  26.         //set_ioint_mode(dis_int,Pin32,Pin33,Pin_End);     //同时关闭P32/P33的io中断
  27.         
  28.         
  29.         
  30.         EA=1;
  31.         while(1)
  32.         {
  33.                 //循环执行的程序
  34.                 if(get_ioint_state(Pin32))    // 设置P32为下降沿中断
  35.                 {
  36.                         P20=~P20;
  37.                 }
  38.                 if(get_ioint_state(Pin33))    // 设置P33为上升沿中断
  39.                 {
  40.                         P21=~P21;
  41.                 }
  42.         }
  43. }
复制代码


AI8051U专属库函数第二集 所有IO口都支持外部中断 实验箱版.zip (148.01 KB, 下载次数: 6)
AI8051U专属库函数第二集 所有IO口都支持外部中断 擎天柱版.zip (124.99 KB, 下载次数: 6)
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 20:22 , Processed in 0.112362 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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