| 
 
新手上路 
 
	积分20金钱20 注册时间2022-10-12在线时间3 小时 | 
 
1金钱 
| 有关DS18B20问题,我跟着时序图写的代码, 但是始终不明白是哪个环节出了问题,,我已经找了好好几天了,一直没找到具体问题,请大神帮忙看看
 
 //DS18B20 data pin Connected GPIO PI4   GPIO端口输入输出选择
 void Initializ_ds18b20_GPIO(u8 In_Out_Select)
 {
 if(1 == In_Out_Select)          //输出模式
 {
 PI_DDR_DDR4 = 1;            //1: Output mode
 PI_CR1_C14  = 0;            //Float output
 PI_CR2_C24  = 0;            //Low Speed Output
 DS = 1;
 }
 else                            //输入模式
 {
 PI_DDR_DDR4 = 0;            //1: input mode
 PI_CR1_C14  = 0;            //Input with pull-up
 PI_CR2_C24  = 0;            //External interrupt disabled
 }
 }
 
 
 //初始化代码
 u8 Reset_ds18b20(void)
 {
 u8 state = 1;
 Initializ_ds18b20_GPIO(OUT);    //DS18B20 数据线设为 输出模式
 DS = 0;                         //拉低数据总线
 delay_us(750);                  //保持750us
 DS = 1;                         //释放总线
 delay_us(50);                   //等待18B20 15~60us
 Initializ_ds18b20_GPIO(IN);     //设为输入模式
 
 state = PI_IDR_IDR4;            //获取DS18B20状态
 delay_us(500);                  //延时500us
 
 return state;
 }
 
 
 //写一个字节
 void ds18b20_Write(u8 dat)
 {
 u8 i = 0;
 
 Initializ_ds18b20_GPIO(OUT);    //Ready Write Operaction
 
 
 
 for(i = 0;  i < 8;i++)
 {
 DS = 1;
 
 if((dat & 0x01) == 1)           //Write 1 Opetation
 {
 DS = 0;
 delay_us(2);                //Release Bus
 DS = 1;
 delay_us(60);               //Wating ds18b20 Samples
 }
 else
 {
 DS = 0;
 delay_us(65);               //Wating ds18b20 Samples
 }
 dat = dat >> 1;
 }
 }
 
 
 //读一个字节
 u8 ds18b20_Read(void)
 {
 u8 i = 0;
 u8 data = 0;
 for(i = 0 ;i < 8; i++)
 {
 Initializ_ds18b20_GPIO(OUT);    //输出模式
 DS = 1;                     //释放总线 等待电平稳定
 delay_us(2);                // 等待电平稳定
 data = data >> 1;           // 临时用于存放数据,先低地位移除
 
 DS = 0;                     //Tint > us
 delay_us(2);                //延时 us
 DS = 1;                     //释放总线
 delay_us(2);                //延时TRC的时间
 
 Initializ_ds18b20_GPIO(IN); //改为输入模式
 
 if(1 == PI_IDR_IDR4)        //判断总线 电平 分别取出电平
 {
 data = data | 0x80;     //high bit Set
 }
 else
 {
 data = data & 0x7F;     //higt bie Reset
 }
 
 }
 
 return data;
 }
 
 
 
 我已将附件上传请大神协助!!谢谢!请指明错误点
 
 
 | 
 |