⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 30.c

📁 这是我大学4年来做过的竞赛以及老师的科研项目所积累下来的c51源代码
💻 C
字号:
#include <dos.h> 
    #include <stdio.h> 
    #include <conio.h> 
    #include <bios.h> 

    #define DELAY_TIME 10 
    #define FALSE 0 
    #define TRUE 1 
    const unsigned char SCL_PIN=0x01; 
    const unsigned char SDA_OIN=0x02; 

    static void SET_SCL(void) 
    { 
        asm{ 
            mov dx,0x378 
            in  ax,dx 
            or  ax,SCL_PIN            //将SCL置1 
            out dx,ax 
        } 
    } 

    static void CLR_SCL(void) 
    { 
        asm{ 
            mov dx,0x378 
            in  ax,dx 
            or  ax,0xff-SCL_PIN       //将SCL置0 
            out dx,ax 
        } 
    } 

    static void SET_SDA(void) 
    { 
        asm{ 
            mov dx,0x378 
            in  ax,dx 
            or  ax,SDA_PIN            //将SDA置1 
            out dx,ax 
        } 
    } 

    static void CLR_SDA(void) 
    { 
        asm{ 
            mov dx,0x378 
            in  ax,dx 
            or  ax,0xff-SDA_PIN        //将SDA置0 
            out dx,ax 
        } 
    } 

    void DELAY(int t=DELAY_TIME)      //延时子程序 
    { 
        for(int i=0;i<t;i++); 
    } 

    void IIC_Start(void)                   //启动I2C总线 
    { 
                                       //在SCL为高电平时,使SDA出现一个负跳变 
        SET_SDA(); 
        SET_SCL(); 
        DELAY(); 
        CLR_SDA(); 
        DELAY(); 
        CLR_SCL(); 
        DELAY(); 
    } 

    void IIC_Stop(void)                  //终止I2C总线 
    { 
                                      //在SCL为高电平时,使SDA出现一个正跳变 
        CLR_SDA(); 
        SET_SCL(); 
        DELAY(); 
        SET_SDA(); 
        DELAY(); 
        CLR_SCL(); 
        DELAY(); 
    } 

    void SEND_0(void)                  //发送BIT0 
    { 
                                      //在SCL为高电平时,使SDA保持低电平 
        CLR_SDA(); 
        SET_SCL(); 
        DELAY(); 
        CLR_SCL(); 
        DELAY(); 
    } 

    void SEND_1(void)                 //发送BIT1 
    { 
                                     //在SCL为高电平时,使SDA保持高电平 
        SET_SDA(); 
        SET_SCL(); 
        DELAY(); 
        CLR_SCL(); 
        DELAY(); 
    } 

    int Check_Acknowledge(void) 
    { 
                                     //发送完每个字节检查SLAVE的应答信号 
        SET_SDA();                   //主器件释放SDA线 
        SET_SCL(); 
        DELAY(DELAY_TIME/2); 
        unsigned char b=inportb(0x378);    //采样信号线 
        DELAY(DELAY_TIME/2); 
        CLR_SCL(); 
        DELAY(); 
        if(b&0xSDA_PIN)               //SALVE返回1 
            return FLASE; 
        return TRUE; 
    } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -