全球旧事资料 分类
p50s_ya
wu60write_eeprom
保存数据
18b20初始化函数
voidi
it_18b20

bitqdq1
把总线拿高
delay_ui
t1dq0
15us给复位脉冲
delay_ui
t80dq1
750us把总线拿高等待
delay_ui
t10qdq
110us读取18b20初始化信号
delay_ui
t20dq1
200us把总线拿高释放总线
f
写18b20内的数据
voidwrite_18b20uchardat

uchari
fori0i8i
dq0
写数据是低位开始把总线拿低写时间隙开始
dqdat0x01向18b20总线写数据了
delay_ui
t560us
dq1
释放总线
dat1


读取18b20内的数据
ucharread_18b20

ucharivalue
fori0i8i

dq0value1dq1ifdq1
把总线拿低读时间隙开始读数据是低位开始
释放总线开始读写数据
value0x80
delay_ui
t560us读一个时间隙最少要保持60us的时间

retur
value
返回数据

读取温度的值读出来的是小数
ui
tread_temp

ui
tvalue
ucharlow
在读取温度的时候如果中断的太频繁了,就应该把中断给
关了,否则会影响到18b20的时序
i
it_18b20
初始化18b20
write_18b200xcc跳过64位ROM
write_18b200x44启动一次温度转换命令
delay_ui
t50
500us
i
it_18b20
初始化18b20
fwrite_18b200xcc跳过64位ROMwrite_18b200xbe发出读取暂存器命令
EA0
lowread_18b20
读温度低字节
valueread_18b20读温度高字节
EA1value8
把温度的高位左移8位
valuelowvalue00625
把读出的温度低位放到value的低八位中转换到温度值
retur
value
返回读出的温度









请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本
函数是模拟0832的串行协议进行的100通道
111通道
u
sig
edcharad0832readbitSGLbitODD

u
sig
edchari0value0value10
SCL0
DO1CS0
开始
SCL1
第一个上升沿
SCL0
DOSGL
SCL1
第二个上升沿
SCL0
DOODD
SCL1
第三个上升沿
DO1
fori0i8i

SCL1
SCL0开始从第四个下降沿接收数据
value1
ifDO
value

fori0i8i
f
接收校验数据
value11
ifDO
value10x80
SCL1
SCL0

CS1
SCL1
ifvaluevalue1
与校验数据比较,正确就返回数据,否则返回0
retur
valueretur
0
定时器0初始化程序
voidtime_i
it

EA1TMOD0X01
开总中断定时器0、定时器1工作方式1
ET0r
好听全球资料 返回顶部