第三集
对比传统8051,AI8051的IO更加强大,支持多种模式
使用起来非常方便,感觉这个功能可以使用库函数实现。
另外内部具备了上拉电阻,很方便用于按钮输入的应用,不需要外部再做上拉电阻。
另外支持驱动电流的配置,这个可以用于IO低功耗,如果不需要大电流的项目,就可以配置为一般驱动能力,如果需要Io直接驱动能力,那就配置为增强驱动
比如用IO去控制MOS开关,就可以配置为增强模式。
学会IO的应用后就可以满足大部分的项目开发了,比如很多串口通信协议都可以用IO来模拟,另外很多外设芯片厂家也提供了IO模拟的测试代码,非常方便。
第四集
在其他网站看到了别人关于AI8051的USB应用的视频,觉得非常不可思议。
原来USB的使用是可以如此的简单,AI8051太强了,我想玩玩。看了相关的课程和代码,顿时开悟了。
- #include "ai8051u.h" //调用头文件
- #include "stc32_stc8_usb.h" //调用头文件
-
-
- char *USER_DEVICEDESC = NULL;
- char *USER_PRODUCTDESC = NULL;
- char *USER_STCISPCMD = "@STCISP#";
-
- void main(void)
- {
- P_SW2 |= 0x80; //B7位写1,使能访问XFR
-
- P0M1 = 0x00; P0M0 = 0x00;
- 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;
-
- usb_init(); //USB CDC 接口配置
-
- IE2 |= 0x80; //使能USB中断
- EA = 1; //IE |= 0X80;
-
- while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
-
- while(1)
- {
-
- if (bUsbOutReady)
- {
- USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
-
- usb_OUT_done();
- }
-
- P40 = 0; //P40端口输出0V
- P00 = 0; //P00端口输出0V
- P02 = 0; //P02端口输出0V
- //P01 = 0; //P01端口输出0V
- //
- }
- }
复制代码
这些封装好的函数可以用,不过封装成了LIB,不能一窥背后真容。不过这并不影响使用,期待能得到一套开发板,自己动手来做。
第十集
之前不知道这个工具还有这个功能,看了一下,隐藏了很多我之前没注意到的功能。太强了
这个功能可以方便的使用电脑作为输入工具,简化了开发环境,非常方便按钮输入的项目开发。
不用再连接真实的按钮就可以完成相关逻辑的开发工作。
第十二集
复位操作可以确保单片机在开始工作时处于已知的状态,使其能够正确初始化各个寄存器和外设。
因此开机的上电复位就是一种重要的复位,这个时候系统做好初始化,然后进入用户的代码初始化,完成各项工作的配置。
低压复位,是供电不稳定的时候为了保护系统运行状态进入的一种复位。
复位是关键的,所以很多时候为了保证系统是一直正常运行的可以通过看门狗来实现对系统是否运行正常的监控。
当不能喂狗的时候,就是出错卡壳了,看门狗复位系统,通过查询相关标记,确认复位原因来做相应的操作。也可以用于对应用方案排错。
第7集
定时器是一个重要的单片机外设,很多与时间尺度相关的引用都需要用到定时器。比如精准的计时,精准的延时。
例如单线的DS18B20通信,就要精准计时,不然就无法识别出0和1,以及WS2812三色LED,也是需要时间刻度来确保区分出串行数据。
配置的时候结合手册外设的结构图来配置就很容易了。上面标注的寄存器名字跟头文件都是一一对应的。
定时器计数,溢出后可以中断,中断后触发中断函数,中断函数内处理相关的时间节点事件。
像8051一样,定时器的中断入口通过关键字确定
void Timer0_Isr(void) interrupt 1 //3秒执行一次
{
state = !state;
P00 = state;
P01 = !state;
}
第八集
定时器周期性调度任务 学习心得
通过定时器实现周期性的对各个任务执行,可以有效避免卡在某个任务里,这样就需要对每个任务做细分了,确保每个任务在自己的执行周期内能够执行完毕。
定时器只需要在指定的周期内标记对应的任务要执行,并在主函数内执行相关的函数后清理标记确保下个周期再被记录。
实现类似的功能还可以通过时钟参考点,类似Ardunio提供的时间函数一样,循环里在每个任务有一个时间记录变量,循环到自己就去读取一下时钟看看有没有到自己的任务执行点,如果有就执行,否则就跳过去。
我觉得这两者还是挺像的。
学arm的时候也是,中断的入口都是在某个配置文件内设置好的。
第十一集
矩阵按键学习心得
矩阵按键可以实现更多的按键功能,通过扫描方式,逐行确定是哪个按钮被按下的。
通过对不同的行列组合测试以确定是哪一行,哪一列短接了,这样就可以判断处是哪个按钮被按下了。
该课程可以学到IO的基本输入和输出功能,以及上拉电阻的概念。另外就是通过逻辑组合识别出是哪个位置按钮被按下了。
这个方法有给缺点没法实现组合按钮的识别,不知道我的理解正确不。
|