lpc1788IO口模拟IIC

发布者:limm20032003最新更新时间:2017-01-13 来源: eefocus关键字:lpc1788  IO口  模拟IIC 手机看文章 扫描二维码
随时随地手机看文章

#ifndef __MYIIC_H_

#define __MYIIC_H_

 

#include "common.h"

#include "delay.h"

#include "debugserial.h"

 

//sda 027 scl 028

//IO方向设置

#define IIC1_SDA_IN()  P0dir(27) = 0

#define IIC1_SDA_OUT() P0dir(27) = 1

 

//IO操作函数    

#define IIC1_READ_SDA   P0in(27)    //输入SDA

 

 

void my_iic_init(void);                 //初始化IIC的IO口     

 

void my_iic_start(void);                //发送IIC开始信号

 

void my_iic_stop(void);                 //发送IIC停止信号

 

void my_iic_sendByte(u8 txd);           //IIC发送一个字节

 

u8   my_iic_readByte(void); //IIC读取一个字节

 

u8   my_iic_waitAck(void);              //IIC等待ACK信号

 

void my_iic_ack(void);                  //IIC发送ACK信号

 

void my_iic_nAck(void);                 //IIC不发送ACK信号

 

 

 

 

#endif

 

 

 

 

#include "myiic.h"

 

//该驱动针对模拟IIC操作

 

void my_iic_init(void)                  //初始化IIC的IO口 

{

    LPC_SC->PCONP |= (1<<15);

   

    LPC_IOCON->P0_27 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

    LPC_IOCON->P0_27 |= (1<<8);//与引脚配置相关 根据实际引脚进行修改

   

    LPC_IOCON->P0_28 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

    LPC_IOCON->P0_28 |= (1<<8);//与引脚配置相关 根据实际引脚进行修改

   

    P0dir(27) = 1;//scl输出

    P0dir(28) = 1;//sda输出

    P0high(27) = 1;//初始化都是高电平

    P0high(28) = 1;

   

   

}

 

void my_iic_start(void)             //发送IIC开始信号

{

    IIC1_SDA_OUT();     //sda线输出

    P0high(27)=1;       //SDA HIGH 

    P0high(28)=1;       //SCL HIGH

    DelayUs(5);

    P0low(27)=1;        //SDA LOW

    DelayUs(5);

    P0low(28)=1;        //SCL LOW

}

 

void my_iic_stop(void)                  //发送IIC停止信号

{

    IIC1_SDA_OUT();     //sda线输出

    P0high(28)=1;       //SCL HIGH

    P0low(27)=1;        //SDA LOW

    DelayUs(5);

    P0high(27)=1;       //发送I2C总线结束信号 SDA HIGH

    DelayUs(5);

}

 

 

void my_iic_sendByte(u8 txd)            //IIC发送一个字节

{

    u8 t;  

    IIC1_SDA_OUT();        

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

    {             

        if(((txd&0x80)>>7))

            P0high(27) = 1;

        else

            P0low(27) = 1;

        txd<<=1;         

        P0high(28)=1;   //SCL HIGH

        DelayUs(5);

        P0low(28)=1;    //SCL LOW

        DelayUs(5);

    }  

}

 

 

u8   my_iic_readByte(void)  //IIC读取一个字节

{

    unsigned char i,receive=0;

    IIC1_SDA_IN();//SDA设置为输入

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

    {

        receive<<=1;

        P0high(28)=1;           //SCL HIGH  

        DelayUs(5);

        if(IIC1_READ_SDA)receive++;

        P0low(28)=1;            //SCL LOW

        DelayUs(5);     

    }                   

    return receive;

}

 

 

u8   my_iic_waitAck(void)               //IIC等待ACK信号

{

    u8 ucErrTime=0; 

    IIC1_SDA_OUT();

    P0high(27)=1;       //SDA HIGH 

    DelayUs(5);

    IIC1_SDA_IN();              //SDA设置为输入      

    P0high(28)=1;               //SCL HIGH

    DelayUs(5); 

    while(IIC1_READ_SDA)

    {

        ucErrTime++;

        DelayUs(1);

        if(ucErrTime>250)

        {

            my_iic_stop();

            return 1;

        }

    }

    P0low(28)=1;                //时钟输出 SCL LOW

    DelayUs(5);   

    return 0;

}

 

 

void my_iic_ack(void)                   //IIC发送ACK信号

{

    IIC1_SDA_OUT();

    P0low(27)=1;        //SDA LOW

    DelayUs(2);

    P0high(28)=1;       //SCL HIGH

    DelayUs(5);

    P0low(28)=1;        //SCL LOW

    DelayUs(5);

}

 

 

void my_iic_nAck(void)                  //IIC不发送ACK信号

{

    IIC1_SDA_OUT();

    P0high(27)=1;       //SDA HIGH

    DelayUs(2);

    P0high(28)=1;       //SCL HIGH

    DelayUs(5);

    P0low(28)=1;        //SCL LOW

    DelayUs(5);

}


关键字:lpc1788  IO口  模拟IIC 引用地址:lpc1788IO口模拟IIC

上一篇:LPC1788 nand驱动
下一篇:LPC2478的硬件IIC使用

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

CortexM3 (NXP LPC1788)之WDT窗口看门狗定时器
看门狗定时器的用途是在微控制器进入错误状态后的一段合理时间内将其复位。看门狗被是能后,如果用户没有在预先设定的时间内喂狗,那么会产生一个看门狗事件。 看门狗定时器的寄存器有看门狗定时器常数计数器WDTC,每当在喂狗寄存器WDFEED中写入喂狗序列,WDTC中的值就会被写入看门狗定时计数器WDTV,WDTV中的值在看门狗时钟的驱动下递减。我们可以通过设置看门狗定时器报警中断寄存器WDWARNINT寄存器,当WDWARNINT中的值和WDTV中的值匹配时,可以形成中断。最重要的还有看门狗模式寄存器WDMOD,它控制着看门狗的使能,复位,更新模式以及超时标识和中断标志。此外还有一个看门狗定时器窗口寄存器WDWINDOW,它
[单片机]
CortexM3 (NXP <font color='red'>LPC1788</font>)之WDT窗口看门狗定时器
MSP430单片机控制IO口操作-LED灯闪烁
//******************************************************************************* // D13x Demo - 在上一节基础上改变系统时钟,观察LED灯的闪烁频率 // // 描述:通过改变系统时钟,来改变闪烁频率;通过 P1 异或 来取反 P1.5;软件循环延时 // ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k // // MSP430F13x // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // | | // | P1.5|-- LE
[单片机]
关于STM32GPIO口配置命令
以下代码摘自原子的stm32开发指南 //初始化 PB5 和 PE5 为输出口.并使能这两个口的时钟 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PB.5 推挽输出 GPIO_InitStructure.GPIO_M
[单片机]
STM32将PA13/PA14/PA15当做普通的IO口使用
在STM32要使用JTMS(PA13)、 JTCK(PA14)作为普通I/O口的时候,要在初始化前添加如下代码(顺序不能颠倒): RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 以下两句二选一: 使用GPIO_Remap_SWJ_Disable就不能使用SWD下载功能,需要再次下载的时候只能讲BO和B1全部拉低,或者使用串口下载;使用GPIO_Remap_SWJ_JTAGDisable可以使用SWD功能 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable , ENABLE); //Full SWJ Disabled (JTAG-DP +
[单片机]
STM32驱动PCF8563,使用模拟IIC
#ifndef PCF8563_CFG_H #define PCF8563_CFG_H ////////////////////////////////////////////////////////////////////////////////////// //------------使用包含的头文件 #include i2c_task.h #ifdef USE_MCU_STM32 #include delay_task.h #endif //---寄存器定义 #define PCF8563_REG_STATUS1 0x00 #define PCF8563_REG_STATUS2 0x01 #define PCF
[单片机]
STM8S独立按键IO口设置及按下事件问题
GPIO设置 按键检测 1 连续按键检测短按 关键代码 1 GPIO设置 STM8 I/O 口引脚配置表 Px_DDR Px_CR1 Px_CR2 I/O 方式 引脚状态 0 0 0 输入 悬浮输入 0 0 1 输入 上拉输入 0 1 0 输入 中断悬浮输入 0 1 1 输入 中断上拉输入 1 0 0 输出 开漏输出 1 1 0 输出 推挽输出 1 x 1
[单片机]
集成LCD图像控制器的微控制器
中国上海,2011年6月2日讯——恩智浦半导体NXP Semiconductors N.V.(Nasdaq: NXP)近日发布了LPC1788微控制器,这是业界首款采用ARM® Cortex™-M3技术且集成LCD控制器的MCU,目前已批量上市。LPC178x系列拥有最高96KB片上SRAM以及32位外接存储器接口,帮助客户轻松实现低成本、高质量的图像应用。LPC178x系列支持众多图像显示面板,是工业自动化、销售网点和医疗诊断应用的理想选择。 恩智浦微控制器产品线市场总监Jan Jaap Bezemer表示:“人机接口技术的最新发展正引入更多的LCD显示技术到 工业、零售和医疗领域。集成LCD控制器的LPC1
[单片机]
集成LCD图像控制器的微控制器
对于stm32GPIO口的一些补充
1.对于stm32的简单认识 1.stm32表示cortex-m内核的32位微处理器(MCU) 2.对于stm32的两种操作方法:操作寄存器和操作库函数 2-1:寄存器(register) 寄存器是信息储存的容器,在stm32中每一个寄存器是32位二进制组成,可以通过改变寄存器中的值来改变对stm32单片机的控制 3.stm32编程实际上就是对32位寄存器数据的修改; 2-2:库函数 ST公司的良心之作,可以缩短开发周期,实际上,也是对寄存器的操作,但是把一些方法进行了封装; 3.谈谈自己的看法吧:操作寄存器就像是对开手动挡汽车,操作库函数就像是开自动挡的汽车 2.关于推挽和开漏的简单认识 1.推挽(在一个三极管进行导通时,另外一
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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