C51 GPIO口模拟IIC读写24CXX

发布者:nu23最新更新时间:2018-12-19 来源: eefocus关键字:C51  GPIO口  模拟IIC  读写24CXX 手机看文章 扫描二维码
随时随地手机看文章

#include

#define delayNOP() {_nop_(); _nop_(); _nop_(); _nop_();}


//IIC 开始信号

void iic_start(void)

{

    SDA = 1;

    SCL = 1;

    delayNOP();

    SDA = 0;

    delayNOP();

    SCL = 0;

}

//IIC 停止信号

void iic_stop(void)

{

    SDA = 0;

    delayNOP();

    SCL = 1;

    delayNOP();

    SDA = 1;

}


//IIC 写字节

bit iic_write(u8 dat)

{

    bit ack;

    int i=0;

    SCL = 0;

    for(i=0; i<8; i++)

    {

        SDA = (bit)((dat<

        _nop_();

        SCL = 1;

        delayNOP();

        SCL = 0;

    }

    SDA = 1;//释放SDA

    delayNOP();

    SCL = 1;

    delayNOP();

    ack = SDA;  //读取应答位 从器件应答

    SCL = 0;

    return ack;

}


//IIC读字节  

u8 iic_read(void)

{

    u8 i, read_dat=0;

    for (i=0; i<8; i++)

    {

        SCL = 1;

        read_dat <<= 1;

        read_dat |= SDA;

        SCL = 0;

    }

    return read_dat;

}


void write_byte(u8 addr, u8 dat)

{

    iic_start();

    iic_write(0xa0);

    iic_write(0x00);  //20C64  双地址 H L

    iic_write(addr);

    iic_write(dat);

    iic_stop();

    mdelay(10);

}


u8 read_byte(u8 addr)

{

    u8 dat;

    iic_start();

    iic_write(0xa0);

    iic_write(0x00); //20C64  双地址 H L

    iic_write(addr);

    iic_start();

    iic_write(0xa1);

    dat = iic_read();

    iic_stop();

    return dat;

}



关键字:C51  GPIO口  模拟IIC  读写24CXX 引用地址:C51 GPIO口模拟IIC读写24CXX

上一篇:C51 定时器Timer使用,及产生1ms系统Tick
下一篇:51 软件模拟SPI驱动OLED

推荐阅读最新更新时间:2024-03-16 16:20

C51语言使用外部存储器的方法
简介:课本上学到的外部存储器操作基本上都是用汇编语言实现的,但是在实际工作中,大都用C语言编写单片机的程序,那么对外部存储器的操作就不仅仅是给一个普通变量赋值那样子了。 简单地说,注意两个方面: 软件部分: 1.添加头文件#include 2.在需要读写的地方用XBYTE就行,具体做法如下: 比如要访问0xA0B0这个地址(读数据):变量名=XBYTE 就行 反过来要给0xA0B0这个地址赋一个值(写数据):XBYTE =变量名 硬件部分: 硬件连接,将51单片机的P2口接外部存储器的高8位,P0口接数据并通过锁存器接外部存储器的低8位,锁存器的锁存端接51单片机的ALE, 51单片机的读写端要
[单片机]
C51中精确的延时与计算的实现
C51由于其可读性和可移植性很强,在单片机中得到广泛的应用,但在某些时候由于C51编写的程序对在有精确时间要求下,可能就得要用汇编语言来编写,但在C51是否也能实现时间的精确控制呢?答案是肯定的。 在C51中要实现对时间的精确延时有以下几种方法 其一:对于延时很短的,要求在us级的,采用 _nop_ 函数,这个函数相当汇编NOP指令,延时几微秒,就插入个这样的函数。 其二:对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。 在选择C51中循环语句时,要注意以下几个问题 第一、定义的C51中循环变量,尽量采用无符号字符型变量。 第二、在FOR循环语句中,尽量采用变量减减来做循环。 第三、在do
[单片机]
ADC0809模数转换器的C51功能函数
/*****************ADC0809功能函数****************/ //启动A/D转换函数:StartADC() void StartADC(uchar Address) { PinC = (bit) (Address & 0x04); //C最高位 PinB = (bit) (Address & 0x02); PinA = (bit) (Address & 0x01); //以上3句输出地址CBA PinSTART = 0; //启动AD0809进行A/D转换 } //等待A/D转换结束函数:WaitADCEnd() void W
[单片机]
SAA3010红外解码(C51
/******************************************************************************************** * 功 能:红外解码。 * 硬件条件:1.CPU型号:AT89S52 * 2.晶振:12.000MHz * 3.用跳线帽短接P2.3__SI2 * 用跳线帽短接P2.2__RCK2 * 用跳线帽短接P2.1__SCK2 * 4.用跳线帽短接HW-IRQ__P3.2 * 5.欲完成本实验,还需另行准备一个遥控器,型号为SAA-3010T。
[单片机]
C51 数模转换(AD)
代码: #include reg52.h #define uchar unsigned char #define uint unsigned int uint disnum,a; sbit adrd=P3^7; sbit adwr=P3^6; sbit dula=P2^6; sbit wela=P2^7; uchar code table_du ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; delay(uchar); display(uint); void main() { while(1)
[单片机]
C51单片机设计远程红外安防监控管理系统
  随着社会经济的发展和科学技术的进步,人们对办公场所的安全提出了更高的要求。特别对于企业而言,防火防盗更是必不可少的安全防范事件。针对传统的安防成本比较高、且实时性不强、集中管理控制困难、难以对安全隐患问题进行排查预警等情况; 现基于单片机技术和移动通信网络开发出一种实时、无线、便于管理、成本低廉的主动防护远程红外监控管理系统。   1 系统组成及功能   1.1 系统组成   整个系统主要由现场监控端、移动传输网络和监控中心三部分组成。现场监控端包括监控主机、传感器(包括红外传感器、烟雾传感器和门磁传感器)、摄像头和GPRS 通信模块。传输网络借由移动通信的GSM\\GPRS 网络,完成远程通信。监控中心由可靠的DCN
[单片机]
用<font color='red'>C51</font>单片机设计远程红外安防监控管理系统
C51的编程规范说明
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。 作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved