STM8学习笔记二:51、arduino、stm8不同单片机的点灯方式

发布者:玄幻剑客最新更新时间:2021-02-06 来源: eefocus关键字:STM8  单片机 手机看文章 扫描二维码
随时随地手机看文章

我在学习单片机的过程中懵懵懂懂地学了半桶水,以上几种单片机都学过一点,但是都不是很精,最近想把自己学过的知识梳理一遍,所以就做了这个笔记。

学习单片机有句话叫“万物之初在于点灯”(谁说的?不知道,可能是鲁迅∩0∩),所以我在这篇笔记里比较一下这三种单片机的4种点灯方式。

1、51单片机的点灯方式:

我用的51单片机是AT89S52,51单片机的设置和电路接线非常简单。这也是51比较好学的原因。

#include
sbit LED1=P1^0; //P1口0 pin接LED,并在程序里定义
void delay(unsigned int z);
void main()
{

while(1)
{

D1=0;
delay(100);
D1=1;
delay(100);

}

}

void delay(unsigned int z) //延迟函数

{

unsigned int i,j;

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

}

2、arduino的点灯方式:

我用的是arduino uno的板子,arduino的设置和接线都相当简单,这正是电子爱好者最容易上手arduino的原因。

/*

LED闪烁程序

*/

// 大多数Arduino板的Pin 13会连接一个LED

int LED = 13;

void setup() {

// 将LED代表的13pin脚定义为输出

pinMode(LED, OUTPUT);

}

void loop() {

digitalWrite(LED, HIGH); //开灯

delay(1000); // 等1秒

digitalWrite(LED, LOW); // 关灯

delay(1000); // 等1秒

}

3、STM8的两种点灯代码。

STM8和STM32有两种编码方式:库函数模式和寄存器模式。寄存器模式与51单片机的编码方式类似,即通过设置寄存器来控制IO口输入输出;库函数模式则是通过调用官方提供的标准固件库,来实现对IO口的控制。

固件库可以这么理解,官方按照一定的标准格式,将寄存器的设置封装在固件库里,我们应用时,可以不用去记繁杂的各种寄存器设置方法,只要应用官方提供的固件库标准接口函数即可实现对单片机的控制。

库函数模式虽然不可避免地增加了代码长度和一定的复杂度,但是从编程方式的简易化、代码的可读性和通用性以及复杂工程的系统化等方面有极其明显的优势。

但是寄存器模式也有它自己的优势,代码短,结构简单,执行效率高,在一些对系统资源比较紧张的工程中比较适用。

(1)库函数版本:

首先是建立一个工程,建立STM8工程的方法可以参考我前一个笔记。

如下图所示:

其中“Driver”文件夹下的“led.c”文件是用户,也就是我们自己编写的驱动文件。用户在使用中,只需要编写“led.c”驱动文件和“main.c”主函数就好了。

整个工程项目加入分层的思想,将对以后的移植非常有利。打个比方:底层和应用层隔离。底层驱动与应用层无关,“main.c”函数在“led.c”驱动文件中已经写好,这些才与硬件有关,这样需要移植到不同硬件时,“main.c”主函数可以不做任何修改,只需要修改和底层相关的“led.c”驱动。

下面是“led.c”驱动程序示范。

#include "led.h"

void LED_Init(void)

{

GPIO_Init(LED1_PORT,LED1_PIN,GPIO_MODE_OUT_PP_HIGH_FAST );

//定义LED的管脚的模式

}

void LED1_Open(void)

{

GPIO_WriteLow(LED1_PORT,LED1_PIN);//打开LED

}

void LED1_Close(void)

{

GPIO_WriteHigh(LED1_PORT,LED1_PIN);//关掉LED

}

void LED1_Toggle(void)

{

GPIO_WriteReverse(LED1_PORT,LED1_PIN);//翻转LED状态

}

注:GPIO的输入输出和管脚模式设置准备在另一个笔记里详述,此处不详细展开。

这里还要注意的是“led.h”,这个文件定义了操作硬件哪个具体的pin脚。如下面程序:

#ifndef __LED_H

#define __LED_H

#include "stm8s_gpio.h"

#define LED1_PIN GPIO_PIN_5

#define LED1_PORT GPIOB

void LED_Init(void);

void LED1_Open(void);

void LED1_Close(void);

void LED1_Toggle(void);

#endif

在这个头文件里,我们定义了LED1对应的是芯片的PB5脚,这跟我用来测试的stm8s103f3最小系统板的设置是符合的,PB5脚接了一个测试用的LED。

所以以后要使用更多的pin脚来控制LED灯或pin脚输出,可以按以上“led.c”和“led.h”的形式来编写驱动程序。

然后就是“main.c”主程序:

#include "stm8s.h"

#include "stm8s_clk.h"

#include "led.h"

void delay() //延迟函数

{

int i,j;

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

{

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

}

}

int main(void)

{

/*设置内部高速时钟16M为主时钟*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

LED_Init(); //LED驱动程序初始化

LED1_Close(); //关闭LED1

while(1)

{

LED1_Toggle(); // LED1状态翻转

delay(); //延迟函数

}

}

主函数没什么太多好讲的,基本上思路跟前面51和arduino是一样的。在实践过程中我碰到过两个问题,一个是时钟设置的问题,另一个是由于ASSERT报错的问题。这两个问题我准备都另外写文说明一下,这里就不重复了。

(1)寄存器版本:

寄存器版本的程序简单了,有多种写法,下面是我写的一个例子:

#include "stm8s.h"

#include "stm8s_clk.h"

void delay()

{

int i,j;

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

{

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

}

}

int main(void)

{

/*设置内部高速时钟16M为主时钟*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

GPIOB->DDR = 0x20;//配置GPIOB的方向寄存器,设置pin5为输出模式

GPIOB->CR1 = 0x20;//配置GPIOB_5为推挽输出

GPIOB->CR2 = 0x00;

while(1)

{

GPIOB->DDR = 0x20;//GPIOB_5输出高电平,亮

delay();

GPIOB->DDR = 0x00;//GPIOB_5输出低电平,暗

delay();

}

}

STM8的GPIO寄存器配置可以参考下表。


关键字:STM8  单片机 引用地址:STM8学习笔记二:51、arduino、stm8不同单片机的点灯方式

上一篇:STM8学习笔记三——错误:no definition for "assert_failed"
下一篇:IAR for STM8学习笔记(一)建立工程

推荐阅读最新更新时间:2024-11-24 16:16

实例源码2---基于51单片机的摇摇棒制作
#include #define uchar unsigned char #define uint unsigned int sbit key = P3^0;//定义切换画面开关 uchar Key_num;//定义按键次数 uchar Int0_num=0;//定义中断次数 uchar Direction;//定义摇动方向(从左到右) uchar code Embed ={ 0x40,0x00,0x20,0x00,0xd0,0x3f,0x4c,0x40,0x43,0x40,0x44,0x42,0x48,0x44,0xd8,0x43, 0x30,0x78,0x10,0x00,0x00,0x00,0xfc,0x07,0x00,0
[单片机]
什么是avr单片机
什么是avr单片机 1997年,由ATMEL公司挪威设计中心的A先生与V先生利用ATMEL公司的Flash新技术, 共同研发出RISC精简指令集的高速8位单片机,简称AVR。 单片机又称单片微控制器,它是把一个计算机系统集成到一个芯片上,概括的讲:一块芯片就成了一台计算机。单片机技术是计算机技术的一个分支,是简易机器人的核心元件。 AVR单片机的优点和参数 单片机已广泛地应用于军事、工业、家用电器、智能玩具、便携式智能仪表和机器人制作等领域,使产品功能、精度和质量大幅度提升,且电路简单,故障率低,可靠性高,成本低廉。单片机种类很多,在简易机器人制作和创新中,为什么选用AVR单片机呢? 一、简便易学,费用低廉 首先,
[模拟电子]
什么是avr<font color='red'>单片机</font>
基子ATmega103微控制器的家庭信息终端的设计
摘要:介绍了以Atmegal03为主控芯片的家庭信息终端在小区智能化建设中的应用。详细阐述了Atmegal03微控制器与触摸屏和nRF401无线数据收发芯片之间接口应用的软件与硬件技术要点。 小区智能化建设在国内历经几年的发展,已经形成了一系列标准,它们的出现了满足了不同收入阶层对住房智能化的要求。而室内终端作为小区智能化建设中一个重要环节,也随着电子技术的发展和人们对住宅智能化要求的提高逐渐发展成一个集多种功能为一体的综合性信息服务处理平台。 传统室内终端只能在用户室内进行简单的安防和电器的控制,已经不能满足人们对住宅智能化的要求。而家庭信息终端HIT(Home lnformation Termination)在具有安防
[单片机]
基子ATmega103<font color='red'>微控制器</font>的家庭信息终端的设计
时频参数测量中存储容量的压缩方法
在智能仪表、网络通讯、过程控制等测控系统应用中,经常需要对脉冲信号的频率(或周期)进行精确测量。常用的方法是被测信号作为闸门信号,而且一个标准频率信号作为填充脉冲,在闸门周期内对标准频率信号计数,如何压缩数据存储量,是本文要解决的主要问题。 1 基于单片机系统的时频参数测量 当采用单片机微处理器测量信号频率(周期)时,定时器T0工作在计数方式,定时器T1工作在定时方式,T1向外部发固定频率的脉冲(时标),T0对时标进行计数。被测脉冲信号产生一个外部中断控制信号,向CPU发出一个中断请求,CPU响应中断,在中断服务程序中把T0的计数值读入数据存储器,数据转移完成后,使T0复位,重新计数,开始新的周期测量,其测量原理如图2所示
[单片机]
MCU出货量增销售额降——市场价格战激烈
根据IC Insight的统计,2012年MCU市场出货量增长了16%,不过由于平均售价降低了17%,因此总市场规模下滑了3%,至152亿美元。 虽然全球性的经济不确定是MCU市场规模下滑的原因,但实际上32位MCU市场竞争加剧后带来的价格竞争才是市场规模下滑的主因。自20世纪80年代以来,从未有过如2012年般的价格下跌。比如在EEWORLD首页,赫然印有瑞萨电子的广告:顶级品牌MCU只要一元的口号,足以证明如今市场竞争之惨烈。 一直以来,由于MCU市场的应用范围非常之广,拥有相当多的客户群,因此相比较其他领域,MCU的业绩更为稳定。不过2009年由于全球性的金融危机,MCU市场遭受到有史以来最严重的危机,市场规模下滑22%
[单片机]
基于STC12C56系列单片机的AD转换C程序
/**************** STC12c56 AD转换 入口参数:通道数(0,1,2,3,4,5,6,7) 返回值: AD转换结果 *****************/ #include reg51.h sfr ADC_CONTR=0xc5; //AD转换寄存器 sfr ADC_DATA=0xc6; //AD转换结果寄存器,为10位 sfr P1M0=0x91; sfr P1M1=0x92; /*************************** 微秒延时函数 ********************************/ void delay_us(unsigned int i)//延时 如果需要
[单片机]
MCU-ISP和ICP的区别
对Flash-based的MCU来说, ISP和ICP几乎是不可或缺的功能, 但我们经常被这两个功能搞混, 究竟他们的差别在哪里? 对客户的意义又是什么?在这里, 和大家分享并澄清一些观念, 希望对大家有所帮助, 进而解答来自客户关于ISP与ICP的疑问. 1)在开发阶段 改code时, 不再需要将MCU从板子上拔起来, 拿到烧录器上烧, 然后再装回去. 可以直接利用ISP/ICP Programmer做板上烧录, 为开发者提供了极大的便利性. 2)在量产阶段 客户可以采用 先焊到板子上再烧code 的方式, 将烧code的动作安排在生产线的某一站. 那么传统的方式 (先将code烧好再焊到板子上)有
[单片机]
PIC单片机程序设计的基本格式
为了快速掌握PIC单片机源程序的基本结构,这里给出一个典型的程序结构框架。建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84INC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。现举例如下。 TITLE“This is……”;程序标题   ;程序说明   LIST P="16F84",F=1NHX8M   ;   include   -config_RC_Qsc &_WDT_0FF…   ;资源定义和变量定义   STATUS EQU 03   FSR EQU
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved