常用的延时方法:
软件延时(使用简单但是浪费CPU资源)、定时器延时(不浪费CPU资源),本次先使用软件延时。
LED全亮代码:
#include<reg52.h> //引用51的头文件
void main()
{P1=0;
}
整体代码闪烁
#include<reg52.h>unsigned int i;void main(){while(1){P1=0;i=65535;while(i--);P1=0xff;//单片机会将你写的数转换为二进制,也可以写十进制255,等同于二进制11111111,将灯熄灭。i=65535;while(i--);}}
循环移位函数:()
字符型循环左移: _crol_
字符型循环右移: _cror_
a=0xFE;//11111110
b=_corl_(a,1)//11111101
循环左移是把最高位移到最低位上
左右移运算符:(<<>>)
a=0xFE;//11111110
b=a<<1;//11111100
左移运算符是把最高位移除最低位补零
流水灯代码
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z)
{uint x,y;for(x=z;x>0;x--)for(y=114;y>0;y--);}
uchar temp;
void main()
{temp=0xfe;P1=temp;//delay(100);while(1){temp=_crol_(temp,1);P1=temp;delay(200); }
}
调试过程演示
首先改晶振频率将24改为11.0592(根据自己的情况):
点击debug进行调试:
出现的界面右上部分是汇编代码(可关闭),左边一列中sec是程序运行的时间,下方是C代码:
这里我的流水灯是P1口,所以选择P1查看在程序运行中P1的值:
点击这个图标可以进行单步调试:
(刚开始程序没有运行,所以P1各位都是高电平)
点击这个图标将程序重置重新运行:
若进入循环可点击下方的图标跳出循环:
然后可以点击右下角的watch1,然后输入变量名,可在程序运行中查看变量值的变化:
右击变量的值可修改变量的进制显示:
然后就可以开始调试了!
在线仿真器的使用:
在线仿真器可以在调试过程中让代码逐行运行的现象展现出来可提高调试的效率。
这个仿真器不仅可以做一个硬件仿真器(内部储存空间大,运行速度快),还是一个高速单片机, 比STC89C52单片机运行速度快大概12倍,这种单片机也叫做1T(一个时钟周期就是一个机器周期)单片机, 而STC89C52是12个时钟周期为一个机器周期。
下面介绍如何将它作为在线仿真器使用:
将STC89C52的芯片取下来换为在线仿真器(看清楚方向,对应IO对应好)。
然后进行仿真设置:
点击Keil仿真这个选项卡:
单击添加STC仿真器到Keil中去:
然后选择Keil的安装路径,只选择文件夹,不用展开:
出现下图表示添加成功点击确定:
然后点击将IAP15L2K61S2设置为仿真芯片,提示正在检测单片机,等待完成即可:
然后打开Keil然后按照下图操作
然后点击STC展开,选择STC15F2K60S2:
然后点击同一窗口中的Debug勾选Use(这个是选择硬件仿真方式),展开下拉菜单找到STCMontor 51 Driver,然后点击settings选择自己的端口号,这就OK了:
然后编译,(若单片机有自动烧录的功能,记得将跳线帽拔掉)可以试一下点击调试,可见硬件上的小灯是和代码对应的,执行一步代码LED灯就会有相应的变化。
用完后若想使用STC89C52记得把Keil的配置改回来:
如何将它作为一个高速单片使用:
选择Keil的安装路径,上面已经选择过了就不用再次选择了,将IAP15L2K61S2设置为仿真芯片,这个每用一次都得设置。(记得将拔下的跳线帽插回去)
然后点击检测MCU选项:
然后就可以将它作为单片机使用(这里可以配置晶振频率),打开程序文件…,若将将STC89C52换回,点击检测MCU选项,就可以正常的使用了。