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

《8051U深度入门到32位51大型实战教学视频》学习打卡

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-07-24 13:08:59
已绑定手机

2

主题

26

回帖

158

积分

版主

积分
158
发表于 2025-6-30 10:30:04 | 显示全部楼层
第二十一集 Flash模拟EEPROM

代码成功运行,功能都能够实现:
截图202506301027257197.jpg
截图202506301028378679.jpg
截图202506301028469078.jpg
源代码:

#include "config.h"
#include "task.h"
#include "io.h"
#include "tim.h"
#include "18b20.h"
#include "adc.h"
#include "eeprom.h"



char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

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

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

void main(void)
{
        Sys_init();                                                                                //系统初始化
        usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
        Timer0_Init();                        //定时器初始化
        Init_595();
       
       
        Timer1_Init();
    ADC_Init();
       
       
        EA = 1;                                                                                        //IE |= 0X80;
       
        P40 = 0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
        Parm_Init();
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                       
            usb_OUT_done();                                                        //
        }
                Task_Pro_Handler_Callback();                                //执行功能函数
               
                SEG_Show_U32(sys_Run_times);
        }
}



void Timer0_Isr(void) interrupt 1                //1MS执行一次
{

        Task_Marks_Handler_Callback();                                        //系统计时

}


第二十一集 Flash模拟EEPROM.zip

285.59 KB, 下载次数: 2

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-07-24 13:08:59
已绑定手机

2

主题

26

回帖

158

积分

版主

积分
158
发表于 2025-7-17 16:45:34 | 显示全部楼层
第二十二集 比较器

代码成功运行,功能都能够实现

截图202507171643375041.jpg
截图202507171643487473.jpg
截图202507171644008838.jpg
源代码:

#include "config.h"
#include "task.h"
#include "io.h"
#include "tim.h"
#include "18b20.h"
#include "adc.h"
#include "eeprom.h"
#include "cmp.h"


char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

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

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

void main(void)
{
        Sys_init();                                                                                //系统初始化
       
        #if USB_STATE == 1
       
                usb_init();                                     //USB CDC 接口配置

                IE2 |= 0x80;                                    //使能USB中断
        #endif
       

        CMP_config();
        EA = 1;                                                                                        //IE |= 0X80;
       
//        P40 = 0;
        #if USB_STATE == 1
                while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
        #endif       
       
        Parm_Read();
//        Parm_Init();
        Timer0_Init();                        //定时器初始化
        Init_595();
       
        while(1)
        {
                #if USB_STATE == 1
                        if (bUsbOutReady)                                                        //如果接收到了数据
                        {
                                //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                               
                                usb_OUT_done();                                                        //
                        }
                #endif       
                       
                if ( LowVolFlag == 0 )       
                {       
                       
                        Task_Pro_Handler_Callback();                                //执行功能函数
                       
                        SEG_Show_U32(Test_cnt);
                }
        }
}



void Timer0_Isr(void) interrupt 1                //1MS执行一次
{
        if ( LowVolFlag == 0 )       
        {
                Task_Marks_Handler_Callback();                                        //系统计时
        }
}


截图202507171643308896.jpg

第二十二集比较器.zip

309.29 KB, 下载次数: 1

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-07-24 13:08:59
已绑定手机

2

主题

26

回帖

158

积分

版主

积分
158
发表于 2025-7-21 16:22:03 | 显示全部楼层
第二十三集PCA的使用和AiCube的入门

代码能够成功运行,功能都能实现:
任务一:
截图202507211542301338.jpg
代码如下:

#include "config.h"
#include "task.h"
#include "io.h"
#include "tim.h"
#include "18b20.h"
#include "adc.h"
#include "eeprom.h"
#include "cmp.h"
#include "pca.h"

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

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

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

void main(void)
{
        Sys_init();                                                                                //系统初始化
       
        #if USB_STATE == 1
       
                usb_init();                                     //USB CDC 接口配置

                IE2 |= 0x80;                                    //使能USB中断
        #endif
       


        EA = 1;                                                                                        //IE |= 0X80;
       
//        P40 = 0;
        #if USB_STATE == 1
                while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
        #endif       
       
        PCA_Init();

//        Parm_Init();
//        Timer0_Init();                        //定时器初始化

       
        while(1)
        {
                #if USB_STATE == 1
                        if (bUsbOutReady)                                                        //如果接收到了数据
                        {
                                //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                               
                                usb_OUT_done();                                                        //
                        }
                #endif       
                       
       
                       
                        Task_Pro_Handler_Callback();                                //执行功能函数
                       

               
        }
}



void Timer0_Isr(void) interrupt 1                //1MS执行一次
{
//        if ( LowVolFlag == 0 )       
//        {
//                Task_Marks_Handler_Callback();                                        //系统计时
//        }
}

任务二:
AiCube实现任务一:
截图202507211620429540.jpg
代码如下:

//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息  
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-07-21) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>


#include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件


//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含  
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
u16 count = 0;
//<<AICUBE_USER_GLOBAL_DEFINE_END>>




////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码  
    //<<AICUBE_USER_MAIN_INITIAL_END>>

    SYS_Init();

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码  
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {
        //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
        // 在此添加主函数中用户主循环代码
                if (count>=1000)
                {
                        count = 0;
                        printf("hello world \r\n");
                }
               
        //<<AICUBE_USER_MAIN_LOOP_END>>
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    EnableAccessXFR();                  //使能访问扩展XFR
    AccessCodeFastest();                //设置最快速度访问程序代码
    AccessIXramFastest();               //设置最快速度访问内部XDATA
    IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式

    PCA_Init();                         //PCA初始化
    USBLIB_Init();                      //USB库初始化

    //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_INITIAL_CODE_END>>

    EnableGlobalInt();                  //使能全局中断
}

////////////////////////////////////////
// 微秒延时函数
// 入口参数: us (设置延时的微秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_us(uint16_t us)
{
    do
    {
        NOP(34);                        //(MAIN_Fosc + 500000) / 1000000 - 6
    } while (--us);
}


////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
    uint16_t i;

    do
    {
        i = MAIN_Fosc / 6000;
        while (--i);
    } while (--ms);
}

////////////////////////////////////////
// PCA初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PCA_Init(void)
{
    PCA_SwitchP1n();                    //选择PCA数据口: ECI(P1.2), CCP0(P1.3), CCP1(P1.4), CCP2(P1.1)
    PCA_CLK_SYSCLKD12();                //选择PCA模组的时钟源: 系统时钟SYSCLK/12
    PCA_IdleContinue();                 //IDLE模式时PCA模组继续计数

    PCA_SetC0As16BitTimerMode();        //设置PCA模块0为16位软件定时器模式
    PCA_SetC0Match(2000);               //设置PCA模块0的16位比较匹配值

    PCA_DisableC1();                    //关闭PCA模块1

    PCA_DisableC2();                    //关闭PCA模块2

    PCA_EnableCCF0Int();                //使能PCA模块0捕获/匹配中断

    PCA_SetCounter(0);                  //设置PCA模组计数初始值
    PCA_Run();                          //PCA模组开始计数

    //<<AICUBE_USER_PCA_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_PCA_INITIAL_END>>
}

////////////////////////////////////////
// USB库初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_Init(void)
{
    usb_init();                         //初始化USB模块
    USB_SetIntPriority(2);              //设置中断为较高优先级
    set_usb_OUT_callback(USBLIB_OUT_Callback); //设置USB中断回调函数
    set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令

    //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_USBLIB_INITIAL_END>>
}

////////////////////////////////////////
// 等待USB配置完成函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_WaitConfiged(void)
{
    while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
        WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
}

////////////////////////////////////////
// USB设备接收数据中断回调程序
// 入口参数: 无
// 函数返回: 无
// OutNumber:USB设备接收到的数据长度
// UsbOutBuffer:保存USB设备接收到的数据
////////////////////////////////////////
void USBLIB_OUT_Callback(void)
{
    //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
    // 在此处添加用户处理接收数据的代码
    //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
}


////////////////////////////////////////
// PCA中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PCA_ISR(void) interrupt PCA_VECTOR
{
    //<<AICUBE_USER_PCA_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    if (PCA_CheckCCF0Flag())            //判断PCA模块0捕获/匹配中断
    {
        PCA_ClearCCF0Flag();            //清除PCA模块0捕获/匹配中断标志
                PCA_SetCounter(0);
                PCA_SetC0Match(2000);
                count ++;
    }
    //<<AICUBE_USER_PCA_ISR_CODE1_END>>
}


//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码  
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>



第二十三集PCA的使用和AiCube的入门.zip

487.97 KB, 下载次数: 1

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-1 01:50 , Processed in 0.139879 second(s), 63 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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