【原创】zstack - 协议栈程序精简日志- IO试验

【原创】zstack - 协议栈程序精简日志- IO试验

闲来无事测试zstack协议栈的记录。

IO实验操作对象是DS18B20温度传感器,东西太简单,直接贴代码:

IO试验直接奉上DS18B20驱动程序:
#include"iocc2530.h"
#include"OnBoard.h"

#define uint unsigned int
#define uchar unsigned char

#define Ds18b20Data P1_7 //温度传感器引脚

#define ON 0x01  //读取成功返回0x00,失败返回0x01
#define OFF 0x00

void Ds18b20Delay(uint k);
void Ds18b20InputInitial(void);//设置端口为输入
void Ds18b20OutputInitial(void);//设置端口为输出
uchar Ds18b20Initial(void);
void Ds18b20Write(uchar infor);
uchar Ds18b20Read(void);
void Temp_test(void); //温度读取函数


unsigned char temp,test1,test2; //储存温度信息

//时钟频率为32M
void Ds18b20Delay(uint k) //调用函数,延时us
{
  MicroWait(k);
}

void Ds18b20InputInitial(void)//设置端口为输入
{
  P1DIR &= 0x7f;
}

void Ds18b20OutputInitial(void)//设置端口为输出
{
   P1DIR |= 0x80;
}

//ds18b20初始化
//初始化成功返回0x00,失败返回0x01
uchar Ds18b20Initial(void)
{
  uchar Status = 0x00;
  uint CONT_1 = 0;
  uchar Flag_1 = ON;
  Ds18b20OutputInitial();
  Ds18b20Data = 1;
  Ds18b20Delay(200);
  Ds18b20Data = 0;
  Ds18b20Delay(480);
  Ds18b20Data = 1;
  Ds18b20InputInitial();
  while((Ds18b20Data != 0)&&(Flag_1 == ON))//等待ds18b20响应,具有防止超时功能
  {                                        //等待约60ms左右
    CONT_1++;
    Ds18b20Delay(10);
    if(CONT_1 > 8000)Flag_1 = OFF;
    Status = Ds18b20Data;
  }
  Ds18b20OutputInitial();
  Ds18b20Delay(400);
  Ds18b20Data = 1;

  return Status;
}


void Ds18b20Write(uchar infor)
{
  uint i;
  Ds18b20OutputInitial();
  for(i=0;i<8;i++)
  {
  Ds18b20Data = 0;
  Ds18b20Delay(5);
  Ds18b20Data = infor & 0x01;
  Ds18b20Delay(60);
  Ds18b20Data = 1;
  infor >>= 1;
  }
}

uchar Ds18b20Read(void)
{
  uchar Value = 0x00;
  uint i;
  Ds18b20OutputInitial();
  Ds18b20Data = 1;
  Ds18b20Delay(10);
  for(i=0;i<8;i++)
  {
  Value >>= 1;
  Ds18b20OutputInitial();
  Ds18b20Data = 0;
  Ds18b20Delay(5);
  Ds18b20Data = 1;
  Ds18b20Delay(8);
  Ds18b20InputInitial();
  if(Ds18b20Data == 1) Value |= 0x80;
  Ds18b20Delay(60);
  Ds18b20Data = 1;
  }
  return Value;
}


void Temp_test(void) //温度读取函数
{
  uchar V1,V2;

  test1=Ds18b20Initial();
  Ds18b20Write(0xcc);
  Ds18b20Write(0x44);
  MicroWait(600);
  test2=Ds18b20Initial();
  Ds18b20Write(0xcc);
  Ds18b20Write(0xbe);

  V1 = Ds18b20Read();
  V2 = Ds18b20Read();
  temp = ((V1 >> 4)+((V2 & 0x07)*16)); 

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值