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实验箱,今日会给您顺丰免费 ...
感谢官方支持,保证学完所有课程!