一、理解电灯案例的代码
#include "STC8H.H"
int main() {
P5M0 = 0x00;
P5M1 = 0x00;
P53 = 1;
while(1) {}
}
#include "STC8H.H"
引入头文件P5M0 = 0x00;P5M1 = 0x00;
配置引脚模式P53=1;
配置IO引脚的电平
二、头文件STC8H.H
针对 STC8H 系列芯片的头文件,如果Keil软件没有配置STC8环境,此处是无法导入的。
STC8H.H
文件的存储目录,在Keil安装目录下的C51\INC\STC
文件夹下。内部有其他STC芯片的头文件,如果你用的是其他芯片,则include
对应的头文件。
三、引脚工作模式
- STC8H文档下载。通过
STC-ISP
软件进行资料下载。
- 打开STC8H用户手册。跳转到`I/O`口
其中我们可以通过手册获得一些信息:
- 1个端口对应8个引脚
- 每个端口都由一个寄存器控制
- 系列不同,端口数量不同
- 每个引脚可配置4种不同的工作模式
四、IO口的工作模式
工作模式 | PnM1 | PnM0 | 说明 |
准双向口 | 0 | 0 | 弱上拉,即可输入也可输出 |
推挽输出 | 0 | 1 | 强上拉输出。可达20mA,要加限流电阻 |
高阻输入 | 1 | 0 | 电流既不能流入也不能流出,但可用于测电平 |
开漏输出 | 1 | 1 | 内部上拉电阻断开。开漏模式既可读外部状态也可对外输出(高电平或低电平)。如要正确读外部状态或需要对外输出高电平,需外加上拉电阻,否则读不到外部状态,也对外输不出高电平。 |
代码中:
P5M0 = 0x00;
P5M1 = 0x00;
指的是P5端口所有的引脚为准双向口输出,如果想设置为其他模式,可以根据实际需求进行配置。
当前我们电灯是要控制P5端口的3号引脚,也就是P53这个引脚。理论上只需要设置这个引脚的工作模式即可。
P5M1 &= ~0x08, P5M0 &= ~0x08; //准双向口
P5M1 &= ~0x08, P5M0 |= 0x08; //推挽输出
P5M1 |= 0x08, P5M0 &= ~0x08; //高阻输入
P5M1 |= 0x08, P5M0 |= 0x08; //开漏输出
- P5表示的是5号端口
- 0x08表示的是3号引脚,对应二进制
0000 1000
引脚编号和值的对应关系:
编号 | 值 |
0 | 0x01 |
1 | 0x02 |
2 | 0x04 |
3 | 0x08 |
4 | 0x10 |
5 | 0x20 |
6 | 0x40 |
7 | 0x80 |
如果想配置任意端口的任意引脚的工作模式,可以通过上面的方式类比出来。
五、软延时操作
软延时指的是通过代码来进行延时睡眠操作。我们可以借助工具来提供软延时的代码。
打开STC-ISP
工具,进行如下操作:
如图所示我们关注几个点:
- 系统频率
- 睡眠时长
- 指令集
指令集主要针对的是芯片型号,选择不同型号,旁边会提示是否包含你所开发的芯片,我们在此使用STC-Y6,因为我吗使用的是STC8H的系列。
睡眠时长:是你希望提供的睡眠时间长度,根据实际情况而定。
系统频率:需要注意的是需要和烧录频率一致,否则会出现时间不匹配问题。
根据以上操作我们可以实现,LED每隔一秒钟闪烁的逻辑。
#include "STC8H.H"
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 57;
j = 27;
k = 112;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main() {
P5M1 &= ~0x08, P5M0 &= ~0x08; //准双向口
//P5M1 &= ~0x08, P5M0 |= 0x08; //推挽输出
//P5M1 |= 0x08, P5M0 &= ~0x08; //高阻输入
//P5M1 |= 0x08, P5M0 |= 0x08; //开漏输出
while(1) {
P53 = 1;//开
Delay1000ms();
P53 = 0;//关
Delay1000ms();
}
}
可以为P53引脚设置不同工作模式,来观察效果。