www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]   在之前我講過I2C協(xié)議,也給出了簡單例子,這次利用I2C協(xié)議,我們可以做一個小實驗,讓單片機記錄單片機開機次數(shù),也就是機器使用次數(shù)。  // 內(nèi)容:每次開機都將次數(shù)加1 并存儲到EEPROM。這樣就能

 

  在之前我講過I2C協(xié)議,也給出了簡單例子,這次利用I2C協(xié)議,我們可以做一個小實驗,讓單片機記錄單片機開機次數(shù),也就是機器使用次數(shù)。

  // 內(nèi)容:每次開機都將次數(shù)加1 并存儲到EEPROM。這樣就能直觀的看到機器的使用 //

  // 次數(shù)用P1口LED做為顯示,次數(shù)大于256是將溢出,按復位模擬開機 //

  // 或者直接通過開關開機 //

 

  #include //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

  #include //包含NOP空指令函數(shù)_nop_();

  #define AddWr 0xae //寫數(shù)據(jù)地址,需要參考24c02芯片文檔

  #define AddRd 0xaf //讀數(shù)據(jù)地址

  sbit Sda=P1^2; //定義總線連接端口

  sbit Scl=P1^1;

  sbit WP=P1^0; //寫保護,這里不使用

  /*------------------------------------------------

  延時程序

  ------------------------------------------------*/

  void mDelay(unsigned char j)

  {

  unsigned int i;

  for(;j>0;j--)

  {

  for(i=0;i<125;i++)

  {;}

  }

  }

  /*------------------------------------------------

  啟動IIC總線

  ------------------------------------------------*/

  void Start(void)

  {

  Sda=1;

  _nop_();_nop_();

  Scl=1;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  Sda=0;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  Scl=0;

  }

  /*------------------------------------------------

  停止IIC總線

  ------------------------------------------------*/

  void Stop(void)

  {

  Sda=0;

  _nop_();

  Scl=1;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  Sda=1;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  Scl=0;

  }

  /*------------------------------------------------

  應答IIC總線

  ------------------------------------------------*/

  void Ack(void)

  {

  Sda=0;

  _nop_();_nop_();_nop_();

  Scl=1;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  Scl=0;

  _nop_();_nop_();

  }

  /*------------------------------------------------

  非應答IIC總線

  ------------------------------------------------*/

  void NoAck(void)

  {

  Sda=1;

  _nop_();_nop_();_nop_();

  Scl=1;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  Scl=0;

  _nop_();_nop_();

  }

  /*------------------------------------------------

  發(fā)送一個字節(jié)

  ------------------------------------------------*/

  void Send(unsigned char Data)

  {

  unsigned char BitCounter=8;

  unsigned char temp;

  do

  {

  temp=Data;

  Scl=0;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  if((temp&0x80)==0x80)

  Sda=1;

  else

  Sda=0;

  Scl=1;

  temp=Data<<1;

  Data=temp;

  BitCounter--;

  }

  while(BitCounter);

  Scl=0;

  }

  /*------------------------------------------------

  讀入一個字節(jié)并返回

  ------------------------------------------------*/

  unsigned char Read(void)

  {

  unsigned char temp=0;

  unsigned char temp1=0;

  unsigned char BitCounter=8;

  Sda=1;

  do

  {

  Scl=0;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  Scl=1;

  _nop_();_nop_();_nop_();_nop_();_nop_();

  if(Sda)

  temp=temp|0x01;

  else

  temp=temp&0xfe;

  if(BitCounter-1)

  {

  temp1=temp<<1;

  temp=temp1;

  }

  BitCounter--;

  }

  while(BitCounter);

  return(temp);

  }

  /*------------------------------------------------

  寫入數(shù)據(jù)

  ------------------------------------------------*/

  void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)

  {

  unsigned char i;

  unsigned char *PData;

  PData=Data;

  for(i=0;i

  {

  Start();

  Send(AddWr); //寫入芯片地址

  Ack();

  Send(Address+i);//寫入存儲地址

  Ack();

  Send(*(PData+i));//寫數(shù)據(jù)

  Ack();

  Stop();

  mDelay(20);

  }

  }

  /*------------------------------------------------

  讀出數(shù)據(jù)

  ------------------------------------------------*/

  void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)

  {

  unsigned char i;

  unsigned char *PData;

  PData=Data;

  for(i=0;i

  {

  Start(); //寫入芯片地址

  Send(AddWr);

  Ack();

  Send(Address+i);//寫入存儲地址

  Ack();

  Start();

  Send(AddRd); //讀入地址

  Ack();

  *(PData+i)=Read();//讀數(shù)據(jù)

  Scl=0;

  NoAck();

  Stop();

  }

  }

  //以上程序是EEPROM24C02程序部分,IIC協(xié)議Scl=0;

  /*------------------------------------------------

  主程序

 

------------------------------------------------*/

//下載程序后,記錄下LED2~LED9的狀態(tài),然后按下復位鍵(相當于開機),觀察LED2~LED9的狀態(tài)改變

void main()

 

{

unsigned char Number[1];

unsigned char i;

WP=0;//寫保護關掉

RdFromROM(Number,0,1);//調(diào)用存儲數(shù)據(jù) 從地址0開始寫一個數(shù)據(jù)

Number[0]++;

WrToROM(Number,0,1);//寫入24c02

P1 = ~ Number[0];//在P1口上顯示 反向顯示 LED亮代表1

while(1)

{

}

}

//用戶可以自己把程序移植到數(shù)碼管顯示或者液晶顯示 ,可以直觀的看到數(shù)字 ,也可以定義int類型 用于計數(shù)萬次以上

 

 

本站聲明: 本文章由作者或相關機構(gòu)授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

8位單片機在嵌入式設計領域已經(jīng)成為半個多世紀以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復雜,8位單片機依然不斷發(fā)展,積極應對新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機系列,配備了先進的獨立...

關鍵字: 單片機 嵌入式 CPU

在嵌入式系統(tǒng)開發(fā)中,程序燒錄是連接軟件設計與硬件實現(xiàn)的關鍵環(huán)節(jié)。當前主流的單片機燒錄技術已形成ICP(在電路編程)、ISP(在系統(tǒng)編程)、IAP(在應用編程)三大技術體系,分別對應開發(fā)調(diào)試、量產(chǎn)燒錄、遠程升級等不同場景。...

關鍵字: 單片機 ISP ICP IAP 嵌入式系統(tǒng)開發(fā)

在嵌入式系統(tǒng)開發(fā)中,看門狗(Watchdog Timer, WDT)是保障系統(tǒng)可靠性的核心組件,其初始化時機的選擇直接影響系統(tǒng)抗干擾能力和穩(wěn)定性。本文從硬件架構(gòu)、軟件流程、安全規(guī)范三個維度,系統(tǒng)分析看門狗初始化的最佳實踐...

關鍵字: 單片機 看門狗 嵌入式系統(tǒng)

在人工智能飛速發(fā)展的當下,大模型展現(xiàn)出了強大的語言理解與生成能力。然而,要讓這些模型真正在實際場景中發(fā)揮作用,與外部豐富的工具及數(shù)據(jù)源順暢交互至關重要。在此背景下,Model Context Protocol(MCP),...

關鍵字: 人工智能 大模型 協(xié)議

本文中,小編將對單片機予以介紹,如果你想對它的詳細情況有所認識,或者想要增進對它的了解程度,不妨請看以下內(nèi)容哦。

關鍵字: 單片機 開發(fā)板 Keil

隨著單片機系統(tǒng)越來越廣泛地應用于消費類電子、醫(yī)療、工業(yè)自動化、智能化儀器儀表、航空航天等各領域,單片機系統(tǒng)面臨著電磁干擾(EMI)日益嚴重的威脅。電磁兼容性(EMC)包含系統(tǒng)的發(fā)射和敏感度兩方面的問題。

關鍵字: 單片機 電磁兼容

以下內(nèi)容中,小編將對單片機的相關內(nèi)容進行著重介紹和闡述,希望本文能幫您增進對單片機的了解,和小編一起來看看吧。

關鍵字: 單片機 復位電路

在這篇文章中,小編將為大家?guī)韱纹瑱C的相關報道。如果你對本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關鍵字: 單片機 異常復位

今天,小編將在這篇文章中為大家?guī)韱纹瑱C的有關報道,通過閱讀這篇文章,大家可以對它具備清晰的認識,主要內(nèi)容如下。

關鍵字: 單片機 仿真器

單片機將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關情況以及信息有所認識和了解,詳細內(nèi)容如下。

關鍵字: 單片機 中斷 boot
關閉