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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-27 09:41:36

11

主题

111

回帖

1322

积分

版主

积分
1322
发表于 2025-2-14 15:16:07 | 显示全部楼层 |阅读模式
第一集  I/O口模式设置和传统的外部中断
程序:




#include <AI8051U.H>
#include "set_int.h"
#include "set_io.h"
#include "intrins.h"

void Delay1us(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        _nop_();
        i = 4UL;
        while (i) i--;
}

void main(void)
{
       
        EAXFR = 1;//拓展寄存器访问使能
        CKCON = 0;//设置访问片内扩展的xdata部分速度为最快
        WTST = 0;//设置取程序代码不等待,以最快速度运行
        set_io_mode(pu_mode, Pin40,Pin00,Pin01,Pin02,Pin03,Pin_End);
        P40 = 0;
        //set_io_mode(pu_mode, Pin40,Pin00,Pin01,Pin_End);
        set_io_mode(hz_mode,Pin32,Pin33,Pin34,Pin35,Pin_End);
        set_io_mode(en_pur,Pin32,Pin33,Pin34,Pin35,Pin_End);
        Delay1us();
        //set_io_mode(dis_pur,Pin32,Pin33,Pin_End);//关闭P32和P33的内部上拉电阻
        //set_io_mode(en_pur,Pin32,Pin33,Pin_End);//关闭P32和P33的内部上拉电阻,参数顺序无所谓
        set_int_mode(falling_edge_mode,Int0,Int1,Int_End);
        //设置INT0和INT1为下降沿中断
        set_int_mode(rising_falling_edge_mode,Int0,Int1,Int_End);
        //设置INT0和INT1为边沿中断
       
        EA = 1;//打开总中断
        while(1)
        {
                if(get_int_state(INT0))
                {
                 //INT0中断执行的部分
                        P00 = ~P00;
                }
                if(get_int_state(INT1))
                {
                 //INT1中断执行的部分
                        P01 = ~P01;
                }
                P02 = P34;
                P03 = P35;
        }
}

编译成功:
第一集编译.png


操作视频:




回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-27 09:41:36

11

主题

111

回帖

1322

积分

版主

积分
1322
发表于 2025-2-14 15:19:50 | 显示全部楼层
第二集 所有普通IO口都支持的外部中断

程序:

#include <AI8051U.H>
#include "io_int.h"
#include "set_io.h"
#include "set_uart.h"

void main(void)
{
        EAXFR = 1;//拓展寄存器访问使能
        CKCON = 0;//设置访问片内扩展的xdata部分速度为最快
        WTST = 0;//设置取程序代码不等待,以最快速度运行


        set_io_mode(hz_mode,Pin32,Pin33,Pin36,Pin_End);

        set_io_mode(en_pur,Pin32,Pin33,Pin36,Pin_End);
        set_io_mode(pp_mode,Pin37,Pin_End);
       
        set_ioint_mode(falling_edge_mode,Pin32,Pin_End);
        set_ioint_mode(rising_edge_mode,Pin33,Pin_End);

        set_ioint_mode(en_int,Pin32,Pin33,Pin_End);
       
        set_uart_mode(Uart1,"115200bps",Use_Timer2,Base_8b,"64byte",Uart1_P36_7,Uart_End);
       
        EA = 1;
        while(1)
        {
                if(get_ioint_state(Pin32))//设置P32为下降沿中断
                {
                        uart_printf(Uart1,"P32 Click\r\n");
                }
                if(get_ioint_state(Pin33))//设置P33为上升沿中断
                {
                        uart_printf(Uart1,"P33 Click\r\n");
                }
        }
}


第二集.png

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 10:31 , Processed in 0.121545 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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