主题 : MINI2440-IIC-KEIL? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 107876
精华: 0
发帖: 37
金钱: 185 两
威望: 37 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2014-09-08
最后登录: 2019-01-29
楼主  发表于: 2015-05-05 10:32

 MINI2440-IIC-KEIL?

#include <S3C2440.H>

unsigned int buf;

void delay(void)
{
    int i;
    for(i=0;i<10000;i++);
}

void uart_init(void)
{
    GPHCON &=~((3<<4)|(3<<6));
    GPHCON |=((2<<4)|(2<<6));
    GPHUP =0x00;
    ULCON0 |=0x03;
    UCON0 =0x05;
    UBRDIV0 =(int)(50000000/115200/16)-1;
    URXH0 =0;
}

void putc(unsigned char c)
{
    UTXH0 =c;
    while(!(UTRSTAT0&(1<<2)));
}

void iic_init(void)
{
    GPECON  |=0xA0000000;
    GPHUP   |=0xC000;
    IICCON  |=((1<<7)|(1<<6)|(1<<5)|(15<<0));
    IICSTAT =0x10;
    IICLC = 7;    
}

unsigned char iic_ask(void)
{
    unsigned char i;
    i=IICSTAT&0x01;
    if(i)return 1;
    return 0;
}

unsigned char iic_check(void)
{
    unsigned char i;
    i=IICCON&0x10;
    if(i)return 0;
    return 1;
}

void eeprom_write(void)
{    
    unsigned char j;
    IICDS =0xA0;
    IICSTAT =0xF0;
    IICCON &=~0x10;    
    j=iic_check();while(j)j=iic_check();  
    j=iic_ask();while(j)j=iic_ask();
    delay();

    IICDS=0;
    IICCON &=~0x10;    
    j=iic_check();while(j)j=iic_check();
    j=iic_ask();while(j)j=iic_ask();
    delay();

    IICDS=buf;
    IICCON &=~0x10;    
    j=iic_check();while(j)j=iic_check();
    j=iic_ask();while(j)j=iic_ask();
    IICSTAT = 0xD0;
    IICCON  = 0xAF;
    delay();
}

unsigned char eeprom_read(unsigned char addr)
{
    unsigned char i,j;
    IICDS=0xA0;
    IICSTAT =0xF0;
    IICCON &=~0x10;    
    j=iic_check();while(j)j=iic_check();
    j=iic_ask();while(j)j=iic_ask();    
    delay();

    IICDS=0;
    IICCON &=~0x10;
    j=iic_check();while(j)j=iic_check();  
    j=iic_ask();while(j)j=iic_ask();
    delay();

    IICDS=0xA0;
    IICSTAT = 0xB0;
    IICCON &=~0x10;
    j=iic_check();while(j)j=iic_check();  
    j=iic_ask();while(j)j=iic_ask();
    delay();
        
    i=IICDS;
    IICCON &=~0x10;
    j=iic_check();while(j)j=iic_check();
    j=iic_ask();while(j)j=iic_ask();
    delay();

    IICCON &=~0x10;
    i=IICDS;
    delay();
    IICSTAT =0x90;
    IICCON =0xAF;    
    return i;
}

int main(void)
{
    unsigned char i=0;
    unsigned int j=0;
    uart_init();iic_init();
    while(1){
            for(j=0;j<120;j++){buf=j;eeprom_write();delay();
            i=eeprom_read(0);delay();putc(i);}};
}
级别: 新手上路
UID: 107876
精华: 0
发帖: 37
金钱: 185 两
威望: 37 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2014-09-08
最后登录: 2019-01-29
1楼  发表于: 2015-05-05 10:37
主函数中变量j不能大于127,否则程序运行不正常,但是只读或只写程序可以运行。
另外改变j变量定义属性也是一样不正常。
因为现在很少有KEIL的例子,自己实在找不到原因;
所以求大神帮助看一下代码,