272761180 发表于 2024-11-27 09:33:05

VCC 发表于 2024-11-27 03:06
你提到:




这样哦,刚才用插件灯试了一次也还是一样效果,推测是限流电阻的影响?
我想起来当时的实验了,我是在驱动三色光LED的时候发现的这个现象,那个led模块应该用的是(VCC-VF)/Imax计算的电阻值。当使用准双向输出时没有推挽输出亮度大。

感谢大佬批评指正!{:5_300:}

272761180 发表于 2024-11-27 09:35:02

VCC 发表于 2024-11-27 03:14
你计算错了哦,这时的电流是300uA吧

感谢指正,已修改(这都能算错)

272761180 发表于 2024-11-27 10:06:58

VCC 发表于 2024-11-27 03:22
你的理解是错的。




之前没有了解过这方面的知识,看到大佬讲解后才恍然大悟。

1. 这个74HC本质还是为了节省IO口的;
2. 使用PSRAM时要注意EXTRAM和地址范围,以及MCU引脚中AD实际上指引脚复用功能(这个我一直没看懂,不知道说明书哪里写了,要是在引脚图说明就好了)。

272761180 发表于 2024-11-27 10:16:22

VCC 发表于 2024-11-27 03:40
虽然你很有想法,但我还是要泼一盆冷水




收到,这个代码是我第一天学习8051时写的,因为当时没有熟练使用寄存器操作,所以点灯时用人工智能给写了一段话封装了,因为一直只用于点灯所以也没发现BUG。

后面随着学习深入都是直接操作寄存器加一行备注了。现在感觉寄存器的好处就是代码段少,直截了当

学习就是个不断发现问题的过程,感谢有大佬会细看我的笔记并批评指正{:5_300:}

272761180 发表于 2024-11-27 22:38:06

【第五课】《C语言基础》


还是大一那一会学的C语言,因为专业问题C++没有学过,还好用KEIL基本用C就可以了。

一、关于printf

课程讲解了将USB-CDC串口通讯重定向至printf函数,使用LIB库仅需要取消注释即可实现。



使用UART串口的话,我的方法是如下这样,可以封装为一个函数,然后加个串口形参;也可以每个串口写一个。
//========================================================================
// 函数: void UART1_printf(char *fmt,...)
// 描述: 将串口发送函数重定向为UART1_printf
// 参数: fmt:字符串指针,其余为可变变量
// 返回: none.
//========================================================================
void UART1_printf(char *fmt,...)
{
      u32 i,length;
      va_list ap;
      va_start(ap,fmt);
      vsprintf(TX1_Buffer,fmt,ap);
      va_end(ap);
      length=strlen((const char*)TX1_Buffer);
      
      //开始发送数据
      for(i=0;i<length;i++)
      {
                SBUF= TX1_Buffer;
                B_TX1_Busy=1;
                while(TI == 0);                //忙等待,等待当前字节发送完成
                TI = 0;                                                //清除请求位
      }
      B_TX1_Busy=0;
}
也有大佬直接用printf的,好像用的是啥putchar啥的没注意了解,有知道的大佬可以解释一下。(或许这里我可以宏定义一下?#define    printf    UART1_printf)

二、关于进制转换

有时候懒着用计算器,可以记住几个常用的简单的16进制和2进制转换:
BIN                HEX
0000 0001      0x01
0000 0010      0x02
0000 0100      0x04
0000 1000      0x08
0001 0000      0x10
0010 0000      0x20
0100 0000      0x40
1000 0000      0x80

实际应用中,比如要给P0M0赋值为 1100 0000(这里实际是要把高2位置1而不改变其他位数据),就可以 P0M0 |=(0X80 | 0X40);或者P0M0 |=(0X80 + 0X40);

三、关于变量类型

如果要使用64位变量需要在程序文件申明 #program float64,主要是双精度数据。其他的在USB文件里已经宏定义过了
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned int ushort;
typedef unsigned long ulong;

typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;

四、关于运算符没啥好说的

VCC 发表于 2024-11-28 01:27:50

272761180 发表于 2024-11-27 10:06
之前没有了解过这方面的知识,看到大佬讲解后才恍然大悟。

1. 这个74HC本质还是为了节省IO口的;


哈哈哈,其实我也没找清楚。

文档百密一疏是难免的,只关注了常用的、复杂的内容。反而忽视了这种经典而传统的内容

不过多翻翻权威资料,总能找到一些答案的

springvirus 发表于 2024-11-28 06:35:45

楼主加油!!!

国学芯用 发表于 2024-12-4 11:21:49

优秀的课代表,必须送!包邮送!
期待您更加精彩的点评。恭喜您提前获赠Ai8051U实验箱,今日会给您顺丰免费包邮寄出。期待您在论坛上给大持续分享测试心得,一起前进

国学芯用 发表于 2024-12-4 11:21:52

优秀的课代表,必须送!包邮送!
期待您更加精彩的点评。恭喜您提前获赠Ai8051U实验箱,今日会给您顺丰免费包邮寄出。期待您在论坛上给大持续分享测试心得,一起前进

272761180 发表于 2024-12-4 11:23:36

国学芯用 发表于 2024-12-4 11:21
优秀的课代表,必须送!包邮送!
期待您更加精彩的点评。恭喜您提前获赠Ai8051U实验箱,今日会给您顺丰免费 ...

感谢官方支持,保证学完所有课程!
页: 1 [2] 3 4 5
查看完整版本: 示例贴:日日自新学习AI8051U