硬件-DAY04(ds18b20、ARM内核)

一、ds18b20

1.使用DS18B20,半双工串行通讯 方式


2.P37引脚结构图:

**上拉电阻: 把一个信号通过一个电阻接到电源(Vcc);
下拉电阻: 把一个信号通过一个电阻接到地(GND)。
作用:维持输入管脚是一个稳态:**当上拉和下拉电阻都不开启时,GPIO引脚处于浮空模式,此时引脚的电压是不确定的,可能会随时间改变。

3.两个或多个输出信号连接在一起可以实现逻辑"与"的功能。

拉高的过程为释放总线的过程;
接收方一定要释放总线,来实现接收数据;
上拉电阻:保证双方释放总线后,总线能够呈现高电平;

4.ds18b20通讯时序:

初始化(复位)--- 写操作 --- 读操作 --- 获取温度

1)初始化

代码:

复制代码
#define DQ_SET (P3 |= (1 << 7))
#define DQ_CLEAR (P3 &= ~(1 << 7))
#define DQ_TST ((P3 & (1 << 7)) != 0)

int ds18b20_reset(void)
{
	int t;
	DQ_CLEAR;
	Delay10us(70);
	DQ_SET;

	Delay10us(5);
	
	t = 0;	
	while(DQ_TST && t < 30)
	{
		Delay10us(1);
		++t;
	}
	if(t >= 30)
	{
		return 0;			
	}

	t = 0;	
	while(!DQ_TST && t < 30)
	{
		Delay10us(1);
		++t;
	}
	if(t >= 30)
	{
		return 0;
	}

	return 1;		
}

2)写入操作

代码:

复制代码
void write_ds18b20(unsigned char date)
{
	int i;
	for(i = 0; i < 8; ++i)
	{
		if(date & 1)
		{
			DQ_CLEAR;
			_nop_();
			_nop_();
			DQ_SET;
			Delay10us(5);	
		}
		else
		{
			DQ_CLEAR;
			Delay10us(5);
			DQ_SET;	
		}
		date >>= 1;
	}
}

3)读操作:

代码:

复制代码
unsigned char read_ds18b20(void)
{
	unsigned char ret = 0;
	int i;
	for(i = 0; i < 8; ++i)
	{
		DQ_CLEAR;
		_nop_();
		_nop_();
		DQ_SET;	
		_nop_();
		_nop_();
		_nop_();
		if(DQ_TST)
		{
			ret |= (1 << i);
		}
		Delay10us(5);	
	}
	return ret;	
}

4)温度获取

代码:

复制代码
float get_temp(void)
{
	unsigned char tl;
	unsigned char th;
	short ret;
	ds18b20_reset();
	write_ds18b20(0XCC);
	write_ds18b20(0X44);
	Delay1ms(1000);
	ds18b20_reset();
	write_ds18b20(0XCC);
	write_ds18b20(0XBE);
	tl = read_ds18b20();
	th = read_ds18b20();
	ret = th << 8;
	ret |= tl;
	return ret * 0.0625;
}

二、ARM硬件

1.soc:片上芯片

2.GPIO:控制soc外部引脚的高低电平

3.kernel要与外设间建立联系(BUS总线)

BUS总线分为AHB总线(先进的高速设备)和APB总线(先进的低俗设备)

三、ARM内核概念

1.R0~R12:通用寄存器(内设寄存器不可寻址)

2.ALU:算术逻辑单元

3.SP:栈指针寄存器(在硬件物理层的指针,来管理栈区)

4.PC:程序计数器,PC指到哪,程序就执行到哪

PC一定会从地址0取一个指令开始执行

ARM有32位,每一个指令有4个字节

5.LR:链接寄存器

6.MMU:memory management unit,内存管理单元(内存映射)

7.Cache:高速缓存,可以提高系统运行速率

iCache:指令Cache

dCache:数据Cache,所以ARM是哈弗结构

内核编程中,打开iCache,通常关闭dCache

8.CPSR:程序状态寄存器

9.SPSR:程序状态保护寄存器

10.ARM简介

ARM Cortex A(应用于消费类电子产品)

M(应用于微控制器MAU方向,如STM32)

R(应用于实时性方向,如军事,通信)

ARM的指令集版本:

ARM V4

ARM V5

ARM V7

11.编译流程步骤:

相关推荐
振南的单片机世界14 小时前
地址总线定门牌号,数据总线搬货量:CPU的“寻址”与“搬运”
arm开发·stm32·单片机·嵌入式硬件
2401_854151551 天前
ARM Cortex-M 体系结构深度解析——寄存器模型、处理器模式、AAPCS 与异常模型
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡2 天前
从0到1硬核拆解:工业级数据采集卡的隔离设计与Modbus通信实战
arm开发·单片机·嵌入式硬件·fpga开发·开源
keep7543 天前
ARM NEON 向量优化在图像处理中的应用:降低 CPU 开销,提升模式切换稳定性
arm开发·图像处理·人工智能
zlinear数据采集卡5 天前
从协议解析到波形实时显示:硬核拆解ZLinear采集卡上位机软件的开发架构
arm开发·单片机·嵌入式硬件·fpga开发·架构·开源
奔跑的架构师5 天前
[A-48]ARMv9/v8-电源状态管理机制(PSCI协调机制)
android·linux·arm开发·arm
想你依然心痛5 天前
RT-Thread组件生态:SAL网络框架与AT组件实战——网络抽象、AT指令
网络·arm开发·at·sal
secondyoung6 天前
Cortex-R52学习:存储系统
arm开发·单片机·学习·arm
c++之路6 天前
C++跨平台(九):跨平台字节序统一处理
开发语言·arm开发·c++
AndyHeee23 天前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发