- 2025-02-15
-
发表了主题帖:
MC9S12XS128读取DS18B20的文题
代码:
#include "derivative.h" /* derivative-specific definitions */
#include "18B20.h"
extern void delay1us() ;
/*************************************************************/
/* 延时函数1 */
/*************************************************************/
void delay8us(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
{
TFLG1_C1F = 1; //清除标志位
TC1 = TCNT + 2; //设置输出比较时间为8us
while(TFLG1_C1F == 0); //等待,直到发生输出比较事件
}
}
/*************************************************************/
/* 初始化18B20 */
/*************************************************************/
void init18b20(void)
{
DSDDR=1;
DSO = 1;
delay8us(1);
DSO = 0; //拉低数据线,复位总线;
delay8us(63); //延时504us
DSO = 1; //提升数据线;
//delay8us(4); //延时32us;
delay8us(8); //延时32us;
DSDDR=0;
while(DSI) //等待从器件器件应答信号;
{asm("nop");}
DSDDR=1;
delay8us(30); //延时128us;
DSO = 1; //提升数据线,准备数据传输;
}
/*************************************************************/
/* 向18B20写入数据 */
/*************************************************************/
void WR18b20(byte cmd)
{
unsigned char k;
for(k=0;k<8;k++)
{
if(cmd & 0x01) //低位在前;
{
DSO = 0;
delay1us();
DSO = 1; //发送数据;
}
else
{
DSO = 0;
delay1us();
}
delay8us(8); //延时64us等待从器件采样;
DSO = 1; //拉高总线
delay8us(1);
cmd >>= 1;
}
}
/*************************************************************/
/* 由18B20读取数据 */
/*************************************************************/
unsigned char RD18b20(void)
{
unsigned char k;
unsigned char tmp=0;
DSO = 1;
delay8us(1); //准备读;
for(k=0;k<8;k++)
{
tmp >>= 1; //先读取低位
DSO = 0; //Read init;
delay1us();
DSO = 1; //必须写1,否则读出来的将是不预期的数据;
asm("nop");asm("nop");asm("nop"); //延时9us?
DSDDR=0;
asm("nop");
if(DSI) //在12us处读取数据;
tmp |= 0x80;
delay8us(8);
DSDDR=1;
DSO = 1;
delay8us(1);
//恢复One Wire Bus;
}
return tmp;
}
/*************************************************************/
/* 由18B20读取温度 */
/*************************************************************/
unsigned int read_T(void)
{
unsigned int t;
unsigned char temp[2];
init18b20();
WR18b20(0xcc);
WR18b20(0x44);
init18b20();
WR18b20(0xcc);
WR18b20(0xbe);
temp[0]=RD18b20();
temp[1]=RD18b20();
init18b20();
t=(temp[1]<<8)|temp[0];
return(t);
}
我用MC9S12XS128读取DS18B20,读书不稳定。
高手看看哪里有问题
谢谢
- 2025-02-12
-
回复了主题帖:
找工作的问题
lcofjp 发表于 2025-2-12 14:40
主要是年龄大了,受歧视
是的,况且我还没结婚
-
回复了主题帖:
找工作的问题
Nubility 发表于 2025-2-12 09:28
是啊,特别是纯硬件的人,越来越难找到工作,现在硬件都是方案化的了,硬件工程师只是相当于一个简单的实施 ...
我是搞软件的,一样不好找
- 2025-02-11
-
发表了主题帖:
找工作的问题
现在找工作越来越难,什么都要会,什么都要懂,真是没有活路了。
我找了好长时间也没找到
- 2025-01-28
-
回复了主题帖:
你们家允许放鞭炮了吗?
允许
- 2025-01-24
-
回复了主题帖:
画PCB出错好多
lkh747566933 发表于 2025-1-23 16:57
别着急慢慢改,好多错误其实都是一样的或者一个错误引起的,改一个就相当于改好多。
谢谢
- 2025-01-13
-
回复了主题帖:
起早了,5点就行了,6点半就到公司了
起的好早
- 2025-01-12
-
回复了主题帖:
2024年12月份,我健走128公里,俯卧撑637个。
身体真不错,我是不行了
- 2025-01-01
-
发表了主题帖:
树莓派的问题
这段程序貌似实现按下一个按键两秒钟自动关机
可是我运行程序,回到命令行。
我运行程序命令是sudo python3 gpio10.py,文件名是gpio10.py。
请高手指教,谢谢
-
回复了主题帖:
ML307A如何复位
搞不清楚
-
回复了主题帖:
cJSON能用在STM32工程里吗
谢谢
- 2024-12-30
-
回复了主题帖:
离职感言
最好在一个公司干的久点,才好找下家,否则会给公司一个不好的印象,觉得你干不长久。
-
发表了主题帖:
ML307A如何复位
我现在是这样做的:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(1000);
编译,烧写。
然后在把这几行注释掉,编译烧写,指示灯就慢闪了,表示连上服务器了。
如果不这样就不行。
大神看看,怎么回事?如何解决?谢谢
-
回复了主题帖:
第一节游泳课
我生在农村,那时候河里的水还很请,我上小学时就学会游泳了
-
发表了主题帖:
cJSON能用在STM32工程里吗
请问高手,cJSON能用在STM32工程里吗?
怎么使用?最好举个例子,谢谢
-
回复了主题帖:
一年又到尾声了
我刚换了工作,应该没有年终奖
-
回复了主题帖:
ML307A发送一组数据就自动断掉
wangerxian 发表于 2024-12-30 14:16
多半是指令内容有问题,建议对照一下手册,先发内容不要太短。
谢谢,我试试
-
回复了主题帖:
ML307A发送一组数据就自动断掉
wangerxian 发表于 2024-12-30 13:48
数据内容多长?是模块复位了,还是说只是连接断开。
只是连接断开
-
回复了主题帖:
ML307A如何进入透传模式
wangerxian 发表于 2024-12-30 13:46
手册上肯定有的,这种指令相关的。
找到一个指令可以发数据
- 2024-12-28
-
发表了主题帖:
ML307A发送一组数据就自动断掉
请问高手,4G模组ML307A发送一组数据就自动断掉,如何解决?谢谢