定时器的本质原理
定时器的本质原理: 每经过一个机器周期,就加1 :寄存器 定时器和计数器,电路一样 定时或者计数的本质就是让单片机某个部件数数 当定时器用的时候,靠内部震荡电路数数、 当计数器用的时候,数外面的信号,读取针脚的数据
晶振 时钟周期 机器周期
什么是晶振 晶振(晶体震荡器),又称数字电路的“心脏”,是各种电子产品里面必不可少的频率元器件。数字电路的所有工作都离不开时钟,晶振的好坏、晶振电路设计的好坏,会影响到整个系统的稳定性。 什么是时钟周期 时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周期就意味着更高的工作频率 什么是机器周期 机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成
机器周期
机器周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 就不让他从0开始数数,10ms需要数9216下,你让他从65536-9126=56320(16进制表示为 0xDC00)开始数数 这样TL0=0x00;TH0=0xDC
怎么开始计时
TCON寄存器的bit4,通过编程让这个位为1的时候,开始计时,相当于按下了闹钟
定时器使用是有很多种模式的
定时器模式寄存器:TMOD来选择定时器模式,选择工作方式1,TMOD的bit0 bit1配置成0 1 :16 的定时器功能 配寄存器推荐用按位操作,清零的时候,对应的需要清零的位与上0,不需要清零的位与上1 置1的时候,需要置1的位置或1,不需要置一的位置或0
中断寄存器
CPU能响应定时器0中断的条件:需要配置IE寄存器的bit1: ET0 bit7:EA 1. ET0中断允许要置一 ET0 = 1 2. EA总中断要置一 EA =
PWM开发SG90
脉冲宽度调制 通过占空比编码模拟信号 占空比 一个周期内,高电平占据时长的百分比
占空比
如果没有集成PWM功能,可以通过IO口软件模拟,相对硬件PWM来说精准度略差 常见的有0-90°、0-180°、0-360° 0.5ms-------------0度; 2.5% 对应函数中占空比为250 1.0ms------------45度; 5.0% 对应函数中占空比为500 1.5ms------------90度; 7.5% 对应函数中占空比为750 2.0ms-----------135度; 10.0% 对应函数中占空比为1000 2.5ms-----------180度; 12.5% 对应函数中占空比为1250
外部中断、定时器中断、串口中断有什么区别
-
外部中断:由外部事件触发,用于处理与外部设备相关的操作。
-
定时器中断:由定时器模块周期性触发,用于实现周期性的任务。
-
串口中断:由串行通信接口事件触发,用于处理与其他设备的数据通信。
定时器
//1. 配置定时器0工作模式位16位计时 TMOD = 0x01; //2. 给初值,定一个0.5出来 TL0=0x33; TH0=0xFE; //3. 开始计时 TR0 = 1; TF0 = 0; //4. 打开定时器0中断 ET0 = 1; //5. 打开总中断EA EA = 1;
jd 的值决定了 PWM 波形的占空比,占空比是高电平持续时间与 PWM 周期总时间之比。 在代码中,cnt 的值在每次定时器0中断时递增。当 cnt 的值达到 jd 的值时,PWM波形的占空比会发生变化,从而控制PWM波形的输出
超声波测距
HC-SR04
模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板的P1.5和P1.6端口 超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离。
发送波 它开始发了 接收了返回波 算时间 距离
怎么让它发送波 Trig ,给Trig端口至少10us的高电平 怎么知道它开始发了 Echo信号,由低电平跳转到高电平,表示开始发送波 怎么知道接收了返回波 Echo,由高电平跳转回低电平,表示波回来了 怎么算时间 Echo引脚维持高电平的时间! 波发出去的那一下,开始启动定时器 波回来的拿一下,我们开始停止定时器,计算出中间经过多少时间 怎么算距离 距离 = 速度 (340m/s)* 时间/2
void Time0Init() { TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; TH0 = 0; TL0 = 0; //设置定时器0工作模式1,初始值设定0开始数数,不着急启动定时器 } startHC() 函数用于发送超声波脉冲。首先,它将 Trig 引脚设置为低电平,然后立即设置为高电平,持续至少10微秒,最后再设置为低电平。
串口
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢 是设备间接线通信的一种方式 数据一位一位地顺序传送 双向通信,全双工 传送速度相对较慢
UART
异步串行是指UART(UniversalAsynchronousReceiver/Transmitter),通用异步接收/发送。 UART包含TTL电平的串口和RS232电平的串口
TTL电平
TTL是Transistor-Transistor Logic,即晶体管-晶体管逻辑的简称,它是计算机处理器控制的设备内部各部分之间通信的标准技术。TTL电平信号应用广泛 笔记本电脑通过TTL电平与单片机通信 TX发送线(端口)3.1 RX接收线 (端口)3.0
串口接线方式
RXD:数据输入引脚,数据接受;STC89系列对应P3.0口 TXD:数据发送引脚,数据发送;STC89系列对应P3.1口 输入/输出数据缓冲器都叫做SBUF, 都用99H地址码,但是是两个独立的8位寄存器 代码体现为: 想要接收数据 char data = SBUF 想要发送数据 SBUF = data sfr AUXR = 0x8E; 回忆UART是异步串行接口,通信双方使用时钟不同,因为双方硬件配置不同,但是需要约定通信速度,叫做波特率
串口的主要特点包括:
点对点通信:串口用于两个设备之间的直接通信,它们通过串行线连接。 异步通信:串口的数据传输是异步的,这意味着数据的发送和接收不需要同步。每个数据字节是独立发送的,包含起始位、数据位、可选的奇偶校验位和停止位。
字符 'a' 是如何从单片机上传到PC的
起始位(0),数据位,停止位(1)
a的ASSII码是97,16进制就是0x61, 二进制是01010001,这个8位就是数据位 串口工作模式1,一帧数据有10位,起始位(0),数据位,停止位(1) 那么a的一帧数据就是 0 1000 1010 1 起始位,a的低位到高位,停止位
void UartInit(void) //9600bps@11.0592MHz { AUXR = 0x01; SCON = 0x50; //配置串口工作方式1,REN使能接收 TMOD &= 0x0F; TMOD |= 0x20;//定时器1工作方式位8位自动重装 TH1 = 0xFD; TL1 = 0xFD;//9600波特率的初值 TR1 = 1;//启动定时器 EA = 1;//开启总中断 ES = 1;//开启串口中断 }
cmd 是一个字符变量,用于存储从串口接收到的命令。这个变量在 Uart_Handler 函数中使用,该函数是一个中断服务例程(Interrupt Service Routine,简称ISR),它被串口接收中断请求触发。 在 Uart_Handler 函数中,cmd 变量用于接收从串口接收到的字符。当接收到一个字符时,它会存储在 cmd 变量中。然后,根据接收到的字符(命令),程序会执行相应的操作。 例如,如果接收到字符 ‘o’,程序会将 D5 引脚设置为低电平,点亮与之关联的LED灯。如果接收到字符 ‘c’,程序会将 D5 引脚设置为高电平,熄灭LED灯。 因此,cmd 变量用于存储从串口接收到的命令,并根据这些命令执行相应的控制操作。
蓝牙模块
蓝牙模块,又叫做蓝牙串口模块 透传即透明传送,是指在数据的传输过程中,通过无线的方式这组数据不发生任何形式的改变,仿 佛传输过程是透明的一样,同时保证传输的质量,原封不动地到了最终接收者手里。
模块支持双向通信,连接成功后不再分为主从机
Wifi模块
蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计
AT指令
这个协议允许您通过简单的文本命令来控制和获取设备的各种参数和状态。 ESP-01s出厂波特率正常是115200, 注意:AT指令,控制类都要加回车,数据传输时不加回车 AT+想要用的串口=结果 //波特率是9600 1. 是station(设备)模式 2.是AP(路由)模式 3.是双模 AT+CWMODE=3 AT+UART=9600,8,1,0,0 AT+CWJAP="TP-LINK_3E30","18650711783"
透传
透传(透传技术)是一种数据传输方式,它允许数据在传输过程中不经过任何形式的修改或处理,直接从发送端传输到接收端。在这个过程中,数据保持了原始的状态,就像它们在发送时一样。
心跳包
心跳包(Heartbeat Packet)是一种通信机制,用于在两个设备之间保持连接的活跃状态。这种机制通过定期发送小的数据包来检查网络连接是否仍然有效,并确保设备之间的通信不会因为长时间不发送数据而中断。
LCD1602**显示** ?
LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行) 八个数据引脚
DHT11 温湿度传感器 ?
数据传送逻辑 只有一根数据线DATA,单片机发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出 数据格式 8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和
IIC**协议**
用于连接微控制器及其外围设备。IIC属于半双工同步通信方式 想象一下,你家里有很多设备,比如电视、音响、电脑等,它们都需要电源和信号连接。如果每个设备都有一根单独的电源线和信号线,那将会非常复杂和混乱。IIC协议就像是一个家庭插座,你可以通过一个插座连接多个设备,每个设备通过一个插头连接到这个插座上。 在IIC协议中,有两个主要的设备:主设备和从设备。主设备是控制通信的设备,它发起数据传输请求。从设备是响应主设备请求的设备,它接收主设备的命令并发送数据。
以下是IIC协议的基本工作原理:
地址传输:主设备发送一个从设备地址,告诉从设备它要与之通信。这个地址是一个7位的二进制数,可以用来识别不同的从设备。 数据传输:主设备发送数据到从设备,或者从从设备接收数据。数据传输是单向的,也就是说,主设备要么发送数据,要么接收数据,但不能同时进行。 停止和开始信号:在数据传输过程中,主设备通过发送停止和开始信号来控制通信。停止信号表示数据传输结束,开始信号表示数据传输开始。
IIC协议非常适用于嵌入式系统,因为它只需要两根线(SDA和SCL)来传输数据和时钟信号,这大大减少了连接线的数量,简化了电路设计。此外,IIC协议还支持多主和多从设备通信,这意味着多个主设备可以同时与多个从设备通信,而不需要担心冲突。
IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。 //起始位,停止位,数据位,速度 这些信号中,起始信号是必需的,结束信号和应答信号 起始信号 终止信号 应答信号 发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节; 应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
void IIC_Start() { sda = 1; scl = 1; _nop_(); sda = 0; _nop_(); } 它使用两根线:SDA(串行数据线)和SCL(串行时钟线)来传输数据。
2ic
IIC_Start() 函数: 生成I2C通信的起始信号。 起始信号的生成过程是:先将SDA线拉高,然后将SCL线拉高,接着将SDA线拉低,最后保持SCL线高电平。 该信号告诉所有连接到I2C总线的设备,一个新的通信周期即将开始。 IIC_Stop() 函数: 生成I2C通信的停止信号。 停止信号的生成过程是:先将SDA线拉低,然后将SCL线拉高,接着将SDA线拉高,最后保持SCL线高电平。 该信号告诉所有连接到I2C总线的设备,当前的通信周期已经结束。 IIC_ACK() 函数: 检测从设备是否发送了ACK信号。 在I2C通信中,主设备在发送数据后,从设备会发送一个ACK信号来确认数据已正确接收。 如果从设备发送了ACK信号,SDA线会被拉低;如果没有发送ACK信号,SDA线会被拉高。 该函数返回一个标志位,表示ACK信号的状态。 IIC_Send_Byte(char dataSend) 函数: 发送一个字节到从设备。 通过8次循环,每次发送一个位(bit),从最高位开始,直到最低位。 在每次循环中,它都会将SCL线拉低,然后将SDA线设置为当前位的状态,接着将SCL线拉高,发送位数据。 发送完毕后,SCL线被拉低,然后数据位被移位,准备发送下一位。
如何显示一个点? 有三种,分别位页地址模式,水平地址模式和垂直地址模式
LeftCon1A 和 LeftCon1B: LeftCon1A 通常用于控制左轮的PWM(脉冲宽度调制)信号,用于控制电机的速度。 LeftCon1B 通常用于控制左轮的方向,当设置为高电平时,电机向前旋转;当设置为低电平时,电机停止旋转。 RightCon1A 和 RightCon1B: RightCon1A 通常用于控制右轮的PWM信号,用于控制电机的速度。 RightCon1B 通常用于控制右轮的方向,当设置为高电平时,电机向前旋转;当设置为低电平时,电机停止旋转。
小车
未完待续