本笔记只是自己记录一下,方便日后复习。

c51的程序开发属于传统的C语言程序结构,esp32的程序开发属于arduino开发框架,两者的程序区别有一部分是由arduino开发框架和传统C语言结构引起的,另外一部分是由esp32和c51的io口引起的。

1.开发框架区别

1.1 main函数

常见的c51和stm32程序是由main函数开始的,但是arduino程序的main函数定义被隐藏,用setup和loop函数进行操作。

setup函数只执行一次,基本上用于对板子的初始化操作

loop函数内部的内容会一直执行,相当于while(1)死循环

1.2 函数的区别

使用keil开发程序有的函数非常少,连延时函数也需要自己写。

void delay(int t)
{  while(t--);}

但是arduino程序有大量的函数库,直接调用void delay(200);时间单位是ms,延时更加准确。

1.3 寄存器配置与读写地址

c51在编写程序时,比如定时器配置需要写 2 个寄存器TMOD、TCON,但是esp32定时器配置更多,从arduino开发架构上面将底层封装在寄存器里面。因此c51程序在编写的时候有更多的读写地址配置寄存器的操作。

2.c51和esp32芯片io口区别

2.1两者io口介绍

c51里面没有gpio的概念,io口(P0/P1/P2/P3)无需软件配置模式即可直接用于输入或输出,且c51的io口是并行8位接口,esp32的接口是独立控制的。

stm32与esp32有gpio的概念,gpio与io口的区别如下:

stm32和esp32的gpio口均有8种模式,esp32的按照下面的方式配置:

void pinMode(uint8_t pin,uint8_t mode)
{#define INPUT                             0x01 输入模式
#define OUTPUT                          0x03 输出模式
#define PULLUP                           0x04 上拉
#define INPUT_PULLUP              0x05 输入上拉
#define PULLDOWN                    0x08 下拉
#define INPUT_PULLDOWN       0x09 输入下拉
#define OPEN_DRAIN                 0x10 开漏
#define OUTPUT_OPEN_DRAIN 0x13 输出开漏
#define ANALOG                          0xc0 模拟 }

2.2 由于io口差异造成程序上的差异

1.在c51中需要或者不需要在程序开始之初定义取决于运用io的数量

对8位io口的操作运用移位计算,不需要在程序开始定义,0xff<<i。单个io口运用sbit位定义,需要在程序最初定义。在点亮led灯的时候,直接对io赋值1就可。P0=0xff;

2.由于esp32每个接口独立,如何应用必须要在程序开始定义好。单个接口需要在程序开始采用宏定义#define LED1 15(使用gpio15);使用多个io口但是每个io口没有明确的关系只需要用宏定义(如key按键),多个接口连续关系需要在程序开始定义常数数组const int may[]={15,…,8}。在点亮led灯的时候,先设置io口模式为输出OUTPUT,然后设置高低电平HIGH/LOW,所有引脚模式的配置必须是大写的,直接输出高低电平也必须是大写的,表示电平的变量可以小写。

2.3 esp32中gpio8种模式的应用

现在介绍两种

(1) output 模式是输出高低电平的模式 

output模式下用digitalwrite函数配置高低电平

(2)输入上拉模式

pinMode(key1_pin, INPUT_PULLUP);

digitalRead(key4_pin);输入上拉模式下,用digitalRead函数读取引脚电平

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐