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

诱惑太大!我要学Ai8051U单片机

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:379
  • 最近打卡:2025-08-10 08:44:39
已绑定手机

9

主题

107

回帖

1067

积分

金牌会员

积分
1067
发表于 2025-1-8 09:07:12 | 显示全部楼层
wlh*** 发表于 2025-1-7 18:24
心愿有点难积累

确实是积累不易。但如果必须也只有在所不惜了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:379
  • 最近打卡:2025-08-10 08:44:39
已绑定手机

9

主题

107

回帖

1067

积分

金牌会员

积分
1067
发表于 2025-1-8 09:12:35 | 显示全部楼层
wlh*** 发表于 2025-1-7 18:23
好难得看见被禁言的

你好,是什么情况会被禁言?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:185
  • 最近打卡:2025-08-04 09:19:33
已绑定手机

15

主题

628

回帖

850

积分

高级会员

积分
850
发表于 2025-1-8 09:19:57 | 显示全部楼层
ysp5*** 发表于 2025-1-8 09:12
你好,是什么情况会被禁言?

不知道 你得去问管理员
STC 666 888
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:495
  • 最近打卡:2025-08-06 15:38:26

33

主题

2484

回帖

5393

积分

论坛元老

积分
5393
发表于 2025-1-8 09:22:49 | 显示全部楼层
wlh*** 发表于 2025-1-7 18:24
心愿有点难积累

签到 69天都应该有200+的心愿了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:185
  • 最近打卡:2025-08-04 09:19:33
已绑定手机

15

主题

628

回帖

850

积分

高级会员

积分
850
发表于 2025-1-8 09:25:03 | 显示全部楼层
_奶*** 发表于 2025-1-8 09:22
签到 69天都应该有200+的心愿了

哈哈 我这不止哦  算下来加上回复那些 都有700左右啦
STC 666 888
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:495
  • 最近打卡:2025-08-06 15:38:26

33

主题

2484

回帖

5393

积分

论坛元老

积分
5393
发表于 2025-1-8 09:28:23 | 显示全部楼层
wlh*** 发表于 2025-1-8 09:25
哈哈 我这不止哦  算下来加上回复那些 都有700左右啦

所以你已经换过东西啦?我看你这里积分只有700+ 照理说应该在1300+
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:185
  • 最近打卡:2025-08-04 09:19:33
已绑定手机

15

主题

628

回帖

850

积分

高级会员

积分
850
发表于 2025-1-8 09:39:27 | 显示全部楼层
_奶*** 发表于 2025-1-8 09:28
所以你已经换过东西啦?我看你这里积分只有700+ 照理说应该在1300+

AI8051-DIP40 屠龙刀 还有擎天柱 还有个 usb转双串 1300是没得的  709=69*2 + 545 + 13 *2
STC 666 888
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:304
  • 最近打卡:2025-08-10 08:20:44

62

主题

833

回帖

1597

积分

金牌会员

积分
1597
发表于 2025-1-8 10:26:22 | 显示全部楼层
这个坑可以入
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:379
  • 最近打卡:2025-08-10 08:44:39
已绑定手机

9

主题

107

回帖

1067

积分

金牌会员

积分
1067
发表于 2025-1-10 16:54:25 | 显示全部楼层
今天回过头再学习《定时器周期性调度任务》
这课内容多,知识点基础性强,非常重要。准备反复再学。
一,所谓定时器周期性调度任务,如果每隔一定的时间重复执行一遍定时函数,这就是定时器周期性任务。如何用一个定时器实现多个任务呢。可以將定时器初始化函数定为1毫秒,根据任务数新建所需变量(注意变量类型注意长度)。让他们在定时器中断函数自动计数,计数到达后重新清0。再將任务变量的状态输出,实现多任务的调度。
二,引入数组的功能,用不一样的方法,可以简单一点实现以上任务。数组使用分为如下两步:
1.定义

   类型 名称[长度] = { 数值 };
2.使用

   赋值:名称[索引] = 数值,注意索引从0开始。
   在调用数组的时候只要名称加索引然后直接一个等号就可以给他赋值,调用的时候就直接调用他的这个变量。
三,前面的三个计时变量可以运用for语句在定时器中断函数中实现自加并输出变量状态。
void Timer0_Isr(void) interrupt 1        //1MS执行一次
{
    for(i=0; i<3; i++)
    {
    Count_ms[i]++;
        if( Count_ms[0] >= 300 )
        {
        Count_ms[0]=0;
        State1 = !State1;
        P00 = State1;
        }
     }
}  
......待续,明天再来。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:379
  • 最近打卡:2025-08-10 08:44:39
已绑定手机

9

主题

107

回帖

1067

积分

金牌会员

积分
1067
发表于 2025-1-11 16:03:31 | 显示全部楼层
今天接着再学习《定时器周期性调度任务》
昨天在周期性任务介绍中已经知道如何通过数组用一个定时器实现多个任务和流水灯。
今天学习:
一,任务3按键1按一下,LED通过数组移动一下重点:按键不能在通过while判断是否按下松开了。因为,如果是多任务就可能会在while中出现死循环。怎么办?用定时器,当检测到按键连续按下后,按键计数变量+1,只要松开一下,计数清0,计数累积到50ms的时候判定为按下,实现LED通过数组移动一下的任务。而其他任务比如计时、打印等都可以照常执行基本不受影响。
二,文件的创建(.c和.h) 创建程序文件三步,1新建文件并保存,2添加到工程 ,3添加引用路径。一般一个.c和一个.h文件一起执行一个外设或者一个任务或功能。这样可以让代码看起来简洁明了注意函数定义添加文件一定要记得把引用路径添加到工程里。
三,结构体数组的周期性任务调度 在前面的任务:LED1 0.3秒闪一次,LED2 0.6秒闪一次,LED3 0.9秒闪一次之中他们1都有定时器1ms加的变量,2都有一个设定的计数目标,3都有需要执行的功能,4.定时时间到了才能执行。那么就可以采用结构体数组实现。
首先创建Task.h文件
#ifndef __TASK_H
#define __TASK_H

#include "config.h"                        //调用头文件

typedef struct
{
        u8 Run;               //任务状态:Run/Stop
        u16 TIMCount;         //定时计数器
        u16 TRITime;          //重载计数器
        void (*TaskHook) (void); //任务函数
} TASK_COMPONENTS;   

void Task_Marks_Handler_Callback(void);
void Task_Pro_Handler_Callback(void);

#endif

然后创建Task.c文件。
u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);

void Task_Marks_Handler_Callback(void)
{
    u8 i;
    for(i=0; i<Tasks_Max; i++)
    {
        if(Task_Comps[i].TIMCount)      /* If the time is not 0 */
        {
            Task_Comps[i].TIMCount--;   /* Time counter decrement */
            if(Task_Comps[i].TIMCount == 0) /* If time arrives */
            {               /*Resume the timer value and try again */
                Task_Comps[i].TIMCount = Task_Comps[i].TRITime;  
                Task_Comps[i].Run = 1;      /* The task can be run */
            }
        }
    }
}

void Task_Pro_Handler_Callback(void)
{
    u8 i;
    for(i=0; i<Tasks_Max; i++)
    {
        if(Task_Comps[i].Run) /* If task can be run */
        {
            Task_Comps[i].Run = 0;      /* Flag clear 0 */
            Task_Comps[i].TaskHook();   /* Run task */
        }
    }
}
在io.c文件创建执行函数
#include "io.h"

u8 State1 = 0;                                        //LED1初始状态
u8 State2 = 0;                                        //LED2初始状态
u8 State3 = 0;                                        //LED3初始状态
u16 Key_Vol = 0;                                //按键按下持续时间

void LED0_Blink(void)
{
        State1 = !State1;
        P00 = State1;
}

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}

void KEY_Task(void)
{
        if( P32 == 0 )
        {
                Key_Vol++;
                if( Key_Vol==5 )
                {
                        //按键按下的任务
                        printf( "按键单击\r\n" );
                }
        }
        else
        {
                Key_Vol = 0;
        }
       
}
在io.h文件中声明有关函数
#ifndef __IO_H
#define __IO_H

#include "config.h"                        //调用头文件

void LED0_Blink(void);
void LED1_Blink(void);
void LED2_Blink(void);

void KEY_Task(void);

#endif

我觉得这个是今天学习的重点的重点照抄了一遍,以便加深理解。  

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-11 04:27 , Processed in 0.129088 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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