#打卡学习贴 记录32g12k的学习研究过程
本帖最后由 Albsm 于 2023-6-29 13:12 编辑教程地址:深圳国芯人工智能有限公司-教学视频_屠龙刀 (stcai.com)
2023年6月29日 10:02:44
刚看完第0号教程,本篇讲了些更新计划,没什么特别重要的部分
————————————————————————————————————
2023年6月29日 10:05:16
1号教程主要讲了keil的设置和新建c文件,并明确了32g的一些设置细节
1.cpu模式的选择:source和binary分别对应需要编译的高级语言和二进制机器语言
2.内存模式的选择:经查阅资料,不同的模式代表将变量,常亮储存在不同的位置,指针的长度等,单片机的ram特性决定了不同位置的访问速度,初步判断这个选项会影响程序运行速度。关于ram具体的信息在隔壁提供的普中51开发攻略中有提到过
存储器类型 描述
data 直接寻址的片内 RAM 低 128B,访问速度快
bdata 片内 RAM 的可位寻址区(20H~2FH),允许字节和位混合访问
idata 间接寻址访问的片内 RAM,允许访问全部片内 RAM
pdata 用 Ri 间接访问的片外 RAM 的低 256B
xdata 用 DPTR 间接访问的片外 RAM,允许访问全部 64k 片外 RAM
code 程序存储器 ROM 64k 空间
此问题在csdn中找到了较为详细的解释:Keil中Memory Model和Code Rom Size说明_keil中memory中参数怎么理解_achejq的博客-CSDN博客
大致内容是访问速度和数据溢出风险等,可以在代码编写过程中定义大体积变量/常量的存放位置,教程中这样设置的目的应该是为了在初期学习的时候直接规避掉可能的数据溢出风险,将代码优化的内容放在后面讲解(2023年6月29日 10:45:37更新)
3.代码存放空间:内容同上
4.4byte Interrupt frame size 意为使用长度为4byte的中断帧,但教程中仅提到了使用这个设置的原因是stc32g的中断进出栈是四字节模式,此处有些许不明白希望有老ass能帮忙答疑解惑,这个4byte是由什么决定的,32位cpu?我理解的最低4byte是否是在中断操作时寄存器数据压栈的最小空间为32bit即4byte?
5.生成hex文件,修改hex文件格式为386,此处是否因为cpu是32位,由于简中区的优秀索引机制我并没找到关于此问题的答案,铺天盖地都是【天晓得keil为什么不规整一下】最终在ARM社区找到了一个没有回答的提问给了我一点小启发,他提到“ As hex-386 is for 32-bit addressing and Hex-80 is 16 bit” 或许是此处设置为386的原因。希望有老ass帮忙答疑解惑。
6.浏览信息选项,查找引用位置的好工具。
7.编写代码,其中P2M0和P2M1可以在头文件中找到对应的寄存器地址,视频中提到下期视频会详细讲解,此处不多深究
8.编译导出hex,并在isp中烧录,烧录过程不多赘述
9.提到usb转ttl与单片机的txd、rxd的连接方式,不多赘述。
——————————————————————————————————————
2023年6月29日 12:24:49
2号教程讲解了端口的io模式及其如何设置,需要注意的几点是
1.准双相口模式可以作为输出与输入端口,在输出高低电平时电压电流相对较小,无法直接驱动大功率负载,同时也可以输出高阻态,在作为输入端口的同时不影响其他端口的正常输出
2.高阻输入模式由于输入电阻极大,对模拟信号和作为按键输入时对于其他端口的影响极小。
3.开漏模式 在这个模式中端口只有低电平和高阻态两种情况,高阻态相当于断路,在这种情况下外接上拉电阻可以完成对不同电平要求的元件的控制。
4.推挽输出模式 此模式可以输出高电平或低电平,由于其驱动能力强电流大,可以用于驱动大功率用电器
2023年6月29日 14:23:24
3号教程讲解了在编程过程中如何使用标识符代替字符串,如何重定义变量关键字来起到简化代码,增强可读性的效果 2023年6月29日 14:30:42
4号教程使用前面讲过的重定义法点亮了一组二极管,由于二极管共阳,需要端口输出低电平以点亮引脚。其中提到使用推挽输出与准双向皆可,因为在输出低电平时两种模式都可以输入20ma的电流 2023年6月29日 14:34:51
5号教程编写了一个添加了延时函数来使led在固定周期闪烁的代码,其中WTST=0用于将cpu上电后读取程序的等待时间缩短为0个时钟周期,可以大大加快在35mhz以下速度工作时MCU的运行速度
————————————————————————————————————————
2023年6月29日 14:51:53
6号教程主要讲了如何使用keil的debug功能来确定延时函数的具体参数,其中使用volatile关键字来修饰变量可以使编译器在编译过程中跳过此变量的优化,达成正常运算以消耗时间的目的。isp中也有自动生成delay函数的工具,由于没有示波器此处无法实验其准确性。
————————————————————————————————————————
2023年6月29日 15:29:34
7号教程使用移位运算符达成了流水灯的效果,由于是共阴二极管所以要将移位后的值取反 本帖最后由 Albsm 于 2023-6-30 15:45 编辑
2023年6月30日 15:36:22
8号教程使用数组方式实现了流水灯的效果,我整合上一集中的移位运算符编写了如下代码,实现了单向三灯流水
部分代码:
int arr = {0x01,0x03,0x07,0xe0,0xc0,0x80};
while(1)
{
int i=0;
for(i=0;i<3;i++)
{
P2=~(arr{i});
Delay100ms();
P2=0xff;
}
for(i=1;i<5;i++)
{
P2=~(arr<<i);
Delay100ms();
P2=0xff;
}
for(i=3;i<6;i++)
{
P2=~(arr{i});
Delay100ms();
P2=0xff;
}
}
代码中的“{i}”并不是书写错误,而是会识别成斜体数组提供了后三位16进制数的目的是为了增加反向流水,我对于移位运算符有如下猜想,是否可以定义一个长度为12bit的变量,使用移位运算符来操作其比特位变化,将其中特定8bit用于赋值LED所在的gpio 希望有老ass帮忙答疑 2023年6月30日 21:38:16
9号教程使用数组与循环编写了一个具有多种流水灯效果的循环程序,我简单写了两种流水灯,代码如下:
#include <STC89C5xRC.H>
unsigned char arr={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
int delay_temps;
void Delay(int delay_sum);
void Animation_1(); //双向流水灯
void Animation_2(); //双向向心扩散流水灯
void main()
{
P2=0xff;
while(1)
{
Animation_1();
Delay(10);
Animation_2();
}
}
void Animation_1()
{
int i=0;
for(i=0;i<8;i++)
{
P2=~arr[i};
Delay(10);
}
for(i=7;i>=0;i--)
{
P2=~arr[i};
Delay(10);
}
}
void Animation_2()
{
char sum;
int i;
i=0;sum=0;
for(i=0;i<4;i++){
sum+=arr;
P2=~sum;
Delay(10);
}
for(i=3;i>=0;i--){
sum-=arr;
P2=~sum;
Delay(10);
}
}
void Delay(int delay_sum) //@11.0592MHz10ms per count
{
for(delay_temps=0;delay_temps<delay_sum;delay_temps++)
{
unsigned char data i, j;
i = 18;
j = 234;
do
{
while (--j);
}
while (--i);
}
} 2023年7月1日 01:20:57
第10期教程讲解了如何使用单片机io口直接驱动LED。首先将对应的IO口设置为高阻输入模式,在这个模式中可以将IO口看做为悬空的断路,在接入上拉电阻时此引脚对外显高电平,但这个高电平并不是io口输出的,而是由外接的上拉电阻提供的,同理将下拉电阻接入,此引脚也可以对外显示为低电平。教程中使用接入或断开上拉电阻的形式来操作此引脚对应的LED,使其在可以正常点亮的同时获得较大的电流。由于相关知识匮乏,暂时还不清楚此操作意义是什么,或许可以用于测量某元器件开启后供电的压降,以精确测算其参数,如电池内阻等 2023年7月1日 01:49:29
第11期教程讲解了sfr寄存器,xfr寄存器以及EAXFR赋值的作用。
sfr寄存器是MCU的特殊功能寄存器,包含了一些功能比如IO口模式,PWM,I2C等。而MCU的功能越来越多,sfr的空间不足以容纳这些新增功能的位定义,就需要新增一个空间用于存放它们,xfr寄存器应运而生,即扩展的特殊功能寄存器。xfr默认是关闭的,需要控制位于sfr区的EAXFR来开启或关闭。在使用EAXFR = 1后即可使用诸如第10期提到的片内上拉下拉电阻功能。另外也提到了CKCON,这个变量定义了外部数据总线时钟在上电后的等待时间,以时钟周期计。将其赋值为0,并将WTST即程序代码等待时间赋值为0后单片机可以以相较默认状态下更快的速度运行。这也是后面大多数程序编写时写在循环部分之前的语句。 优秀的小伙伴,给您点个赞!STC有您更精彩!您是否跟我们业务经理对接上了?
【免费+包邮】 送/申样/采购热线:0513-55012928、0513-55012929、0513-55012966
工作时间:8:30-12:0013:00-17:30(周一 到 周五, 法定节假日除外),也可加如下 QQ 或 微信 申请
加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服曹经理QQ:1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服聂经理QQ:2593903262;微信:18106296598要求 【免费+包邮】 送, 还免费教仿真
加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593要求 【免费+包邮】 送, 还免费教仿真
加STC华北区客服石经理QQ: 1638975601 ;微信:19952583876要求 【免费+包邮】 送, 还免费教仿真
加STC华中区客服唐经理QQ:2571301708 ;微信:18106296589 要求 【免费+包邮】 送, 还免费教仿真
加STC东北区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教仿真
STCAI-32位8051 发表于 2023-7-1 09:10
优秀的小伙伴,给您点个赞!STC有您更精彩!您是否跟我们业务经理对接上了?
【免费+包邮】 送/申样/ ...
谢谢,已经联系过了,人很好很可爱XD