找回密码
 立即注册
查看: 540|回复: 6

《8051U深度入门到32位51大型实战视频》点亮LED心得

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-06-13 13:55:33

14

主题

23

回帖

99

积分

注册会员

积分
99
发表于 2025-1-13 15:29:51 | 显示全部楼层 |阅读模式
第三集

对比传统8051,AI8051的IO更加强大,支持多种模式

截图202501131526098394.jpg
使用起来非常方便,感觉这个功能可以使用库函数实现。
另外内部具备了上拉电阻,很方便用于按钮输入的应用,不需要外部再做上拉电阻。
截图202501131527322760.jpg
另外支持驱动电流的配置,这个可以用于IO低功耗,如果不需要大电流的项目,就可以配置为一般驱动能力,如果需要Io直接驱动能力,那就配置为增强驱动
比如用IO去控制MOS开关,就可以配置为增强模式。
学会IO的应用后就可以满足大部分的项目开发了,比如很多串口通信协议都可以用IO来模拟,另外很多外设芯片厂家也提供了IO模拟的测试代码,非常方便。


第四集

在其他网站看到了别人关于AI8051的USB应用的视频,觉得非常不可思议。

原来USB的使用是可以如此的简单,AI8051太强了,我想玩玩。看了相关的课程和代码,顿时开悟了。
  1. #include "ai8051u.h"                        //调用头文件
  2. #include "stc32_stc8_usb.h"                //调用头文件
  3. char *USER_DEVICEDESC = NULL;
  4. char *USER_PRODUCTDESC = NULL;
  5. char *USER_STCISPCMD = "@STCISP#";
  6. void main(void)
  7. {
  8.     P_SW2 |= 0x80;                //B7位写1,使能访问XFR
  9.         
  10.     P0M1 = 0x00;   P0M0 = 0x00;
  11.     P1M1 = 0x00;   P1M0 = 0x00;
  12.     P2M1 = 0x00;   P2M0 = 0x00;
  13.     P3M1 = 0x00;   P3M0 = 0x00;
  14.     P4M1 = 0x00;   P4M0 = 0x00;
  15.     P5M1 = 0x00;   P5M0 = 0x00;
  16.     P6M1 = 0x00;   P6M0 = 0x00;
  17.     P7M1 = 0x00;   P7M0 = 0x00;
  18.         
  19.         usb_init();                                     //USB CDC 接口配置
  20.     IE2 |= 0x80;                                    //使能USB中断
  21.     EA = 1;                                                                                        //IE |= 0X80;
  22.         
  23.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  24.         
  25.         while(1)
  26.         {
  27.                
  28.         if (bUsbOutReady)
  29.         {
  30.             USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  31.             
  32.             usb_OUT_done();
  33.         }
  34.                
  35.                 P40 = 0;        //P40端口输出0V
  36.                 P00 = 0;        //P00端口输出0V
  37.                 P02 = 0;        //P02端口输出0V
  38.                 //P01 = 0;        //P01端口输出0V
  39.                 //
  40.         }
  41. }
复制代码
这些封装好的函数可以用,不过封装成了LIB,不能一窥背后真容。不过这并不影响使用,期待能得到一套开发板,自己动手来做。

第十集

截图202501141039161459.jpg

之前不知道这个工具还有这个功能,看了一下,隐藏了很多我之前没注意到的功能。太强了
这个功能可以方便的使用电脑作为输入工具,简化了开发环境,非常方便按钮输入的项目开发。
不用再连接真实的按钮就可以完成相关逻辑的开发工作。

第十二集

复位操作可以确保单片机在开始工作时处于已知的状态,使其能够正确初始化各个寄存器和外设。

因此开机的上电复位就是一种重要的复位,这个时候系统做好初始化,然后进入用户的代码初始化,完成各项工作的配置。
低压复位,是供电不稳定的时候为了保护系统运行状态进入的一种复位。
截图202501141039532203.jpg
复位是关键的,所以很多时候为了保证系统是一直正常运行的可以通过看门狗来实现对系统是否运行正常的监控。
当不能喂狗的时候,就是出错卡壳了,看门狗复位系统,通过查询相关标记,确认复位原因来做相应的操作。也可以用于对应用方案排错。

第7集

定时器是一个重要的单片机外设,很多与时间尺度相关的引用都需要用到定时器。比如精准的计时,精准的延时。

例如单线的DS18B20通信,就要精准计时,不然就无法识别出0和1,以及WS2812三色LED,也是需要时间刻度来确保区分出串行数据。
配置的时候结合手册外设的结构图来配置就很容易了。上面标注的寄存器名字跟头文件都是一一对应的。
定时器计数,溢出后可以中断,中断后触发中断函数,中断函数内处理相关的时间节点事件。
截图202501141040304331.jpg
像8051一样,定时器的中断入口通过关键字确定

void Timer0_Isr(void) interrupt 1                //3秒执行一次
{
        state = !state;               
        
        P00 = state;
        P01 = !state;
}

第八集

定时器周期性调度任务 学习心得

通过定时器实现周期性的对各个任务执行,可以有效避免卡在某个任务里,这样就需要对每个任务做细分了,确保每个任务在自己的执行周期内能够执行完毕。
定时器只需要在指定的周期内标记对应的任务要执行,并在主函数内执行相关的函数后清理标记确保下个周期再被记录。
实现类似的功能还可以通过时钟参考点,类似Ardunio提供的时间函数一样,循环里在每个任务有一个时间记录变量,循环到自己就去读取一下时钟看看有没有到自己的任务执行点,如果有就执行,否则就跳过去。
我觉得这两者还是挺像的。

学arm的时候也是,中断的入口都是在某个配置文件内设置好的。


第十一集

矩阵按键学习心得

矩阵按键可以实现更多的按键功能,通过扫描方式,逐行确定是哪个按钮被按下的。
通过对不同的行列组合测试以确定是哪一行,哪一列短接了,这样就可以判断处是哪个按钮被按下了。
截图202501141040566075.jpg
该课程可以学到IO的基本输入和输出功能,以及上拉电阻的概念。另外就是通过逻辑组合识别出是哪个位置按钮被按下了。
这个方法有给缺点没法实现组合按钮的识别,不知道我的理解正确不。


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-06-13 13:55:33

14

主题

23

回帖

99

积分

注册会员

积分
99
发表于 2025-1-13 15:30:42 | 显示全部楼层
另外就是烧录工具提供了代码配置功能,真是太强了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:568
  • 最近打卡:2025-06-30 22:16:38

21

主题

564

回帖

2928

积分

金牌会员

积分
2928
发表于 2025-1-13 16:42:04 | 显示全部楼层
展开讲讲IO口四种模式啥作用
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-06-13 13:55:33

14

主题

23

回帖

99

积分

注册会员

积分
99
发表于 2025-1-13 16:52:42 | 显示全部楼层
wangxi*** 发表于 2025-1-13 16:42
展开讲讲IO口四种模式啥作用

咋,还能考住我?
如果一个IO低电平控制一个LED开启,那么除了输入模式,其他三种模式都可以实现。
准双向就是传统8051那种模式。推挽是具备电流输出能力驱动能力的拉高或者拉低。开漏是利用外部的电流驱动电路,提供更好的灌入能力。这样细说就要懂MOS管子了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:568
  • 最近打卡:2025-06-30 22:16:38

21

主题

564

回帖

2928

积分

金牌会员

积分
2928
发表于 2025-1-13 16:59:20 | 显示全部楼层
gaoyang*** 发表于 2025-1-13 16:52
咋,还能考住我?
如果一个IO低电平控制一个LED开启,那么除了输入模式,其他三种模式都可以实现。
准双 ...

不是考不考的,是我手册看了一遍,字都认识,就是没明白哪种场景用哪种模式。
想请大佬结合具体使用场景讲讲咋用各种模式
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-06-13 13:55:33

14

主题

23

回帖

99

积分

注册会员

积分
99
发表于 2025-1-13 17:06:05 | 显示全部楼层
wangxi*** 发表于 2025-1-13 16:59
不是考不考的,是我手册看了一遍,字都认识,就是没明白哪种场景用哪种模式。
想请大佬结合具体使用场景 ...

哈哈,要看具体是如何用了,比如我刚开始说的那个,如果是通过拉低IO实现点亮LED,那么就是三种输出功能都是可以,因为不需要提供驱动电流。
如果是需要单片机IO高电平直接驱动LED,那么推挽输出是正确的选择,相应的如果通过IO驱动MOS来控制电机转速,那么也是用推挽比较好,另外要配置IO为增强模式才可以。不然驱动能力不足。
如果用外部提供供电,那么用开漏是正确的选择。可以提供较大的灌电流能力。
如果做按钮输入,那么就是高阻输入模式了,这个模式外部电平通过上拉电阻或者下拉电阻来确定。另外该芯片集成了内部上拉电阻,可以配置使用。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:568
  • 最近打卡:2025-06-30 22:16:38

21

主题

564

回帖

2928

积分

金牌会员

积分
2928
发表于 2025-1-13 17:36:03 | 显示全部楼层
gaoyang*** 发表于 2025-1-13 17:06
哈哈,要看具体是如何用了,比如我刚开始说的那个,如果是通过拉低IO实现点亮LED,那么就是三种输出功能 ...

感谢感谢,大佬门清啊
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-1 09:47 , Processed in 0.134329 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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