欢迎来到51自学网!

51自学网

当前位置: 主页 > 软件教程 > 单片机教程 >

24C04扩展存储器C和汇编程序

时间:2018-08-22 11:50来源:网络整理 作者:51自学网
程序功能:统计单片机的开机次数。 #includereg52.h #includeintrins.h #define uint unsigned int #define uchar unsigned char sbit sda=P1^1; sbit scl=P1^0; uchar temp=0; uchar data_h,data_l; uchar state; const uchar tab[]={0xc0,0

程序功能:统计单片机的开机次数。

24C04扩展存储器C和汇编程序



#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sda=P1^1;
sbit scl=P1^0;
uchar temp=0;
uchar data_h,data_l;
uchar state;
const uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delayic(uint i)
{
    uchar j;
    while(i--)
    {
       for(j=0;j<120;j++);
    }
}
void delaym(uchar t)
{
    uchar i;
    for(i=0;i<t;i++);
}
void Start_I2c()
{
    sda=1;
    _nop_();
    scl=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    sda=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    scl=0;
    _nop_();
    _nop_();
}
void Stop_I2c()
{
    sda=0;
    _nop_();
    scl=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    sda=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
}
void cack(void)
{
    sda=0;
    _nop_();
    _nop_();
    _nop_();
     scl=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     scl=0;
    _nop_();
    _nop_();
}
void mnack(void)
{
    sda=1;
    _nop_();
    _nop_();
    _nop_();
     scl=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     scl=0;
     sda=0;
    _nop_();
    _nop_();
}
void wrbyt(uchar date)
{
    uchar i,j;
    j=0x80;
    for(i=0;i<8;i++)
    {
       if((date&j)==0)
       {
          sda=0;
          scl=1;
          delaym(1);
          scl=0;
       }
       else
       {
          sda=1;
          scl=1;
          delaym(1);
          scl=0;
          sda=0;
       }
       j=j>>1;
    }
}
uchar rdbyt(void)
{
    uchar a,c;
    scl=0;
    delaym(1);
    sda=1;
    delaym(1);
    for(c=0;c<8;c++)
    {
       scl=1;
       delaym(1);
       a=(a<<1)|sda;
       scl=0;
       delaym(1);
    }
    return a;
}
void read_data()
{
    Start_I2c();
    wrbyt(0xa0);
    cack();
    wrbyt(1);
    cack();
    Start_I2c();
    wrbyt(0xa1);
    cack();
    temp=rdbyt();
    mnack();
    Stop_I2c();
    delayic(50);
}
void write_data()
{
    if(temp<=10)
    {
       state=temp;
       state++;
       Start_I2c();
       wrbyt(0xa0);
       cack();
       wrbyt(1);
       cack();
       Stop_I2c();
       delayic(50);
    }
    else
    {
       temp=0;
       state=temp;
       Start_I2c();
       wrbyt(0xa0);
       cack();
       wrbyt(1);
       cack();
       wrbyt(state);
       cack();
       Stop_I2c();
       delayic(50);
    }
}
void dispaly(uchar count)
{
    uchar num;
    num=count;
    if(num>=5)
    {
       P2=0x00;
       delayic(400);
    }
    data_l=num%10;
    data_h=num/10;
    P2=0x01;
    P0=tab[data_h];
    delayic(150);
    P2=0x02;
    P0=tab[data_l];
    delayic(150);
}
void main()
{
    read_data();
    write_data();
    while(1)
    {
       dispaly(temp);
    }
}

汇编程序

;24c02的开机计数器,系统复位一次数码管加1

SDA24 EQU P1.1
SCLK24 EQU P1.0

(责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容