第二集 点亮一颗LED
按照《8051U深度入门到32位51大型实战教学视频》
6.5新建与设置超64K程序代码的项目(Source)模式

通过读取手册可以得知:
AI8051U目前只支持Source模式,由于中断的压栈与出栈都是4字节建议选中 4Byte Intemupt Frame Size
并且Memory Model选择为XSmall模式,首先AI8051U逻辑地址为FF:0000H~FF:FFFFH,必须使用24位地址线才能正确访问,默认常量类型必须使用"far"类型,指针变量为4字节。
Memory Model模式区别:
XSmall模式将变量定义在内部RAM也就是edata中,单时钟存取,访问速度快,且有2k的edata供使用。
Small模式也是默认将变量定义在内部RAM(data)中,而data默认只有128字节,超过128字节会报错
Large模式虽然能够正确访问全部的16M寻址空间,但是该模式默认将变量定义在内部扩展RAM(xdata)里,存取需要2~3个时钟,访问速度慢。
故设置为XSmall模式
Code Rom Size模式区别:
Small模式: 跳转/调用指令 为AJMP/ACALL ,单个函数/模块/文件的代码大小为 2K ,总代码大小为 2K
Medium模式: 内部模块代码使用 为AJMP/ACALL ,外部模块代码使用 为LJMP/LCALL,单个函数/模块/文件的代码大小为 2K ,总代码大小为 64K
Compact模式: 跳转/调用指令 为LCALL/AJMP ,单个函数/模块/文件的代码大小为 2K ,总代码大小为64K
Large模式: 跳转/调用指令 为LCALL/AJMP ,单个函数/模块/文件的代码大小为 64K ,总代码大小为64K
Huge模式: 内部模块代码使用 为LJMP/ECALL ,外部模块代码使用 为EJMP/ECALL,单个函数/模块/文件的代码大小为 2K ,总代码大小为 64K。(多文件项目中,文件内部的代码为内部模块代码,其他文件的代码为外部模块代码)
这里设置为 Large模式
终于到了代码环节,这里必须得搞明白AI8051U的端口定义!
比方说:
我们可以把P0M0、P0M1理解为一个8位的变量,他可以对0~7位进行二进制的操作,赋予0或者是1
P0M0中的P0指的是端口P0,M0指的是P0.0
P0M1中的P0指的是端口P0,M1指的是P0.0
P1M0中的P1指的是端口P1,M0指的是P1.0
P1M1中的P1指的是端口P1,M1指的是P1.0
那么P0.0的引脚模式就是由这个P0M0与P0M1的第0位的状态共同决定的
那么P1.0的引脚模式就是由这个P1M0与P1M1的第0位的状态共同决定的

#include "ai8051u.h" //调用头文件
void main(void)
{
P2M0 = 0x00;
P2M1 = 0x00;
while(1)
{
P2 = 0X00;
}
}
前面我们知道了P2M0、P2M1是8位变量,这里赋值的方式为16进制,相当于0000 0000 也就是0~7的引脚设置为 准双向口
程序执行为 先将P2的0~7位设置为准双向口,之后无限将P2的 0 ~ 7位拉低,由于在板子上LED灯与电阻串联,一端在高电平上,而另一端在我们的单片机AI8051U上,也就是通过单片机控制引脚来决定LED灯是否发光
电流的产生总是从高电平流向低电平,所以我们的8个LED灯均会发光
