AVR128的程序——24C02记录复位次数

发布者:冰山火影1977最新更新时间:2016-03-04 来源: eefocus关键字:AVR128  24C02  复位次数 手机看文章 扫描二维码
随时随地手机看文章
#include  
#include  
#define uchar unsigned char
#define uint  unsigned int
  
#define rd_device_add 0xA1 
#define wr_device_add 0xA0  
 
#define START 0x08 
#define RE_START 0x10 
#define MT_SLA_ACK 0x18 
#define MT_SLA_NOACK 0x20 
#define MT_DATA_ACK  0x28 
#define MT_DATA_NOACK 0x30 
#define MR_SLA_ACK  0x40 
#define MR_SLA_NOACK 0x48 
#define MR_DATA_ACK 0x50 
#define MR_DATA_NOACK 0x58 
 
#define Start()         (TWCR=(1<
#define Stop()          (TWCR=(1<
#define Wait()          {while(!(TWCR&(1<
#define TestAck()       (TWSR&0xf8) 
#define SetAck()        (TWCR|=(1<
#define SetNoAck()      (TWCR&=~(1<
#define Twi()           (TWCR=(1<
#define Write8Bit(x)    {TWDR=(x);TWCR=(1<
  
void Delayms(uint MS);   
void display(uchar FirstBit,uchar Num); 
void i2cini(void) ; 
void delay_nus(unsigned int n);     
void delay_nms(unsigned int n);   
 
unsigned char i2c_Write(unsigned char Wdata,unsigned char RomAddress) ;  
unsigned char i2c_Read(unsigned char RomAddress)  
uchar TempData[8];
uchar WeiMa[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar led_discode[11]={0xc0,0xf9,0xa4,0xb0,0x99,
                       0x92,0x82,0xf8,0x80,0x90,0xff};    
 
void main(void) 
{     
uchar i;
DDRA=0XFF;
PORTA=0XFF;
DDRC=0XFF;                   
PORTC=0XFF;
 
DDRF|=0X0E;
PORTF|=0X0E;
PORTF&=0xF7;             
 
DDRB |=0X10;          
PORTB|=0X10;  
     i2cini(); 
 
i=i2c_Read(0x03);
i++;
i=i;
i2c_Write(i,0x03);
     TempData[0] = led_discode[i];  
     while(1)
{
  display(0,1);
}  
 
void i2cini(void) 
     TWBR=0x20; 
     TWCR=0x04;
TWSR=0;
 
unsigned char i2c_Write(unsigned char Wdata,unsigned char RomAddress)  
          unsigned char i; 
          Start();//I2C启动 
          Wait(); 
          if(TestAck()!=START) return 1;//ACK 
 
          Write8Bit(wr_device_add);//写I2C从器件地址和写方式 
          Wait(); 
          if(TestAck()!=MT_SLA_ACK) return 1;//ACK 
 
          Write8Bit(RomAddress);//写24C02的ROM地址 
          Wait(); 
          if(TestAck()!=MT_DATA_ACK) return 1;//ACK 
 
          Write8Bit(Wdata);//写数据到24C02的ROM 
          Wait(); 
          if(TestAck()!=MT_DATA_ACK) return 1;//ACK
          
          Stop();//I2C停止 
            for(i=0;i<250;i++); 
          return 0; 
 
unsigned char i2c_Read(unsigned char RomAddress)  
 
           unsigned char temp; 
           Start();//I2C启动 
           Wait(); 
           if (TestAck()!=START) return 1;//ACK  
           
           Write8Bit(wr_device_add);//写I2C从器件地址和写方式 
           Wait();  
           if (TestAck()!=MT_SLA_ACK) return 1;//ACK //
  // 
           Write8Bit(RomAddress);//写24C02的ROM地址 
           Wait(); 
           if (TestAck()!=MT_DATA_ACK) return 1; //?
  //data1=TestAck();
           Start();//I2C重新启动 
           Wait(); 
           if (TestAck()!=RE_START)  return 1; 
  
           Write8Bit(rd_device_add);//写I2C从器件地址和读方式 
           Wait(); 
           if(TestAck()!=MR_SLA_ACK)  return 1;//ACK 
   
           Twi();//启动主I2C读方式 
           Wait(); 
           if(TestAck()!=MR_DATA_NOACK) return 1;//ACK         
           temp=TWDR;//读取I2C接收数据 
           Stop();//I2C停止 
           return temp; 
 
 
void delay_nus(unsigned int n)       //N us延时函数
{
   unsigned int i=0;
   for (i=0;i
   asm("nop");
}
  
void delay_nms(unsigned int n)       //N ms延时函数
{
   unsigned int i=0,j=0;
   for (i=0;i
   for (j=0;j<1140;j++);
}
 
void Delayms(uint MS)  
{
     uint i,j;
     for( i=0;i
     for(j=0;j<1141;j++);
}
 
void display(uchar FirstBit,uchar Num)
{
    unsigned char i;  
for(i=0;i  
{
PORTC=led_discode[10];                       
   PORTA=WeiMa[i+FirstBit];       
   PORTC=TempData[i];                     
Delayms(5);    
}   
}
关键字:AVR128  24C02  复位次数 引用地址:AVR128的程序——24C02记录复位次数

上一篇:AVR128的程序——12864液晶与ds1302与ds18b20的综合运用
下一篇:AVR128的程序——1602液晶显示

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

51单片机系列——I2C通信方式——24C02(E2PROM)的应用
仿真电路如下: 代码如下: i2c.h #ifndef _I2C_H //写头文件的固定格式 #define _I2C_H //写头文件的固定格式 #include reg52.h sbit SCL=P1^2; //E2PROM24C02的引脚定义 sbit SDA=P1^3; //E2PROM24C02的引脚定义 sbit WP=P1^4; //读写保护 unsigned char I2CSendByte(unsigned char dat); unsigned char I2CReadByte(); void I2CStop(); void I2CStart(); void At24c02Write
[单片机]
51单片机系列——I2C通信方式——<font color='red'>24C02</font>(E2PROM)的应用
24C02中写入当前的时间
/* //1、向24C02中写入当前的时间,下次开机就会从 上次断电时的时间开始计时 //2、重点掌握IIC总线几个常用信号的写法; // */ #include reg51.h #define uint unsigned int #define uchar unsigned char sbit sda=P1^0; sbit scl=P1^1; uchar num1,num1,flag1,flag2,sec; void delay(); void delayms(uint z); void start(); void stop(); void sck(); void writebyte(uchar date); ucha
[单片机]
STM32编程之软件模拟IIC对24C02存储器读写操作
1、主程序 #include stm32f10x_conf.h #include led.h #include key.h #include usart.h #include lcd.h #include 24cxx.h #include myiic.h #include delay.h u8 tabel = write data is:0 1 2 3 4 5 6 7 8 9 ; /* 程序功能:STM32实现24C02读写操作 当按下KEY1时,向24C02写入数组中的数据; 当按下KEY2时,从24C02中读出数据到数组。 用LCD液晶显示操作过程; 用串口显示写入和读
[单片机]
PIC单片机-普通IO口模拟I2C总线对24C02进行读写操作
使用PIC单片机的普通IO口模拟I2C总线,对24C02进行读写操作。其中,总线定义为: #define IIC_SCLK RC3 //24C02时钟线 #define IIC_SDAT RC4 //24C02数据线 将跳线帽P11短接至24C02方向,将跳线帽P6段接至IIC方向。 I2C 总线协议规定任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器,数据传送是由产生串行时钟和所有起始停止信号的主器件控制的,主器件和从器件都可以作为发送器或接收器。 I2C 总线协议定义如下: 1、只有在总线空闲时才允许启动数据传送 2、在数据传送过程中当时钟线为高电平时数据线必
[单片机]
51单片机24c02的使用
#include reg52.h #include intrins.h #define AddWr 0xae //Write Address #define AddRd 0xaf //Read Address //全局变量 sbit Sda=P1^2; //定义总线连接端口 sbit Scl=P1^1; sbit WP=P1^0;//No connect here void mDelay(unsigned char j)//A normal delay { unsigned int i; for(;j 0;j--) { for(i=0;i 125;i++) {;} } } //启动 IIC总线 void
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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