1、新建工程
2、编写程序
1)引用代码
在点亮一个灯的代码基础上进行修改,点亮一个灯的代码如下:
#include <STC89C5xRC.H>
void main()
{
P2=0xFE;//1111 1110
while(1)
{
}
}
2)一亮一灭
如果要让这个LED灯灭,则把P2=0xFF,相当于把所有P2的IO口都是高电平,则灯是熄灭的。
3)一亮一灭循环
要实现亮灭循环,则把P2=0xFE和P2=0xFF放在while循环里:
#include <STC89C5xRC.H>
void main()
{
while(1)
{
P2=0xFE;//1111 1110
P2=0xFF;//1111 1111
}
}
4)引用延时代码
既然要实现亮灭循环,那么亮需要时间,灭也需要时间,我们需要再编制一下亮灭指令的延时,在STC-ISP的绿色软件里,有一个软件延时计算器工具选项(1),这里有延时代码,需要设置晶振频率、时间和8051指令(3):
(1)单片机的晶振频率可以在开发板原理图上查看到,STC89CXX 单片机晶振引脚是18 和19 脚,也可以查阅单片机的相关资料:

这个就是晶振的图标,,C12 和C13 为旁路电容,目的是消除晶振起振时产生的电感干扰。
(2)定时长度,可以根据要求设置,我们设置成500毫秒,即半秒。
(3)8051指令集:选择STC-Y1,适用于STC89CXX系列单片机。
复制代码,粘贴到程序里:
对_nop()函数需要加入头文件#include <INTRINS.H>

5)引用延时函数
要调用Dellay500ms()函数,还需要在语句里引用一下这个函数:
#include <STC89C5xRC.H>
#include <INTRINS.H>
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE;//1111 1110
Delay500ms();
P2=0xFF;//1111 1111
Delay500ms();
}
}
6)编译、下载
几天没有玩,下载的时候stcisp一直正在检测目标单片机,网上查找了一下原因,感谢网友,原来是以下几个原因引起的:1)连线错误:检查插口是否插好;2) 下载需冷启动(大概率是此问题):利用串口杜邦线给单片机下载时,可能为了方便,断电时,有时候会仅拔掉VCC或GND,但因为电源处电容的原因,此时VCC端口可能还有电压,所以有时候会出现即使拔掉电源下载、再连接电源也会出现一直显示“正在检测目标单片机”的情况。 建议断电时,拔掉所有的连接线,然后点击下载,再连接所有的连接线。
我的原因是冷启动,我一般操作顺序是先开单片机通电,再下载程序,这样是不对的,应该先断电,然后点击下载,再连接所有连接线上电。

下载完成,按下电源按键,成功!

被折叠的 条评论
为什么被折叠?



