久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

ATmega16利用TWI模塊讀寫24C02程序

作者:蕭文   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月01日   【字體:

/********************************************************
工程名稱:AT_Mega16_master
創(chuàng)建日期:2007.10.21
程序編寫:朱海峰
聯(lián)系方式:543376422(QQ)       13405100406(手機(jī))
AT24C02存儲一個字節(jié),并讀回校驗,正確蜂鳴器響一聲,不正確響兩聲
AT24C02地址:0XA0
 EEPROM地址:0X01
TWI工作方式:查詢方式
********************************************************/
#include <iom16v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
#define SLA_W               0xa0  //從機(jī)地址,主機(jī)寫操作
#define SLA_R               0xa1  //從機(jī)地址,主機(jī)讀操作
#define EE_address   0x01  //EEPROM地址     
#define Write_data   0x04  //寫入的數(shù)據(jù)  
#define Baud_set   100   //TWI波特率設(shè)置
#define P_value    0x03  //預(yù)分頻值
#define beep_on()   DDRD |= (1<<2);PORTD |= (1<<2);
#define beep_off()   DDRD |= (1<<2);PORTD &= ~(1<<2);
//TWI讀寫操作公共步驟
#define ST_FAIL    0 //出錯狀態(tài)
#define ST_START   1 //START狀態(tài)檢查
#define ST_SLAW    2 //SLAW狀態(tài)檢查
#define ST_WADDR   3 //ADDR狀態(tài)檢查
//TWI讀操作步驟
#define ST_RESTART   4 //RESTART狀態(tài)檢查
#define ST_SLAR    5 //SLAR狀態(tài)檢查
#define ST_RDATA   6 //讀取數(shù)據(jù)狀態(tài)檢查,循環(huán)n字節(jié)
//TWI寫操作步驟
#define ST_WDATA   7 //寫數(shù)據(jù)狀態(tài)檢查,循環(huán)n字節(jié)

#define FAIL_MAX   20 //重試次數(shù)最大值
/**********************I2C狀態(tài)定義*************************/
/************************主機(jī)發(fā)送狀態(tài)碼********************/
#define TW_START    0x08 //START已發(fā)送
#define TW_REP_START   0x10 //重復(fù)START已發(fā)送
#define TW_MT_SLA_ACK   0x18 //SLA+W 已發(fā)送收到ACK
#define TW_MT_SLA_NACK   0x20 //SLA+W 已發(fā)送接收到NOT ACK
#define TW_MT_DATA_ACK   0x28 //數(shù)據(jù)已發(fā)送接收到ACK
#define TW_MT_DATA_NACK   0x30 //數(shù)據(jù)已發(fā)送接收到NOT ACK
#define TW_MT_ARB_LOST   0x38 //SLA+W 或數(shù)據(jù)的仲裁失敗
/*************************主機(jī)接收狀態(tài)碼*****************/
//#define TW_START    0x08 //START已發(fā)送
//#define TW_REP_START   0x10 //重復(fù)START已發(fā)送
#define TW_MR_ARB_LOST   0x38 //SLA+R 或NOT ACK 的仲裁失敗
#define TW_MR_SLA_ACK   0x40 //SLA+R 已發(fā)送接收到ACK
#define TW_MR_SLA_NACK   0x48 //SLA+R 已發(fā)送接收到NOT ACK
#define TW_MR_DATA_ACK   0x50 //接收到數(shù)據(jù)ACK 已返回
#define TW_MR_DATA_NACK   0x58 //接收到數(shù)據(jù)NOT ACK已返回
/************************從機(jī)接收狀態(tài)碼******************
#define TW_SR_SLA_ACK   0x60 //自己的SLA+W 已經(jīng)被接收ACK已返回
#define TW_SR_ARB_LOST_SLA_ACK 0x68 //SLA+R/W 作為主機(jī)的仲裁失敗;自己的SLA+W 已經(jīng)被接收ACK 已返回
#define TW_SR_GCALL_ACK   0x70 //接收到廣播地址ACK 已返回
#define TW_SR_ARB_LOST_GCALL_ACK 0x78 //SLA+R/W 作為主機(jī)的仲裁失敗;接收到廣播地址ACK已返回
#define TW_SR_DATA_ACK   0x80 //以前以自己的SLA+W被尋址;數(shù)據(jù)已經(jīng)被接收ACK已返回
#define TW_SR_DATA_NACK   0x88 //以前以自己的SLA+W被尋址;數(shù)據(jù)已經(jīng)被接收NOT ACK已返回
#define TW_SR_GCALL_DATA_ACK 0x90 //以前以廣播方式被尋址;數(shù)據(jù)已經(jīng)被接收ACK已返回
#define TW_SR_GCALL_DATA_NACK 0x98 //以前以廣播方式被尋址;數(shù)據(jù)已經(jīng)被接收NOT ACK已返回
#define TW_SR_STOP    0xA0 //在以從機(jī)工作時接收到STOP或重復(fù)START
/*************************從發(fā)送狀態(tài)碼*******************
#define TW_ST_SLA_ACK   0xA8 //自己的SLA+R 已經(jīng)被接收ACK 已返回
#define TW_ST_ARB_LOST_SLA_ACK 0xB0 //SLA+R/W 作為主機(jī)的仲裁失敗;自己的SLA+R 已經(jīng)被接收ACK 已返回
#define TW_ST_DATA_ACK   0xB8 //TWDR 里數(shù)據(jù)已經(jīng)發(fā)送接收到ACK
#define TW_ST_DATA_NACK   0xC0 //TWDR 里數(shù)據(jù)已經(jīng)發(fā)送接收到NOT ACK
#define TW_ST_LAST_DATA   0xC8 //TWDR 的一字節(jié)數(shù)據(jù)已經(jīng)發(fā)送(TWAE = “0”);接收到ACK
/****************************其它狀態(tài)碼*****************
#define TW_NO_INFO    0xF8 //沒有相關(guān)的狀態(tài)信息;TWINT = “0”
#define TW_BUS_ERROR   0x00 //由于非法的START 或STOP 引起的總線錯誤
 
/******************************************************/
void Chip_init(void);
void TWI_init(void);
void Delay_ms(uint ms);
/*****************************************************/
void main (void)
{
  uchar temp;
  CLI();
  Chip_init();
  TWI_init();
  Delay_ms(10);
  while(1)
  {
  beep_on();
  Delay_ms(1000);
  beep_off();
  Delay_ms(1000);
/************將0x04寫入AT24C02內(nèi)部的以0X01為地址的存儲區(qū)****************/
  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
  while (!(TWCR & (1<<TWINT)));  //0x08
  TWDR = SLA_W;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));  //0x18
  TWDR = EE_address;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));  //0x28
  TWDR = Write_data;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));  //0x28
  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
  Delay_ms(50);
/*********從AT24C02內(nèi)部的以0X01為地址的存儲區(qū)讀出剛剛寫入的數(shù)據(jù)*************/
  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
  while (!(TWCR & (1<<TWINT)));  //0x08
  TWDR = SLA_W;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));  //0x18
  TWDR = EE_address;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT))); //0x28
  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
  while (!(TWCR & (1<<TWINT)));  //0x10
  TWDR = SLA_R;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));  //0x40
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));  //0x58
  temp = TWDR;
  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
  if (temp == Write_data)
  {
      beep_on();
      Delay_ms(1000);
      beep_off();
      Delay_ms(1000);
  }
  else
  {
    beep_on();
   Delay_ms(1000);
   beep_off();
   Delay_ms(1000);
   beep_on();
   Delay_ms(1000);
   beep_off();
   Delay_ms(1000);
  }
  for(;;)
  NOP();
  }
}
/*****************************************************
函數(shù)名:Chip_init
作  用:芯片的初始化
*****************************************************/
void Chip_init()
{
  DDRD = 0X04;   //00001000---PD2:蜂鳴器   
 PORTD = 0X00;   //
}/****************************************************
函數(shù)名:TWI_init
作  用:TWI接口的初始化
*****************************************************/
void TWI_init(void)
{
     TWAR = 0x00;         //主機(jī)模式,該地址無效
     TWCR = 0x00;         //關(guān)閉TWI模塊
  TWBR = Baud_set;        //100
  TWSR = P_value;         //64分頻
}
/****************************************************/
void Delay_ms(uint ms)
{
  uint i,j;
 for(;ms>0;ms--)
  for(i = 0;i<100;i++)
  ;
}
/*****************************

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 99精品久久久久 | 久久51 | 欧美日韩在线成人 | 午夜合集| 69精品久久久久久 | 一级黄色片免费在线观看 | 欧美一级一 | 99在线资源| 成人久久18免费网站麻豆 | 国产农村妇女毛片精品久久麻豆 | 日韩一区中文字幕 | 黄色电影在线免费观看 | 91精品国产美女在线观看 | 九九热精品视频 | 99热激情 | 午夜影院网站 | 久久久久久久夜 | 欧美在线国产精品 | 美女二区 | 久久国产精品一区 | 91免费视频 | 亚洲字幕在线观看 | aaa在线观看 | 欧美一区二区三区视频 | 天天综合久久网 | 九色91视频 | 刘亦菲国产毛片bd | 亚洲一区在线免费观看 | 综合色在线 | 欧美日韩精品专区 | 久久精品毛片 | 久久蜜桃资源一区二区老牛 | 极品久久 | 涩涩视频在线观看免费 | 国产 日韩 欧美 中文 在线播放 | 欧美中文字幕一区二区三区亚洲 | 成人二区 | 91玖玖| 粉嫩av在线 | 精品一区二区三区在线观看国产 | 国产精品1区2区 |