打印

请问device,value函数类型怎么声明?

[复制链接]
1328|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pvp2006|  楼主 | 2012-2-7 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  • 请问“连接多个相同地址I2C设备的C51程序”device,value函数类型怎么声明?
  • #include "stc89c51.h"
  • #include "iic.h"
  • sbit scl0=P3^5;   
  • sbit sda0 = P3^4;   
  • sbit scl1= P3^3;   
  • sbit sda1 = P3^2;   
  • //这里只写了两个I2C设备,如果需要可以再加上 sbit scl2=xx; sbit sda2=xx; 实际上多个设备的scl脚可以共用
  • unsigned
    char iic_delay_time = 8;   
  • void scl(device,value);   
  • void sda(device,value);   
  • bit sdasense(char device);   
  • // delay
  • void iic_delay(unsigned
    char m)   
  • {   

  • unsigned
    char n;   

  • for(n=0;n<m;n++);   
  • }   
  • //
  • void scl(device,value)   
  • {   

  • if (device==0)        //设备1
  •         scl1=value;   

  • if (device==1)        //设备2
  •         scl2=value;   
  • }   
  • void sda(device,value)   
  • {   

  • if (device==0)        //设备1
  •         sda1=value;   

  • if (device==1)        //设备2
  •         sda2=value;   
  • }   
  • bit sdasense(char device)   
  • {   
  • switch(device)   
  •     {   

  • case 1: return sda1;   

  • break;   

  • case 2: return sda2;   

  • break;   
  •     }   
  • }   
  • //启动I2C总线的函数,当scl为高电平时使sda产生一个负跳变  
  • void iic_start(device)   
  • {   
  •     sda(device,1);   
  •     scl(device,1);   
  •     iic_delay(iic_delay_time);   
  •     sda(device,0);   
  •     iic_delay(iic_delay_time);   
  •     scl(device,0);   
  •     iic_delay(iic_delay_time/2);   
  • }   
  • //终止I2C总线,当scl为高电平时使sda产生一个正跳变
  • void iic_stop(device)   
  • {   
  •     scl(device,0);   
  •     sda(device,0);   
  •     scl(device,1);   
  •     iic_delay(iic_delay_time);   
  •     sda(device,1);   
  •     iic_delay(iic_delay_time);   
  • }   
  • //发送应答信号
  • void iic_ack(device) {   
  •     sda(device,0);   
  •     scl(device,1);   
  •     scl(device,0);   
  •     sda(device,1);   
  • }   
  • //发送无应答信号
  • void iic_noack(device)   
  • {   
  •     sda(device,1);   
  •     scl(device,1);   
  •     scl(device,0);   
  • }   
  • //检测应答信号
  • bit iic_testack(device)   
  • {   
  •     bit errorbit;      //真确应答,返回0
  •     sda(device,1);   
  •     iic_delay(iic_delay_time);   
  •     scl(device,1);   
  •     iic_delay(iic_delay_time);   
  •     errorbit=sdasense(device);   
  •     scl(device,0);   
  •     iic_delay(iic_delay_time);   

  • return(errorbit);   
  • }   
  • //发送一个字节
  • void iic_write8bit(device,unsigned
    char input)   
  • {   

  • unsigned
    char temp;   

  • for(temp=0;temp<8;temp++)   
  •     {   

  • if((input<<temp)&0x80)   
  •             sda(device,1);   

  • else
  •             sda(device,0);   
  •         scl(device,1);   
  •         iic_delay(iic_delay_time);   
  •         scl(device,0);   
  •     }   
  • }   
  • //读一个字节
  • unsigned
    char iic_read8bit(device)   
  • {   

  • unsigned
    char temp,rbyte=0;   

  • for(temp=0;temp<8;temp++)   
  •     {   
  •         scl(device,1);   
  •         iic_delay(iic_delay_time);   

  • if(sdasense(device))   
  •             rbyte=(rbyte<<1)+1;   

  • else
  •             rbyte=rbyte<<1;   
  •         scl(device,0);   
  •     }   

  • return(rbyte);   
  • }   

相关帖子

沙发
pvp2006|  楼主 | 2012-2-7 14:27 | 只看该作者
这是一段C51连接两个IIC设备时用的程序,里面的形参device是用来选择设备的char,value是值应该是bit把,但是应该怎么声明呢?网上找到的,但是不会用啊,求教啊。

使用特权

评论回复
板凳
pvp2006|  楼主 | 2012-2-7 15:36 | 只看该作者
子函数和函数的一个形参名称和类型相同。
调用这个函数时,形参的值会传递吗?
如果相同这个形参必须声明两次吗?
还是只要在主函数中声明一次就够了,声明在主函数中吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝