• “龙江二号”微卫星传回地月合影 2019-04-18
  • 中国驻泰国大使考察合艾国光中学孔子课堂 2019-04-18
  • 【清园20年】感恩大回馈!半价!半价! 2019-04-18
  • 中央纪委紧盯节点 4年来通报曝光问题近4000起 2019-04-13
  • 2013环球企业领袖宁夏圆桌会议嘉宾云集 2019-04-13
  • 《魔兽世界》未解之谜 那些仍不能被玩家们踏足的领地 2019-04-11
  • 钱江潮评 让高质量发展插上人才的翅膀 2019-04-10
  • 习近平两会期间谈社会主义核心价值观 2019-04-02
  • 文脉颂中华——黄河新闻网 2019-04-02
  • 陈小林的专栏作者中国国家地理网 2019-03-29
  • 中英航母大战谁能赢歼151枚炸弹就能炸瘫女王 2019-03-22
  • 独特“光捕捉器”可控制分子生化性质 2019-03-22
  • 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07
  • 打印

    十一选五赚钱方法真实: [范例教程] 笙泉【8051 1T】MA82G5D16 IIC

    [复制链接]
    653|6
    跳转到指定楼层
    楼主
     楼主 | 2018-12-28 16:29 | 只看该作者 |退出气泡模式 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 KobeLai 于 2019-1-22 16:55 编辑

    MA82G5D16 IIC操作步骤(初始化)
    一:选择IIC接口的端口(本范例选择P22为SCL,P24为SDA)。
    二:主机模式下需要选择IIC的时钟(不能超过1MHz),从机模式会自动同步主机时钟(最高400KHz)。

    void TWI0_Init()
    {
            SICON=0x00;
            //P22,P24 is Open drain with pull high
            P2M0=P2M0|(P2M02|P2M04);
            SFRPI=1;
            P2M1=P2M1|(P2M12|P2M14);
            P2M1&=~P2M12;
            SFRPI=0;
            _nop_();
            _nop_();
            _nop_();
            AUXR3 = 0x06;                              //sel P22/P24 as SCL/SDA         
            SICON = ( CR2 | ENSI | CR1 | CR0 );                //enable TWSI and clock source Timer0 overflow, I2C Freq is 400KHz.
    }

    void Timer0_Initial(void)
    {
            TMOD = 0x02;
            TH0 = 251;
            TL0 = 251;
            TR0 = 1;
            AUXR2 = T0X12;

    }

    MA82G5D16支持笙泉的OCD ICE,可以在Keil 3,Keil 4,Keil 5环境下自由仿真。
    下面网址可以下载仿真安装包:
    //www.megawin.com.tw/zh-cn/support/index/70/113

    沙发
     楼主 | 2018-12-28 16:35 | 只看该作者
    本帖最后由 KobeLai 于 2018-12-28 16:37 编辑

    MA82G5D16 IIC读取

    1. uCHAR tmp;
    2. uCHAR TWI0_Err;

    3. uCHAR I2C_Read(uCHAR Dev_Addr, uCHAR Reg_Addr)
    4. {        
    5.         uCHAR        usData = 0;
    6.         uINT         cnt = 0;

    7.         SICON |= STA;
    8.         SICON &= ~SI;
    9.         cnt = 0;
    10.         while( (SICON&SI) != SI)
    11.         {
    12.                 cnt++;
    13.                 if(cnt > _TWSI_TIME_MAX_)
    14.                 {        
    15.                         TWI0_Err = 1;
    16.                         goto TWI0R_End;
    17.                 }
    18.         }
    19.         SICON &= ~STA;

    20.         SIDAT = Dev_Addr;                                                        // send device address
    21.         SICON &= ~SI;
    22.         cnt = 0;
    23.         while( (SICON&SI) != SI)
    24.         {
    25.                 cnt++;
    26.                 if(cnt > _TWSI_TIME_MAX_)
    27.                 {        
    28.                         TWI0_Err = 1;
    29.                         goto TWI0R_End;
    30.                 }
    31.         }

    32.         SIDAT = Reg_Addr;                                                        // send register address
    33.         SICON &= ~SI;
    34.         cnt = 0;
    35.         while( (SICON&SI) != SI)
    36.         {
    37.                 cnt++;
    38.                 if(cnt > _TWSI_TIME_MAX_)
    39.                 {        
    40.                         TWI0_Err = 1;
    41.                         goto TWI0R_End;
    42.                 }
    43.         }


    44.         SICON |= STA;                                                                // restart
    45.         SICON &= ~SI;
    46.         cnt = 0;
    47.         while( (SICON&SI) != SI)
    48.         {
    49.                 cnt++;
    50.                 if(cnt > _TWSI_TIME_MAX_)
    51.                 {        
    52.                         TWI0_Err = 1;
    53.                         goto TWI0R_End;
    54.                 }
    55.         }
    56.         SICON &= ~STA;

    57.         SIDAT = Dev_Addr | 0x01;                                        // send device address
    58.         SICON &= ~SI;
    59.         cnt = 0;
    60.         while( (SICON&SI) != SI)
    61.         {
    62.                 cnt++;
    63.                 if(cnt > _TWSI_TIME_MAX_)
    64.                 {        
    65.                         TWI0_Err = 1;
    66.                         goto TWI0R_End;
    67.                 }
    68.         }

    69.         SICON &= ~SI;
    70.         cnt = 0;
    71.         while( (SICON&SI) != SI)
    72.         {
    73.                 cnt++;
    74.                 if(cnt > _TWSI_TIME_MAX_)
    75.                 {        
    76.                         TWI0_Err = 1;
    77.                         goto TWI0R_End;
    78.                 }
    79.         }
    80.         usData = SIDAT;

    81.         SICON |= STO;
    82.         SICON &= ~SI;
    83.         cnt = 0;
    84.         while((SICON&STO) == STO)
    85.         {        
    86.                 cnt++;
    87.                 if(cnt > _TWSI_TIME_MAX_)
    88.                 {        
    89.                         TWI0_Err = 1;
    90.                         goto TWI0R_End;
    91.                 }
    92.         }
    93. TWI0R_End:
    94.         return usData;
    95. }
    复制代码
    板凳
     楼主 | 2018-12-28 16:37 | 只看该作者
    MA82G5D16 IIC 写入

    1. void I2C_Write(uCHAR Dev_Addr, uCHAR Reg_Addr, uCHAR ucData)
    2. {
    3.         uINT         cnt = 0;
    4.         SICON |= STA;
    5.         SICON &= ~SI;
    6.         cnt = 0;
    7.         while( (SICON&SI) != SI)
    8.         {
    9.                 cnt++;
    10.                 if(cnt > _TWSI_TIME_MAX_)
    11.                 {       
    12.                         TWI0_Err = 1;
    13.                         goto TWI0W_End;
    14.                 }
    15.         }
    16.         SICON &= ~STA;

    17.         SIDAT = Dev_Addr;                                                        // send device address
    18.         SICON &= ~SI;
    19.         cnt = 0;
    20.         while( (SICON&SI) != SI)
    21.         {
    22.                 cnt++;
    23.                 if(cnt > _TWSI_TIME_MAX_)
    24.                 {       
    25.                         TWI0_Err = 1;
    26.                         goto TWI0W_End;
    27.                 }
    28.         }

    29.         SIDAT = Reg_Addr;                                                        // send register address
    30.         SICON &= ~SI;
    31.         cnt = 0;
    32.         while( (SICON&SI) != SI)
    33.         {
    34.                 cnt++;
    35.                 if(cnt > _TWSI_TIME_MAX_)
    36.                 {       
    37.                         TWI0_Err = 1;
    38.                         goto TWI0W_End;
    39.                 }
    40.         }

    41.         SIDAT = ucData;                                                                // send data
    42.         SICON &= ~SI;
    43.         cnt = 0;
    44.         while( (SICON&SI) != SI)
    45.         {
    46.                 cnt++;
    47.                 if(cnt > _TWSI_TIME_MAX_)
    48.                 {       
    49.                         TWI0_Err = 1;
    50.                         goto TWI0W_End;
    51.                 }
    52.         }

    53.     SICON |= STO;
    54.     SICON &= ~SI;
    55.         cnt = 0;
    56.         while( (SICON&STO) != STO)
    57.         {
    58.                 cnt++;
    59.                 if(cnt > _TWSI_TIME_MAX_)
    60.                 {       
    61.                         TWI0_Err = 1;
    62.                         goto TWI0W_End;
    63.                 }
    64.         }
    65. TWI0W_End:
    66.         _nop_();
    67. }
    复制代码
    地板
    | 2019-1-3 11:01 | 只看该作者
    请问下,我用了P45 P44 赖做SDA SCL  一直无法通讯成功
    5
     楼主 | 2019-1-3 15:24 | 只看该作者
    本帖最后由 KobeLai 于 2019-1-3 15:29 编辑


    P44,P45是仿真器的接口,不是IIC的接口哟!
    IIC的接口如下



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    6
    | 2019-1-10 11:36 | 只看该作者
    KobeLai 发表于 2019-1-3 15:24
    P44,P45是仿真器的接口,不是IIC的接口哟!
    IIC的接口如下

    你说的自带的硬件IIC  P44 P45 可以禁止OCD,做普通IO  然后用作模拟IIC的SDA   SCL  这样应该可以行吧
    7
     楼主 | 2019-1-11 16:21 | 只看该作者
    样样 发表于 2019-1-10 11:36
    你说的自带的硬件IIC  P44 P45 可以禁止OCD,做普通IO  然后用作模拟IIC的SDA   SCL  这样应该可以行吧 ...

    P44,P45不能作为用户的IIC
    扫描二维码,随时随地手机跟帖
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    我要发帖 投诉建议 创建版块 申请版主

    快速回复

    您需要登录后才可以回帖
    登录 | 注册
    高级模式

    论坛热帖

    快速回复 广东快乐十分走势图 返回列表
  • “龙江二号”微卫星传回地月合影 2019-04-18
  • 中国驻泰国大使考察合艾国光中学孔子课堂 2019-04-18
  • 【清园20年】感恩大回馈!半价!半价! 2019-04-18
  • 中央纪委紧盯节点 4年来通报曝光问题近4000起 2019-04-13
  • 2013环球企业领袖宁夏圆桌会议嘉宾云集 2019-04-13
  • 《魔兽世界》未解之谜 那些仍不能被玩家们踏足的领地 2019-04-11
  • 钱江潮评 让高质量发展插上人才的翅膀 2019-04-10
  • 习近平两会期间谈社会主义核心价值观 2019-04-02
  • 文脉颂中华——黄河新闻网 2019-04-02
  • 陈小林的专栏作者中国国家地理网 2019-03-29
  • 中英航母大战谁能赢歼151枚炸弹就能炸瘫女王 2019-03-22
  • 独特“光捕捉器”可控制分子生化性质 2019-03-22
  • 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07