AI8051U单片机学习打卡记录
<p>第一集-芯片性能概况</p><p>这是一款功能非常先进的单片机,与早期的型号相比较,已有了质的飞跃,</p>
<p>1、具有高刷新率的图像处理能力;</p>
<p>2、可以使用8位指令集的C51编译器;</p>
<p>3、也可以用32位指令集的C251编译器;</p>
<p>4、体积也大为缩小,功耗也将更低;</p>
<p>5、管脚数也有增加,适应更多的应用场合;</p>
AI8051U单片机学习打卡记录
第一集-芯片性能概况这是一款功能非常先进的单片机,与早期的型号相比较,已有了质的飞跃,
1、具有高刷新率的图像处理能力;
2、可以使用8位指令集的C51编译器;
3、也可以用32位指令集的C251编译器;
4、体积也大为缩小,功耗也将更低;
5、管脚数也有增加,适应更多的应用场合;
第二集 硬件情况与相关软件以及如何下载程序
该实验箱,体积小巧,功能模块齐全,函盖了绝大多数单片机编程的功能,是学习51单片机的不二选择。
1、8位发光二极管,入门级的流水灯实验;
2、8位八段数码管,时钟实验;
3、TFT彩屏,图像处理与显示;
4、音频处理,语音识别与处理;
5、矩阵键盘与独立键盘,方便各种数据的的输入;
6、完善的数据通讯接口,方便与计算机数据交换,USB、TYPE-C等接口;
7、TF卡插槽,放便数据的贮存与交换;
在软件方面,使用目前流行的C语言编译软件KEIL,配合自已公司开发的ISP软件,
使得下载程序非常方便和简单:1、通过USB口直接下载程序,无需用TX、RX串口下载;
2、按压P3.3键,重启单片机(断电)使单片机进入 HID1模式,即可下载程序;
3、输入用户程序动行时的IRC频率,应根据编程说明中的频率一致;
4、下载第一个流水灯程序,选择32位(默认)文件夹中的*.hex文件。
第三集点亮一个LED发光二极管
单片机的学习,都是从点亮一个发光管开始的,看似一个简单的动作,但它函盖了从硬件到软件的整个过程。
1、打开KEIL软件;
2、点击文件菜单:Project/New uVision Project...
3、选择工程文件的保存路径,并为工程文件命名;
4、在弹出的对话框中,选择单片机的型号;
5、新建一个C语言文件并保存,一般的文件名为main.c;
6、添加新建的的文件到当前的工程中;“Add Existing Files to Group1';
一个空工程,到此就建立完成。
7、对当前工程进行相关设置:
勾选:"Create HEX File HEX Fomat"HEX-80
8、添加头文件到C程序中:右键,点选
insert'#include<AI8051U.H>'
9、C程序基本框架结构为:
#include <AI8051U.H>
main()
{
while(1)
{
}
}
第四集 USB不停电下载
下载、调试程序是单片机学习中,最频繁的操作,为简化操作,可使用“USB不停电下载”的方法,即无需按压P3.3与电源开关。
USB下停电下载有三种方式:
1、USB-HID方式,PC发送指令,触发MCU复位并自动下载;
2、USB-CDC方式,PC发送指令,触发MCU复位并自动下载;
3、按键触发方式,按键触发MCU复位,进入ISP下载模式,PC端再点击下载;
一、USB-HID方式
1、添加 usb_hid_32.lib、USB.h这二个文件到项目文件中,库文件可以STC官网下载,
2、在C程序中,添加头文件includ"usb.h";
3、添加调试程序
//USB调试复位所需定义
char *USER_DEVICESC=NULL;
char*USER_PRODCTDESC=NULL;
char*USER_STCISPCMD="@STCISP#";//设置自动复位到ISP区的用户接口命令;
4、在初始化程序中,添加USB初始化以及时钟源启动程序;
//---------USB调试复位所需代码 -------------------
P3M0 &=~0x3;
P3M1 |=0x03;
while( !C(IRC48MCR&0x01));
USB_init();
//-----------------------------
5、在主函数中
while(1)
{
}
添加USB初始化以复位所需代码
//---------USB调试复位所需代码 -------------------if(bUSBOUTReady)
{
USB_OUT_done();
}
//-----------------------------
6、在STI-ISP软件中,对相关内容进行设置:
需要注意的是:第一次下载程序,仍需手动操作,完成后,下次即可自动下载。
第五集 C语言基础
一、printf函数,是C语言中最为常用输出语句,它可以让计算的结果直接显示出来,以方便程序的调试,
一般的格式为:printf("<格式化字符串>“,<参量表>);
例一:
printf("Hello Word!\r\n");
输出的结果是:
Hello Word!
上面的\r\n是回车的作用,计算机打印完成后,光标另起一行;
例 二:
int abc=999;
printf("The value of abc is %d !", abc);
输出的结果是:
The value of abc is 999 !
例 三:
int a=100; int b=200; int c=300;
printf("a=%d, b=%d, c=%d", a, b, c);
输出的结果是:
a=100, b=200, c=300
//后面的为注释。注释用来说明代码是什么意思,起到提示的作用,可以帮助我们理解代码。注释虽然也是代码的一部分,但是它并不会给程序带来任何影响,编译器在编译阶段会忽略注释的内容,或者说删除注释的内容。
二、变量类型
C语言的基本变量类型主要包括以下几种:
1. char:字符类型,通常占用一个字节(8位)的存储空间。它可以表示一个字符(如 'A'、'a' 等),也可以作为小整数(-128到127)使用。
2. int:整数类型,其大小依赖于具体的编译器和平台。在许多系统中,一个int通常占用两个字节(16位),表示的数值范围在-32768到32767之间。但也有很多系统上的int可能是32位或64位。
3. float:单精度浮点数类型,占用32位存储空间。一个float变量包含一个符号位,8位指数和23位尾数。其数值范围大约在-3.4e-38到3.4e38之间,并且通常具有6到7位的十进制数精确度。
4. double:双精度浮点数类型,通常占用64位存储空间。double类型的变量拥有更高的精确度,大约为14到15位十进制数。它的数值范围在-1.7e-308到1.7e308之间。
#define u8 unsigned char //用字母“u8“来代替”unsigned char“这一长串字符
同样,也可以定义整型变量:
#define u16 unsigned int //用字母“u16“来代替”unsigned int“这一长串字符
十 进制:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
十六进制:1 2 3 4 5 6 7 8 9 10A B CD E F
例:十六进制与十进制互换: 0xC=12
0x9=9 (0x9表示十六进制数中的9)
打开“计算器”:
选择“</>Programmer"(程序员)
三、各种运算符及运算方法:
1、算术运算
+(加法)、-(减法)、*(乘法)、/(除法)、% (取模)、++(加1)、--(减1)
2、逻辑运算
逻辑与(&&),逻辑或(||),逻辑非(!)
3、其它运算
==(真假)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)
=(赋值)、+=(加且赋值)、-=(减且赋值)、*=(乘且赋值)、%=(除且赋值)、
<<=(小于等于) 、 >>=(大于等于)、&=、 ^=、|=
第六集 I/O输入、输出
GPIO(General Purpose Input/Output)是一种通用输入输出端口的缩写。
I/O是“Input/Output”的缩写,意为“输入/输出”,是单片机系统与外界交流的关键概念,涵盖了所有形式的数据接收(输入)和数据发送(输出)过程。
高电平:电源正极电压VCC即为高电平,在51单片机中,电源电压为5V;
低电平:电源负极GND即为低电平,在51单片机中,电源电压为0V;
在实际应用中;2-5V都可认为是高电平,小于0.99V即可认为是低电平;
与5V单片机相比,3.3V单片机的电压范围更窄。在3.3V单片机中,高电平电压范围一般是2.2V以上,低电平电压范围一般是0.8V以下。
AI8051单片机四种工作模式:
1、准双向端口模式:在这种模式下,端口既可以作为输入也可以作为输出。当负载电阻小于82kΩ时,电压随着负载电阻线性上升;超过82kΩ后,电压突然上升到4.6V以上。在此状态下,端口表现出恒流特性,电流约为16.2微安
2、推挽输出模式:在这种模式下,端口的输出电压能力与负载电阻有关。当负载电阻从100欧姆变化到10k欧姆时,输出电压随着负载电阻的增加而上升。特别地,当负载电阻超过1k欧姆后,输出电压出现波动。关闭LED后,输出电压变得平稳,说明LED闪烁会影响其他端口的电压输出
3、开漏输出模式:在这种模式下,端口提供开漏输出,需要外部上拉电阻才能实现高电平输出。这种模式适用于需要灵活配置I/O口的应用场景
4、模拟功能模式:在这种模式下,端口可以作为模拟信号输入或输出使用。具体应用包括测量外部信号的电压或电流,以及输出模拟信号控制外部设备
一般情况下,都设置成准双向端口模式。
AI8051UI单片机端口设置格式:
P0M1 =0x00;P0M0=0xff;
P1M1 =0x00;P1M0=0xff;
P2M1 =0x00;P2M0=0xff;
P3M1 =0x00;P3M0=0xff;
P4M1 =0x00;P4M0=0xff;
P5M1 =0x00;P5M0=0xff;
P6M1 =0x00;P6M0=0xff;
P7M1 =0x00;P7M0=0xff;
实验一 :点亮一个发光管(闪亮)
#include <AI8051U.h>
#include <stdio.h>
#include <intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define MAIN_Fosc 24000000UL
voiddelay_ms(u8 ms);
void main(void)
{
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0xff; //设置为推挽输出
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
while(1)
{
P00 = 0; //LED On
Delay1000us(1000);
P00 = 1; //LED Off
Delay1000us(1000);
}
void Delay1000us(void) //@11.0592MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 2763UL;
while (i) i--;
}
延时程序,可用STC- ISP中的“软件延时计算器“来获得:
第七集 定时器与中断
一、定时器的作用:
1、用于计时系统,可实再软件计时或者使程序每隔一固定时间完成一项操作。
2、替代长时间的Delay, 提高程序的运行效率和处理速度(可以打断主循环);
二、中断的概念
中断是一种事件驱动的机制,允许单片机在执行程序的过程中暂时中断当前的任务,转而处理来自外部的优先级更高的事件。
当中断事件发生时,单片机会立即跳转到中断服务程序(ISR),执行相关的处理代码,然后返回到原来的程序继续执行。
三、51单片机的中断
1. 51单片机的中断源
51单片机中的中断源可以是外部硬件引脚的电平变化(外部中断),也可以是单片机内部的定时器/计数器溢出、串口接收等(内部中断)。
不同的51单片机中断源可能有所不同。一般51单片机至少有 5个中断:外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断。
四、函数的定义与调用
/*************本地函数声明 **************/
voiddelay_ms(u8 ms);
//========================================================================
// 函数: voiddelay_ms(unsigned char ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
//========================================================================
voiddelay_ms(u8 ms)
{
u16 i;
do{
i = MAIN_Fosc / 6000;
while(--i);
}while(--ms);
}
页:
[1]