找回密码
 立即注册
查看: 291|回复: 4

AI8051U库函数打卡

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-03-10 13:37:48

3

主题

32

回帖

357

积分

版主

积分
357
发表于 2025-2-13 09:15:35 | 显示全部楼层 |阅读模式
一、IO模式和传统外部中断

1、主要代码
#include <AI8051U.H>
#include "set_int.h"
#include "set_io.h"
#include "intrins.h"

void Delay1ms(void)        //@40MHz
{
        unsigned long edata i;

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

void main(void)
{
        //初始化部分
        EAXFR = 1;
        CKCON = 0;        
    WTST  = 0;
   
        set_io_mode(pu_mode,Pin40,Pin00,Pin01,Pin02,Pin03,Pin_End);
        
        P40=0;
        //set_io_mode(pp_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);
        
        Delay1ms();
        
        //set_io_mode(dis_pur,Pin32,Pin33,Pin_End);
        //set_io_mode(en_pur,Pin33,Pin32,Pin_End);
        set_int_mode(falling_edge_mode,Int0,Int1,Int_End);
        
        EA = 1;
        
        while (1)
    {
        //循环执行部分
        if (get_int_state (Int0))
        {
            P00 = ~P00;
        }
                 if (get_int_state (Int1))
        {
            P01 = ~P01;
        }
                        P02=P34;
                        P03=P35;
    }
}


2、学习截图



回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-03-10 13:37:48

3

主题

32

回帖

357

积分

版主

积分
357
发表于 2025-2-14 11:00:09 | 显示全部楼层
二、IO都支持外部中断


1、学习截图
截图202502141059374203.jpg
实验箱短路帽接法如下:
b5fba6adaf1b3c9856b29dcdd502c8f0_720.png



2、主要代码

#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;//设置取程序代码不等待,以最快速度运行
        //初始化程序
        //按下P32按键,按下P33按键,通过串口打印出识别到的上升沿/下降沿
        set_io_mode(hz_mode, Pin32, Pin33,Pin36,Pin_End);
        //设置P32和P33为高阻输入模式
        set_io_mode(en_pur, Pin32, Pin33,Pin36, Pin_End);
        //设置P32和P33内部的4K上拉电阻打开
        set_io_mode(pp_mode, Pin37, Pin_End);
        //将串口发送脚P37设置为推挽输出,抗干扰
        
        set_ioint_mode(falling_edge_mode,Pin32,Pin_End);
        //设置P32为下降沿中断
        //set_ioint_mode(up_edge_mode,Pin32,Pin_End);
        //设置P32为上降沿中断
        //set_ioint_mode(low_level_mode,Pin32,Pin_End);
        //设置P32为低电平中断
        //set_ioint_mode(high_level_mode,Pin32,Pin_End);
        //设置P32为高电平中断
        set_ioint_mode(rising_edge_mode,Pin33,Pin_End);
        //设置P33为上升沿中断
        set_ioint_mode(en_int,Pin32,Pin33,Pin_End);
        //同时打开P32和P33的io中断
        //set_ioint_mode(dis_int,Pin32,Pin33,Pin_End);
        //同时关闭P32和P33的io中断
        
        set_uart_mode(Uart1, "115200bps",Use_Timer2, Base_8b,"64byte",Uart1_P36_7,Uart_End);
        //设置串口1为115200bps的波特率,使用定时器2作为串口波特率发生器
        //超时中断长度选择64byte,引脚切换到P36、P37上
        
        EA=1;
        while(1)
        {
                if(get_ioint_state(Pin32))
                {
                        uart_printf(Uart1,"P32 Click\r\n");
                }
                if(get_ioint_state(Pin33))
                {
                        uart_printf(Uart1,"P33 Click\r\n");
                }
               
        }
        
        
}



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-03-10 13:37:48

3

主题

32

回帖

357

积分

版主

积分
357
发表于 2025-2-18 11:17:27 | 显示全部楼层
第三集 24位定时器



1、学习截图
截图202502181051544875.jpg



2、主要代码
#include <AI8051U.H>
#include "set_io.h"
#include "set_timer.h"


void main(void)
{
        EAXFR = 1;
        CKCON = 0;
        WTST = 0;
        set_io_mode( pu_mode, Pin40, Pin00, Pin01, Pin02, Pin03, Pin04, Pin05, Pin_End);
        P40 = 0;
       
       

        set_timer_mode(Timer0, "0.5s", Timer_End);
         
        set_timer_mode(Timer1, "100000hz", En_OutClk, Dis_Int, Timer_End);
         
       
       
        set_timer_mode(Timer2, "200ms", Timer_End);
        set_timer_mode(Timer3, "10hz", Timer_End);
        set_timer_mode(Timer4, "2s", Timer_End);
        set_timer_mode(Timer11, "300ms", Timer_End);
       
       
       
        EA = 1;
        while(1)
        {
                if(get_timer_state(Timer0))
                {
                        P00 = ~P00;
                }
                if(get_timer_state(Timer2))
                {
                        P02 = ~P02;
                }
                        if(get_timer_state(Timer3))
                {
                        P03 = ~P03;
                }
                        if(get_timer_state(Timer4))
                {
                        P04 = ~P04;
                        set_timer_mode(Timer4, Dis_Int, Timer_End);
                         
                }
               
                        if(get_timer_state(Timer11))
                {
                        P05 = ~P05;
                }                       
        }       
}
timer.zip (101.9 KB, 下载次数: 7)


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-03-10 13:37:48

3

主题

32

回帖

357

积分

版主

积分
357
发表于 2025-2-18 11:22:06 | 显示全部楼层
第四集 串口部分库函数



1、学习截图
实验箱这边要拨断,否则出不来现象

截图202502181121374591.jpg

截图202502181119259546.jpg

截图202502181119373677.jpg

2、主要代码
#include <AI8051U.H>
#include "io_int.h"
#include "set_io.h"
#include "set_uart.h"
#include "stdio.h"


int num = 0;
char str[5] = {'a','b','c','d','e'};




void main(void)
{
        EAXFR = 1;
        CKCON = 0;
        WTST = 0;
         
        set_io_mode(pu_mode,Pin36,Pin37,Pin42,Pin43,Pin_End);
        set_uart_mode(Uart1, "115200bps", Uart1_P36_7, Use_Timerx, Uart_End);
        set_uart_mode(Uart2, Uart2_P42_3, "9600bps", Use_Timerx, Uart_End);
         
        set_io_mode(hz_mode, Pin34, Pin_End);
        set_io_mode(en_pur, Pin34, Pin_End);
        set_ioint_mode(falling_edge_mode, Pin34, Pin_End);
        set_ioint_mode(en_int, Pin34, Pin_End);
        EA = 1;
        while(1)
        {
                if(get_ioint_state(Pin34))
                {
                         uart_printf(Uart1, "uart1,hello!\r\n");
                         uart_printf(Uart2, "uart2,hello!\r\n");
                }
               
                if(get_uart_state(Uart1))
                {
                        sscanf(_uart1_rx_buff, "num:%d", &num);
                        uart_printf(Uart1, "this_num:%d\r\n",num);
                        uart_printf(Uart2, Buff_Mode, str, 5);       
                }
               
        }
       
       
       
}


uart.zip (138.51 KB, 下载次数: 12)



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-03-10 13:37:48

3

主题

32

回帖

357

积分

版主

积分
357
发表于 2025-2-18 11:24:23 | 显示全部楼层
第五集 ADC部分库函数


1、学习截图
截图202502181123173122.jpg

2、主要代码

#include <AI8051U.H>
#include "set_adc.h"
#include "set_io.h"
#include "set_timer.h"
#include "set_uart.h"

void main(void)
{
        EAXFR = 1;
        CKCON = 0;
        WTST = 0;       
       
         
        set_io_mode(pu_mode,Pin36,Pin37,Pin_End);
         
        set_timer_mode(Timer0, "0.5s", Dis_OutClk, En_Int, Timer_End);
       
         
        set_uart_mode(Uart1, "115200bps", Uart1_P36_7, Uart_End);
       
         
        set_adc_mode(cycl_mode, Adc0_P10, Adc_End);
        EA = 1;
       
        while(1)
        {
                 
                if(get_timer_state(Timer0))//0.5sÖ´ÐÐÒ»´Î
                {
                        if(get_adc_state(Adc0_P10))
                        {
                                uart_printf(Uart1, "adc_dat:%d\r\n",adc_value[Adc0_P10]);
                        }
                }
               
         
               
        }
}


adc.zip (176.46 KB, 下载次数: 7)

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 00:08 , Processed in 1.019489 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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