AI8051U学习之旅
i8051U,USB 型 1T 8051,支持32位和8位指令集 RMB2.3管脚兼容:89C52RC, 12C5A60S2
要兼容8位8051指令集,可以用Keil C51/IAR/SDCC 编译器==就相当于更强大的 8H8K64U•
要兼容32位8051指令集:可以用KeilC251编译器,双核兼容设计
==就相当于更强大的32G12K128,32G8K64
三种封装:PDIP40;LQFP48;LQFP44
34K SRAM(2K edata, 32K xdata), 64K Flash
TFPU@120MHz,硬件浮点/硬件三角函数 运算器
DMA支持PWM,DMA支持外设直接到外设,P2P
支持DMA 8080/6800接口 TFT彩屏模块驱动;
全速USB,支持USB-CDC、USB-HID;
串口并可掉电唤醒;
支持硬件USB直接下载和仿真,本身就可在线仿真;
带有I2S音频总线;
TFPU(108MHZ)硬件浮点、硬件三角、反三角函数运算器;
MDU32 硬件32位乘除法器;
支持上升沿、下降沿中断以及边沿中断,传统的PCA/CCP/PWM(可当外部中断并可掉电唤醒)
掉电唤醒专业定时器;
DMA 12位15路高速ADC;
内部高精准时钟(42MHZ以下可调);
定时器/计数器(T0/T1/T2/T3/T4/T11外部管脚也可掉电唤醒
要 做到 USB不停电下载;
要 尝试 AiCube 图形化自动配置生成程序工具;
推荐优先看的:
printf_usb("Hello World !\r\n")及
USB不停电下载, 演示视频链接:
https://www.stcaimcu.com/thread-19077-1-1.html
下载 最新的 AiCube-ISP-V6.96P 或以上版本软件 !
深圳国芯人工智能有限公司-工具软件
下载 最新的 USB库函数,永远用最新的 USB库函数 !
深圳国芯人工智能有限公司-库函数
下载 最新的 用户手册 !
下载 最新的 上机实践指导书 !
下载 最新的 Ai8051U 用户手册
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf
下载 最新的 Ai8051U 实验指导书,
有 AiCube 图形化自动配置生成程序工具使用说明
https://www.stcaimcu.com/data/do ... %AF%BC%E4%B9%A6.pdf
推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接
https://v.stcai.com/sv/1c5eec2-197fcd9b766/1c5eec2-197fcd9b766.mp4
https://v.stcai.com/sv/1fce8086-197cf2b9dd4/1fce8086-197cf2b9dd4.mp4
配置I/O口
每个I/O口 的配置都需要使用两个寄存器进行设置
以P0口为例,配置P0日需要使用P0M0和P0M0两个寄存器进行配置,如图
即 P0M0的第0位和 P0M1的第0位组合起来配置P0.0口的模式;
即 P0M0的1位和P0M1的第一位组合起来配置P0.1口的模式
其他所有I/O的配置都与此类似!
PnM0与PnM1 的组合方式如下表所示
PnM1、PuM0、I/O 口工作模式
PnM1=0、PuM0=0 准双向口(传统8051端口模式,弱上拉)
灌电流可达20mA,拉电流为270~150uA(存在制造误差)
编译运行结果如下:
USB不停电下载
1.实验对比演示
2.下载所需文件(STC官网-软件工具-库函数-USB库文件)
3.移植关键部分到工程
3.1添加头文件
3.2 USB初始化函数(lib+.h库实现)
3.3 命令参数
3.4打开P_SW2寄存器和IE2寄存器(只打开一个位!)
任务1:按下p32按钮灯亮,松开p32按钮灯灭
任务2:按下p32按钮灯灭,松开p32按钮灯亮
任务3:按一下灯亮,按一下灯灭
定时器
1.定时器的介绍
2.定时器的应用
定时频率(HZ) =Sysclk (hz)/(TM0PS +1)(65536-)*T)
定时时间(s)=(TM0PS +1)(65536-)*T)/Sysclk (hz)
= 65536-(Sysclk (hz)*定时时间(s))/(T*(TM0PS +1))
T=1或者12
16位自动重载定时器的本质就是从设定值数到65536(溢出)之后置位一次标志位,如果使能ET0就可以进入中断!
3.函数的定义、声明、调用
定义:包含返回值,函数名和入口参数,并定义了函数具体功能。
返回值类型 函数名(入口参数)
{
//函数体
// 函数执行的代码
return 返回值;
}
函数的名称应当能够描述函数的功能,便于代码的阅读和理解。
函数名称应当使用有意义的英文单词或者组合的英文单词,避免使用特殊字符或数字。
函数名称不能与C语言的关键字同名。
声明:在头文件或者被调用之前使用,注意末尾要加分号
返回值类型 函数名(入口参数);
调用:在需要调用的地方直接使用函数名,加上括号和分号。
如果有入口参数的,需要在括号的多个参数之间加逗号隔开。
函数名(入口参数);
任务1:LED灯三秒取反一次,这期间任意时刻按下按钮,串口打印按键次数
任务2:灯按一下点亮3秒后熄灭
任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2表示红和蓝灯),再按一下报警按钮,红蓝灯停止。
周期性任务
任务:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED3实现0.9秒取反一次
通过一个变量计数,假设这个变量1ms自加一次,加到300即为300ms,
加到600就是600ms;计数到达后重新清0;
数组使用分为如下两步
1.定义
类型 名称[长度]={数值};
2.使用
赋值:名称[索引]=数值
数码管显示“12345678”
数码管显示“时、分、秒”
虚拟显示LED数码管
每一颗灯灭
一颗一颗亮过去
虚拟显示
任务1:P2口流水灯,p10闪烁
任务2:左边数码管显示P32按下次数,右边数码管显示P33按下次数
任务3:按下数字按键在数码管显示对应的按键数字
矩阵键盘
任务一:数码管显示当前的按键号
①第一步:现将P0.0-P0.3输出低电子,P0.6-P0.7输出高电平,如果有按键按下,按下的那一行的I/O就会变成低电平,就可以判断出哪一行按下了。
②第二步:现将P0.0-P0.3输出高电平,PO.6-PO.7输出低电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。
③第三步:行列组合一下就可以判断出是哪个按键按下了。
任务二:密码锁显示12345670正确显示1错误显示-------
页:
[1]
2