找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10483|回复: 7
打印 上一主题 下一主题
收起左侧

stc12c5608ad I2c学习笔记 含程序

[复制链接]
跳转到指定楼层
楼主
ID:117761 发表于 2016-6-18 01:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        开场白------本人年过五十二了年迈的父母已经离去。孩子也已经工作三年也不用我多余操心 。小生意也清淡这下算有时间来捣鼓捣鼓我的业余爱好,本人愚笨没有棋牌类的大众爱好,驾车技术也不好自然自驾游就没兴趣了。想来想去还是做一个老宅男在家里做一些小电路实验。这也算满足自己的好奇心吧。动手动脑远离老年痴呆症哈哈哈哈。。。。  由于从小就爱好自然电子垃圾很多于是开始了。。。。。
      言归正传,想来想去还是从单片机I2c开始吧。找到吃灰的stc12c5608ad ,洞洞板,于是乎搭建最小系统,下载软件就开始I2c 之旅。选stc主要是下载方便,一个usb转串口就可以下载了。
     先是看I2c的协议,开始不太明白,看了几天有了些理解,时序很重要弄清楚了。对今后的实验有好处。语言就用c51,编译器用keil
编了几段程序试了一下基本按照我的思路运行。注意的事项是,启动器件,器件地址,读写命令。
//***********I2C********* //
#include <STC12C56.H>      
int k,i,j,n; //定义全局变量
void yanshi() ; // 延时程序
void qidong();  //启动程序
void pz();  //器件地址
void songshu();  // 送器件地址
sbit sda=P2^4;
sbit scl=P2^5; void songshu() //送器件地址
{     int b, a=0x80,c=0xa0 ,d=0xff;
      scl=0;    //这一定要
      yanshi() ;
       for(b=0;b<8;b++)   //要送数据长度为8位/
      {   if((c<<b)&0x80) //判断发送位/   
           sda=1;      
           else  sda=0;
           yanshi( );
           P20=0;//送一个数闪一次
            scl=1 ;      
            yanshi();      
            scl=0;
            P20=1;                                         
                                  }
            yanshi();
            sda=1;
            yanshi();
             scl=1;
            P20=0;
            yanshi();
            if(P24==0)
              P20=0;   //方便观察应答
              else P20=1;
                                                          }
void pz() //基础实验,死办法一个个的送,在第9个上会收到应答
{  scl=0;            //1
   yanshi();
    sda=1;
    P20=0;
    yanshi();
     P20=1;
     scl=1;
     yanshi();
     scl=0;              //2
      yanshi();
      sda=0;
      P20=0;
     yanshi();
      P20=1;
      scl=1;
     yanshi();
     scl=0;
       yanshi(); //3
      sda=1;
      P20=0;
      yanshi();
      P20=1;
       scl=1;
      yanshi();

    scl=0;
   yanshi();
    sda=0;      //4
    P20=0;
    yanshi();
    P20=1;
     scl=1;
    yanshi();

    scl=0;
yanshi();
    sda=0;   //5
    P20=0;
yanshi();
P20=1;
scl=1;
yanshi();

scl=0;
yanshi();
    sda=0;  //6
    P20=0;
yanshi();
P20=1;
scl=1;
yanshi();

scl=0;
yanshi();
    sda=0;
    P20=0;     //7
yanshi();
P20=1;
scl=1;
yanshi();

    scl=0;
yanshi();
    sda=1;
    P20=0;     //8
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi();
sda=1;      
yanshi();
scl=1;
    if(P24==0)
P20=0;     //9
else  P20=1;
                         }
void yanshi()//延时程序
{  for(n=1;n<=1000;n++)
  {  P21=0;
    for(j=1;j<=10;j++)
     P21=1;
    }     
       }

  void qidong()  //启动程序

  {     scl=1;
        sda=1;
       yanshi() ; // 调用延时程序
       sda=0;  
      yanshi();  
                      }
void main(void)
{      qidong();  //调用启动   
        songshu();  
          while(1);
                              }

     程序中用了大量的延时是为了方便调试,在P20口接了一个发光管观察,嘿嘿程序灌进去运行一下看见了。。。。。。明天继续学习



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74143 发表于 2016-6-18 12:53 | 只看该作者
学习学习
回复

使用道具 举报

板凳
ID:86621 发表于 2016-12-3 20:51 | 只看该作者
请问有stc12c5608ad的引脚图吗?
回复

使用道具 举报

地板
ID:86621 发表于 2016-12-3 20:51 | 只看该作者
请问有stc12c5608ad的引脚图吗?
回复

使用道具 举报

5#
ID:86621 发表于 2016-12-3 20:52 | 只看该作者
有的话可以发我一份吗?
回复

使用道具 举报

6#
ID:408881 发表于 2018-11-12 11:39 | 只看该作者
我的uVison3 没有12c5608ad的头文件怎么办?
回复

使用道具 举报

7#
ID:255919 发表于 2019-2-21 11:26 | 只看该作者
现在学习的怎么样了?在吗不见下文呀
回复

使用道具 举报

8#
ID:977804 发表于 2022-1-8 22:34 来自手机 | 只看该作者
有心人
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表