『STC8H8K64U』概述

preface

        大家好,我是初尧.C。希望看完这篇文章对你能有所帮助,不足之处请指正~?

        本文由初尧.C 原创 CSDN首发 如需转载还请通知?

        ?无端坠入凡生梦. 却惹三千烦恼丝?

        欢迎各位?点赞+收藏+留言?

        系列专栏―STC8H8K64U?

        个人主页―初尧.C的博客?


1. 介绍?‍?STC8H8K64U<打狗棒>

?有16位硬件乘除法器 MDU16

        (支持32位除以16位,16位除以16位,16位乘16位,数据移位以及数据规格化等运算)

?这款单片机的工作电压在1.9V~5.5V,利用平常的TYPE-C就可以供电和传输数据

?相比于传统的8051单片机,它拥有超高速8051内核(1T),大约快了12倍

?最大64K字节的Flash程序存储器ROM,用于存储用户代码,擦写次数可达10万次

        小知识?:1GB(千兆)=1024MB(兆)、1MB(兆)=1024KB(千字节)

                           1KB(千字节)=1024B(字节)、1B(字节 byte)=8位(Bit)

?22个中断源,4个中断优先级,

        INT0(支持上升沿和下降沿中断);INT1(支持上升沿和下降沿中);

        INT2(只支持下降沿中断);INT3(只支持下降沿中断);INT4(只支持下降沿中断);

        定时器0定时器1定时器2定时器3定时器4

        串口1串口2串口3串口4

        ADC模数转换LVD低压检测SPII²C比较器PWMAPWMBUSB

?EEPROM数据存储器,带点可擦 可编程只读存储器;以字节为单位进行读/写数据,

        以512字节为页单位进行擦除;可在线反复编程擦写10万次以上

?拥有256个字节的RAM,低128字节RAM和高128字节RAM

?内部大容量扩展SRAM,128字节内部直接访问RAM(DATA),128字节内部

        间接访问RAM(IDATA),8192字节内部扩展RAM(XDATA),1280字节USB数据RAM

?强大的双DPTR可增可减

        小知识?:DPTR:16位特殊功能寄存器,其高位字节寄存器用DPH表示,低位字节

        寄存器用DPL表示,既可以作为一个16位的寄存器来处理,也可以作为两个独立的

        8位寄存器来使用~

?所有的I/O口均支持中断并可掉电唤醒,每组I/O中断有独立的中断入口地址,所有的I/O

        中断可支持4种中断模式:高电平中断,低电平中断,上升沿中断,下降沿中断

?我们要介绍的这款单片机是LQFP封装-48脚的

2. 配置I/O工作模式?‍?

每个I/O口的配置都需要使用两个寄存器来进行配置

PxM0 PxM1 I/O口工作模式
0 0

准双向口(传统8051端口模式,弱上拉)

灌电流可达20mA,拉电流约为270~150uA

0 1 推挽输出(强上拉输出,可达20mA,要加限流电阻)
1 0 高阻输入(电流既不能流入也不能流出)
1 1 开漏输出,内部上拉电阻断开

2.1 ?准双向口模式

        准双向口,不是真正意义上的双向口,准双向口(弱上拉)输出类型可用作输出和输入功能而不需要重新配置端口输出状态;这是因为当端口输出为1(高电平)时的驱动能力很弱,允许外部装置将其拉低(例如:接下拉电阻);当端口输出为0(低电平)时的驱动能力很强,可吸收相当大的电流

        点亮LED建议使用该模式✔,LED负极接到单片机I/O口,正极处加一个限流电阻随后接+5V电源,这里限流电阻的作用是 以防电流过大而烧坏LED,同时限流电阻也能起分压作用

2.2 ?推挽输出模式

        强推挽输出配置的下拉结构与开漏输出及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉,推挽输出模式一般用于需要很大驱动电流的情况,比如驱动三极管带动小电机运行

       强推挽引脚配置图:

2.3 ?高阻输入模式

        电流既不能流入也不能流出,输入口带有一个施密特触发输入以及一个干扰抑制电路

当I/O口为高阻态时,也可以叫浮空输入状态,此时I/O口的状态是不确定的,既不是高电平也不是低电平,一般是用作ADC检测时配置的I/O口模式

        高阻输入引脚配置图:

 

2.4 ?开漏输出模式

        与推挽输出相对的,就是开漏输出模式了,也就是漏级开路的输出形式,既可以读外部状态也可以对外输出(高电平或者低电平),如果需要读外部状态或对外输出高电平,但此时无法真正的输出高电平,也就是这个高电平的驱动能力非常弱,此时I/O口需要外加上拉电阻

3. 点亮第一个LED?‍?

        拿到一款单片机,相信大家第一个学习的就是点灯了?(大佬除外)

由于单片机I/O口的结构 决定了它灌电流的能力较强,比一般高电平时的拉电流要大,驱动能力强,所以都采用低电平点亮LED的方式

单片机程序由:头文件变量声明函数声明子函数主函数等这几部分组成

3.1 ?调用头文件

代码第一行,就是调用这款单片机的头文件;每款单片机都有相对应的头文件,头文件其实就是一种声明,将单片机中的一些常用的符号变量、特殊功能寄存器、关键字等进行定义声明;

例如:STC89C52单片机的头文件

#include <REG52.H>

例如:STC15W408S单片机的头文件

#include <STC15.H>

我们要介绍的这款单片机型号是:STC8H8K64U,头文件如下:

#include <STC8H.H>    //调用STC8H头文件

3.2 ?定义变量LED

        这里我们要点亮一个LED,首先要定义它在哪个I/O口,可以随便定义哪个I/O口吗?可以的;当然可以了,用在什么地方,就要相对应的配置I/O口的工作模式

这款单片机引出的I/O口有:P0.0~P0.7,P1.0~P1.7(无P1.2),P2.0~P2.7,P3.2~P3.7,P4.5~P4.7,P5.2和P5.4,对我个人来说是相当够用了;

这里我们用单片机的P1.0口来点亮LED,但是在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它起另外一个名字,就暂且给它起名为LED吧,这里必须要给它们建立联系,我们就用到了C的关键字  sbit  来定义,sbit的用法有三种:

第一种方法:sbit 位变量名 = 地址值

第二种方法:sbit 位变量名 = SFR名称^变量位地址值

第三种方法:sbit 位变量名 = SFR地址值^变量位地址值

我们这里这样写:

sbit LED = P1^0;   //定义LED为P1^0口

3.3 ?编写主函数

直接上程序:

void main()
{
	P1M0 = 0x00;P1M1 = 0x00;  //设置P1口为准双向口状态,弱上拉
	while(1)
	{
		LED = 0;    //LED为低电平,即点亮LED
	}
}

这里void main() 的意思是这个main()函数无返回值,void也就是无效的、空的意思

我们写的主函数需要用大括号 {} 给括起来,里面就是我们要运行的内容

第一步就是配置所调用的I/O口的工作模式P1M0 = 0x00,P1M1 = 0x00(准双向口模式);

如何配置工作模式上面我们也做了详细的介绍

第二步,是让这个LED灯一直亮呢,还是闪烁呢,还是做呼吸灯的效果呢,就需要我们根据自己的想法来了;既然是点亮LED,那就让它常亮吧,不需要外部触发,让主函数循环我们所需要的效果就行了,这里用的是一个while循环,主程序会一直执行while(1)里的程序

第三步,用低电平点亮P1.0口,即P1.0 = 0就可以了,前面我们定义了LED为P1.0口,所以正确写法是:LED = 0;就是这么简单,?一定一定要记得最后的分号噢(相信有些程序猿后期调试代码BUG是有关于这个分号的?)

好啦,这期介绍就到这里,感谢大家的观看~文章来源地址https://uudwc.com/A/E3eD

原文地址:https://blog.csdn.net/LYX_2937/article/details/128153591

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月15日 01:01
stm32平衡小车(2)-----编码器电机驱动
下一篇 2023年06月15日 01:01