Menu Close

用单片机点亮LED灯-STC8

1、STC8单片机的介绍

STC8H系列单片机是不需要外部晶振和外部复位的单片机,是以超强抗干扰/超低价/高速/低功耗为目标的8051单片机,在相同的工作频率下,STC8H 系列单片机比传统的8051约快12倍(速度快11.2~13.2倍),依次按顺序执行完全部的111条指令,STC8H系列单片机仅需147个时钟,而传统8051则需要1944个时钟。STC8H系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是宽电压/高速/高可靠/低功耗/强抗静电/较强抗干扰的新一代8051单片机,超级加密。指令代码完全兼容传统8051。

STC8H系列单片机具有8组I/O 口,P0、P1、P2、P3、P4、P5、P6、P7均有4种工作模式:准双向口/弱上拉(标准8051输出口模式)、推挽输出/强上拉、高阻输入(电流既不能流入也不能流出)、开漏输出。可使用软件对I/0口的工作模式进行配置除P3.0和 P3.1外,其余所有I/0口上电后的状态均为高阻输入状态,用户在使用I/0口时必须先设置I/0口模式。

2、STC单片机I/O口的硬件介绍

每个IO的配置都需要使用两个寄存器进行设置。以PO口为例,配置PO口需要使用POM0和 POM1两个寄存器进行配置,如下图所示:

%title插图%num

图1

即P0M0的第0位和 P0M1的第0位组合起来配置P0.0口的模式即 P0M0的第1位和P0M1的第1位组合起来配置P0.1口的模式其他所有IO的配置都与此类似。

PnM0 与PnM1的组合方式如表1所示

表1

%title插图%num

虽然每个IO口在弱上拉(准双向口)/强推挽输出/开漏模式时都能承受20mA 的灌电流(还是要加限流电阻,如1K、5602、472Q等),在强推挽输出时能输出2OmA的拉电流(也要加限流电阻),但整个芯片的工作电流推荐不要超过70mA,即从Vcc流入的电流建议不要超过70mA,从Gnd流出电流建议不要超过70mA,整体流入/流出电流建议都不要超过70mA。

3.单片机IO口驱动

  • 准双向口(弱上拉)

准双向口(弱上拉)输出类型可用作输出和输入功能而不需重新配置端口输出状态。这是因为当端口输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。准双向口有3个上拉晶体管适应不同的需要。在3个上拉晶体管中,有1个上拉晶体管称为“弱上拉”,当端口寄存器为1且引脚本身也为1时打开。此上拉提供基本驱动电流使准双向口输出为1。如果一个引脚输出为1而由外部装置下拉到低时,弱上拉关闭而“极弱上拉”维持开状态,为了把这个引脚强拉为低,外部装置必须有足够的灌电流能力使引脚上的电压降到门槛电压以下。对于5V单片机,“弱上拉”晶体管的电流约250uA;对于3.3V单片机,“弱上拉”晶体管的电流约15OuA。第2个上拉晶体管,称为“极弱上拉”,当端口锁存为1时打开。当引脚悬空时,这个极弱的上拉源产生很弱的上拉电流将引脚上拉为高电平。对于5V单片机,“极弱上拉”晶体管的电流约18uA;对于3.3V单片机,“极弱上拉”晶体管的电流约5uA。第3个上拉晶体管称为“强上拉”。当端口锁存器由О到1跳变时,这个上拉用来加快准双向口由逻辑0到逻辑1转换。当发生这种情况时,强上拉打开约2个时钟以使引脚能够迅速地上拉到高电平。准双向口(弱上拉)带有一个施密特触发输入以及一个干扰抑制电路。准双向口(弱上拉)读外部状态前,要先锁存为‘1’,才可读到外部正确的状态。准双向口(弱上拉)输出如下图所示:

%title插图%num

图2

  • 推挽输出

强推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉。推挽模式一般用于需要更大驱动电流的情况。

强推挽引脚配置如下图所示:

%title插图%num

图3

  • 高阻输入

电流既不能流入也不能流出

输入口带有一个施密特触发输入以及一个干扰抑制电路高阻输入引脚配置如下图所示:

%title插图%num

图4

  • 开漏输出

开漏模式既可读外部状态也可对外输出(高电平或低电平)。如要正确读外部状态或需要对外输出高电平,需外加上拉电阻。当端口锁存器为0时,开漏输出关闭所有上拉晶体管。当作为一个逻辑输出高电平时,这种配置方式必须有外部上拉,一般通过电阻外接到Vcc。如果外部有上拉电阻,开漏的IO口还可读外部状态,即此时被配置为开漏模式的IO口还可作为输入I/O口。这种方式的下拉与准双向口相同。开漏端口带有一个施密特触发输入以及一个干扰抑制电路。

输出端口配置如下图所示:

%title插图%num

图5

3. 发光二极管硬件电路

LED流水灯实验:八个发光二极管D1-D8分别接在单片机的P0.0-P0.7接口,P0.x送0点亮发光二极管,送1灭,依次逐个左移点亮发光二极管。S30、S31短接。

%title插图%num

图6

4. 汇编程序和C语言程序

汇编程序如下:

ORG 0000H

LJMP START

ORG 0100H

START: MOV A,#0FEH //初始值,D1亮

MOV 94H,#00H //STC P0口设置成准双向IO

MOV 93H,#00H //

LOOP: MOV P0,A

MOV R2,#25H //延时时间

LCALL DELAY

RL A //左移

LJMP LOOP

DELAY: PUSH 02H //通用延时函数,R2为延时参数

LP1: PUSH 02H

LP2: PUSH 02H

LP3: DJNZ R2,LP3

POP 02H

DJNZ R2,LP2

POP 02H

DJNZ R2,LP1

POP 02H

DJNZ R2,DELAY

RET

END

 

C51程序:

#include<reg51.h>

#include<intrins.h>

sfr P0M0 = 0x94; //STC P0口工作模式寄存器

sfr P0M1 = 0x93;

#define uchar unsigned char

#define uint unsigned int

void delay(uint i) //延时i ms

{

unsigned int j,k;

for(j=0;j<i;j++)

for(k=0;k<121;k++); }

void liushui(void)

{

unsigned char i,j;

P0=_crol_(P0,1); //P0口左移动1位

delay(1000); }

void main(void)

{

P0M0 = 0x00; //STC P0口设置成准双向IO

P0M1 = 0x00;

P0=0xfe;

while(1)

{ liushui();

}

}

 

Posted in CPU, C语言, C语言, 元器件, 单片机, 单片机, 单片机, 开发板, 教材与教案, 文章, 资料区

发表评论

相关链接