srkxrolz
发表于 前天 01:30
打卡
第三课创建工程
打开keil-->>project-->>new project-->>选择保存的位置-->>选择STC MCU database-->>AI-->>”AI051U-32bit series”
创建main.c并添加到工程
配置工程:
Cpu mode:c251
内存模式:small
Code Rom尺寸:large 64K
勾选4Byte中断框架尺寸
勾选创建hex文件,并选择HEX-80 如果程序空间大于64k就需要选择HEX-386
在stc-isp中吧头文件放到自己的工程目录中,添加到工程
Main.c
#include "ai8051u.h"
void main(){
P2M0 = 0x00; // 设置P2口为通用I/O口
P2M1 = 0x00; // 设置P2口为通用I/O口
P2 = 0x0f; // 设置P2口初始状态
while(1){}
}
8051u中的端口模式由M0 M1组合设置
p0m0=0; p0m1=0 开漏输出
srkxrolz
发表于 前天 01:32
打卡
第四课:usb不停电下载
深圳国芯人工智能有限公司-库函数
下载usb库文件
#include "ai8051u.h"
#include "ai_usb.h"
void main()
{
P_SW2 |= 0x80; // 打开扩展寄存器访问
P2M0 = 0x00; // 设置P2口为通用I/O口
P2M1 = 0x00; // 设置P2口为通用I/O口
P2 = 0x0f; // 设置P2口初始状态
usb_init(); // 初始化USB
EA = 1; // 允许总中断
while (1)
{
if (bUsbOutReady)//检查Usb是否准备好
{
USB_SendData(UsbOutBuffer, OutNumber);
// printf_usb("1. Read Num:%d\n", OutNumber);
// printf_usb("2. Read Num:%d\n", OutNumber);
// printf_usb("3. Read Num:%d\n", OutNumber);
// printf_usb("4. Read Num:%d\n", OutNumber);
usb_OUT_done();
}
}
}
禁止发言
发表于 前天 07:26
{:4_165:}
fs_ajin
发表于 前天 09:14
学习
fs_ajin
发表于 前天 09:14
学习
dcc20250218
发表于 前天 09:39
每天进步一点点。
red枫叶
发表于 前天 14:43
努力学习
heceer
发表于 前天 16:35
大力支持!!!
srkxrolz
发表于 昨天 01:38
打卡
第五课 C语言基础语法 运算符略
srkxrolz
发表于 昨天 01:41
打卡
第六课 gpio
高电平接近VCC的电压
低电平 接近 GND的电压
接口可以承受的电压位位vcc+0.3V
如果单片机使用5V电压,那么gpio端口可以接受的对打电压就是5+0.3=5.3V
如果VCC是3.0v那么gpio最大就是3+.3=3.3V
所有GPIO在复位后默认都是打开施密特触发器的
例: VCC=3.3V高电>=1.18v低电平<=0.99
其他电器限制如下图:
P0M0与P0M1一起决定gpio的4种工作模式
M0=0M1=0 弱上拉
M0=1M1=0 推挽输出
M0=0M1=1 高阻态
M0=1M1=1 开漏模式
#include "ai8051u.h"
#include "ai_usb.h"
bit p32_status = 0;// 初始化状态
bit p33_status = 0;// 初始化状态
void Delay20ms(void) //@40.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 199998UL;
while (i)
i--;
}
void main()
{
WTST = 0;// 设置程序指令延时参数
EAXFR = 1; // 设置EAXFR位为1,允许访问扩展寄存器
CKCON = 0; // 提高访问xram速度
P2M0 = 0x00; // 设置P2口为通用I/O口
P2M1 = 0x00; // 设置P2口为通用I/O口
P2 = 0x0f; // 设置P2口初始状态
usb_init(); // 初始化USB
EA = 1; // 允许总中断
printf_usb("P32: %d, P33: %d\n", P32, P33); // 打印P32和P33的状态
while (1)
{
if (bUsbOutReady) // 检查Usb是否准备好
{
USB_SendData(UsbOutBuffer, OutNumber);
// printf_usb("1. Read Num:%d\n", OutNumber);
// printf_usb("2. Read Num:%d\n", OutNumber);
// printf_usb("3. Read Num:%d\n", OutNumber);
// printf_usb("4. Read Num:%d\n", OutNumber);
usb_OUT_done();
}
if (P32 == 0)
{
Delay20ms(); // 延时20ms
if (P32 == 0)
{
p32_status = !p32_status; // 切换状态
P20 = p32_status; // 设置P2.0为高电平
while (P32 == 0)
;
printf("P32 pressed, status: %d\n", p32_status);
}
}
if (P33 == 0)
{
Delay20ms(); // 延时20ms
if (P33 == 0)
{
p33_status = !p33_status; // 切换状态
P21 = p33_status; // 设置P2.0为高电平
while (P32 == 0)
;
printf("P33 pressed, status: %d\n", p33_status);
}
}
}
}