I2C等程序片断

//*********************************************************************************************************8

SERV=!www.runsunc-sz.com:2003
DIAL=*99***1#
STOP=++++++
HTST=heartbeat!
MUID=gprs@sina.com.cn
MPAS=test
MADD=gprs@sina.com.cn
SMTP=mail.sina.com
GSTR=AT+CGDCONT=1,"IP","cmnet"
GPAS=gprs
IREF=!www.sina.com.cn
SERB=0
HOST=13920040020
USER=CARD
PASS=CARD
HALF=0
DELY=200
GSET=1

help half
      HALF---define the half-485/422 mode
      Example: half=1/0 --- set the mode on/off
      Note:if changed,need reset to enable

ECHO=1          AUTO=1          PROT=1          MODE=0          MESG=1
UPGR=0          SERI=0          BAUD=7          SLEN=20         TOUT=100
RPPP=500                LIVE=8          HTTM=60
FLOW=0
SERV=!www.runsunc-sz.com:2003
DIAL=*99***1#
STOP=++++++
HTST=heartbeat!
MUID=gprs@sina.com.cn
MPAS=test
MADD=gprs@sina.com.cn
SMTP=mail.sina.com
GSTR=AT+CGDCONT=1,"IP","cmnet"
GPAS=gprs
IREF=!www.sina.com.cn
SERB=0
HOST=13920040020
USER=CARD
PASS=CARD
HALF=0
DELY=200
GSET=1

/***********************************************************************************************************
ftp://ftp.sdedu.net/download/Software/OperationSystem/win2ksp4/
ftp://ftp.sdedu.net/download/Software/AntiVirus/Sasser/FxSasser.exe
/*---------------- 24CXX读写程序 ----------------*/
void start24c(void)            //开始启动
{ sda=1;scl=1;
   nop();
   sda=0;
   nop();
}

void stop24c(void)             //停止
{ sda=0;scl=1;
   nop();
   sda=1;
   nop();
}
void ack24c(void)              //正向回应
{ sda=0;
   nop();
   scl=1;
   nop();
   scl=0;
}
void noack24c(void)            //反向回应
{ sda=1;
   nop();
   scl=1;
   nop();
   scl=0;
}

void send24c(uchar dd)         //内部函数,发送数到i2c
{ uchar bitcounter=8;
   uchar temp;
   do {
       temp=dd;
       scl=0;
       nop();
       if((temp&0x80)==0x80)
         sda=1;
       else
         sda=0;
       scl=1;
       temp=dd<<1;
       dd=temp;
       bitcounter--;
       } while(bitcounter);
    scl=0;
}

uchar rece24c(void)                      //内部函数,从i2c接收数
{  uchar temp=0,temp1=0,bitcounter=8;
    sda=1;
    do {
       scl=0;
       nop();
       scl=1;
       nop();
       if(sda)
         temp=temp|0x01;
       else
         temp=temp&0xfe;
       if(bitcounter-1)
         { temp1=temp<<1;
           temp=temp1;
         }
       bitcounter--;
       } while(bitcounter);
       return(temp);
}

/** 向I2C写数据,器件号(页号)(addr24crom_w,addr24crom_r), */
/*  可调用函数: 将dd写入24c 中的address地址中           */
void write24c(uchar addr24crom_w,uchar dd,uchar address)
{  con1=0;
    start24c();
    send24c(addr24crom_w);
    ack24c();
    send24c(address);
    ack24c();

    send24c(dd);
    ack24c();
    stop24c();
    delay(1);
    con1=1;
}

/** 从I2C读数据,器件号(页号)(addr24crom_w,addr24crom_r),      */
/*  可调用函数: 从24c 中的address地址中读出数,返回值为该读数 */
uchar read24c(uchar addr24crom_w,addr24crom_r,address)
{     uchar dd;
    start24c();
    send24c(addr24crom_w);
    ack24c();
    send24c(address);
    ack24c();

    start24c();
    send24c(addr24crom_r);
    ack24c();
    dd=rece24c();
    scl=0;
    noack24c();
    stop24c();
    return(dd);
}


/*--------------------- ADC0832 控制程序 -------- -----*/
void adcck(void)               // 一个时钟周期
{ adcclk=1; sdelay(5);
   adcclk=0; sdelay(5);
}

uchar readadc(bit b1,b0)        //读0832中通道(b1,b0)中的一个数
{ uchar i,ch;
   ch=0;                         // 清零
   adccs=0;                      // cs 低电平有效

   adcclk=0;sdelay(3);
   adcdo=1;sdelay(3);
   adcclk=1;sdelay(3);               //当do为1时,脉冲沿送出,启动开始

   adcclk=0;sdelay(3);
   adcdo=b1;sdelay(3);
   adcclk=1;sdelay(3);

   adcclk=0;sdelay(3);
   adcdo=b0;sdelay(3);
   adcclk=1;sdelay(3);               //配置通道

   adcck();                        //一个稳定时钟
   ch=0;
   for (i=0; i<8; i++)
      { adcck(); ch=(ch<<1)|adcdo; }
   adccs=1;
   return(ch);
}


/*------------------------------RS232 --------------------------*/
/*速率:1200b   使用定时器方式1 */
void rs232init(void)           //通讯初始化
{
   TMOD=0x20;                //设置1200B速率时的定时器1方式
   TL1=0xe8; TH1=0xe8;       //计算初值为1200B
   SCON=0xd8;                //设定串口工作方式3
   PCON=0x00;    
   TR1=1;                    //定时器1有效
}

//向串口发送一个字符
void send232c(unsigned char ch) 
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}
//从串口收一个字符,非中断
uchar rece232c(void) 
{uchar ch;
    while(RI==0);
    RI=0;
    ch=SBUF;
    return(ch);
}
//向串口发送一个字符串,strlen为该字符串长度
uchar rs232t(uchar *str,strlen)
{ uchar k=0,ch;
    do
    { send232c(*(str + k));
      k++;
    } while(k < strlen);         //发strlen个字符
    send232c('}');                 //发校验码
    ch=rece232c();               //等上位机校验
    return(ch);
}
/*------------------------------RS232 --------------------------*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值