单片机型号说明:IAP15F2K61S2
新建工程时单片机型号选择STC15F2K60S2
单片机I/O口的使用
对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机总共有P0、P1、P2、P3四个八位双向输入输出端口
LED原理图
先来笨方法点个流水灯
1. #include <STC15F2K60S2.H> 2. 3. sbit led0 = P0^0; // sbit写法 4. sbit led1 = P0^1; 5. sbit led2 = P0^2; 6. sbit led3 = P0^3; 7. 8. long a; 9. 10. void main() 11. { 12. P2 = 0xA0; P0 = 0x00; P2 = 0x80; P0 = 0xFF;//初始化,防止蜂鸣器乱叫 13. 14. while(1) 15. { 16. led0 = 0; led1 = 1; led2 = 1; led3 = 1; 17. for (a = 80000; a > 0; a --); //阻塞性延时,只是看下流水灯效果! 18. led0 = 1; led1 = 0; led2 = 1; led3 = 1; 19. for (a = 80000; a > 0; a --); 20. led0 = 1; led1 = 1; led2 = 0; led3 = 1; 21. for (a = 80000; a > 0; a --); 22. led0 = 1; led1 = 1; led2 = 1; led3 = 0; 23. for (a = 80000; a > 0; a --); 24. } 25. }
直接在while(1)里写流水灯代码
stc-isp烧录程序经常烧录不进去,为啥呢???
单片机工作的基本时序
机器周期和指令周期
振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期,学习板上为12MHz,一个时钟周期就是1/12M = (1 / 12000000) s
状态周期:每个状态周期为时钟周期的2倍,是时钟周期经过二分频后得到的
机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。
指令周期:它是指CPU完成一条操作所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。51单片机系统中,有单周期指令、双周期指令和四周期指令。
修改编码格式-支持中文
Keil5默认编码格式是ANSI,每次删除注释的时候,都要删除两下,而且赋值粘贴程序的时候,经常出现乱码,就很烦
把编码格式改成UTF-8或GB2312
个人更推荐使用UTF-8编码格式
但是15单片机的头文件注释是乱码,想要查看15头文件的注释,将编码格式改成GB2312即可
注意:拔插芯片要断电进行!
15单片机是51单片机运行速度的8~12倍
15单片机在线仿真
IAP15单片机可以支持在线仿真
先添加STC库、STC仿真器驱动到Keil中,安装路径选择Keil的安装路径
安装成功提示:
Debug默认设置如下:
设置成在线仿真模式,选择STC……51……那个
然后将COM设置成和烧录器 一样的COM口
设置为仿真芯片
烧录程序,在线仿真烧录程序比较慢!
然后就可以一步一步在线调试咯
另外使用15单片机头文件,可以直接使用P00代表P0^0 因为15的头文件中已经定义好了
编译下载程序,现象一致
1. #include <STC15F2K60S2.H> 2. 3. long a; 4. 5. void main() 6. { 7. P2 = 0xA0; P0 = 0x00; P2 = 0x80; P0 = 0xFF;//初始化,防止蜂鸣器乱叫 8. 9. while(1) 10. { 11. P00 = 0; P01 = 1; P02 = 1; P03 = 1; 12. for (a = 80000; a > 0; a --); 13. P00 = 1; P01 = 0; P02 = 1; P03 = 1; 14. for (a = 80000; a > 0; a --); 15. P00 = 1; P01 = 1; P02 = 0; P03 = 1; 16. for (a = 80000; a > 0; a --); 17. P00 = 1; P01 = 1; P02 = 1; P03 = 0; 18. for (a = 80000; a > 0; a --); 19. 20. } 21. }
书写方便,真香
代码太麻烦了,修改修改
1. #include <STC15F2K60S2.H> 2. 3. unsigned char i; 4. long delay; 5. 6. void main() 7. { 8. P2 = 0xA0; P0 = 0x00; P2 = 0x80; P0 = 0xFF; //初始化 9. while(1) 10. { 11. for ( i = 0;i < 8; i ++) 12. { 13. P0 = ~(0x01 << i); //流水 14. for(delay = 80000; delay > 0; delay --); //简单的延时 15. } 16. } 17. }
具体玩法如下