亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? f31x_spi0_eeprom_polled_mode.c

?? C8051F31系列單片機的例子
?? C
?? 第 1 頁 / 共 2 頁
字號:
// P2.1  -  Unassigned,  Open-Drain, Digital
// P2.2  -  Unassigned,  Open-Drain, Digital
// P2.3  -  Unassigned,  Open-Drain, Digital
//
// P3.3  -  LED,         Push-Pull,  Digital
//
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
   P0MDOUT   = 0x1D;
   P0SKIP    = 0x80;
   P3MDOUT   = 0x08;
   XBR0      = 0x03;
   XBR1      = 0x40;
}

//-----------------------------------------------------------------------------
// TIMER2_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Initializes Timer2 to be clocked by SYSCLK for use as a delay timer.
//
//-----------------------------------------------------------------------------
void TIMER2_Init (void)
{
   CKCON    |= 0x10;
}

//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configures the UART0 using Timer1, for <BAUDRATE> and 8-N-1. Once this is
// set up, the standard printf function can be used to output data.
//
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
   SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits
   if (SYSCLK/BAUDRATE/2/256 < 1)
   {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
      CKCON |=  0x08;
   } 
   else if (SYSCLK/BAUDRATE/2/256 < 4)
   {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x09;
   }
   else if (SYSCLK/BAUDRATE/2/256 < 12)
   {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   } else
   {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   }

   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1
   TI0 = 1;                            // Indicate TX0 ready
}

//-----------------------------------------------------------------------------
// SPI0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configures SPI0 to use 4-wire Single-Master mode. The SPI timing is 
// configured for Mode 0,0 (data centered on first edge of clock phase and 
// SCK line low in idle state). The SPI clock is set to 1.75 MHz. The NSS pin 
// is set to 1.
//
//-----------------------------------------------------------------------------
void SPI0_Init()
{
   SPI0CFG   = 0x40;
   SPI0CN    = 0x0D;
   
   // The equation for SPI0CKR is (SYSCLK/(2*F_SCK_MAX))-1, but this yields
   // a SPI frequency that is slightly more than 2 MHz. But, 2 MHz is the max 
   // frequency spec of the EEPROM used here. So, the "-1" term is omitted 
   // in the following usage:
   SPI0CKR   = (SYSCLK/(2*F_SCK_MAX));
}

//-----------------------------------------------------------------------------
// Init_Device
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Calls all device initialization functions.
//
//-----------------------------------------------------------------------------
void Init_Device (void)
{
   PCA0_Init ();
   OSCILLATOR_Init ();
   PORT_Init ();
   TIMER2_Init ();
   UART0_Init ();
   SPI0_Init ();
}

//-----------------------------------------------------------------------------
// Support Subroutines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Delay_us
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 1. time_us - time delay in microseconds
//                   range: 1 to 255
//
// Creates a delay for the specified time (in microseconds) using TIMER2. The 
// time tolerance is approximately +/-50 ns (1/SYSCLK + function call time).
//
//-----------------------------------------------------------------------------
void Delay_us (BYTE time_us)
{
   TR2   = 0;                          // Stop timer
   TF2H  = 0;                          // Clear timer overflow flag
   TMR2  = -( (UINT)(SYSCLK/1000000) * (UINT)(time_us) );
   TR2   = 1;                          // Start timer
   while (!TF2H);                      // Wait till timer overflow occurs
   TR2   = 0;                          // Stop timer
}

//-----------------------------------------------------------------------------
// Delay_ms
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 1. time_ms - time delay in milliseconds
//                   range: 1 to 255
//
// Creates a delay for the specified time (in milliseconds) using TIMER2. The 
// time tolerance is approximately +/-50 ns (1/SYSCLK + function call time).
//
//-----------------------------------------------------------------------------
void Delay_ms (BYTE time_ms)
{
   BYTE i;

   while(time_ms--)
      for(i = 0; i< 10; i++)           // 10 * 100 microsecond delay
         Delay_us (100);
}

//-----------------------------------------------------------------------------
// EEPROM_Write
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 1. address - the destination EEPROM address.
//                   range: 0 to EEPROM_CAPACITY
//                2. value - the value to write.
//                   range: 0x00 to 0xFF
//
// Writes one byte to the specified address in the EEPROM. This function polls
// the EEPROM status register after the write operation, and returns only after
// the status register indicates that the write cycle is complete. This is to
// prevent from having to check the status register before a read operation.
//
//-----------------------------------------------------------------------------
void EEPROM_Write (UINT address, BYTE value)
{
   // Writing a byte to the EEPROM is a five-step operation.
   
   // Step1: Set the Write Enable Latch to 1
   NSSMD0   = 0;                       // Step1.1: Activate Slave Select
   SPI0DAT  = EEPROM_CMD_WREN;         // Step1.2: Send the WREN command
   while (!SPIF);                      // Step1.3: Wait for end of transfer
   SPIF     = 0;                       // Step1.4: Clear the SPI intr. flag
   NSSMD0   = 1;                       // Step1.5: Deactivate Slave Select
   Delay_us (1);                       // Step1.6: Wait for at least 
                                       //          T_NSS_DISABLE_MIN
   // Step2: Send the WRITE command
   NSSMD0   = 0;
   SPI0DAT  = EEPROM_CMD_WRITE;
   while (!SPIF);
   SPIF     = 0;
   
   // Step3: Send the EEPROM destination address (MSB first)
   SPI0DAT  = (BYTE)((address >> 8) & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   SPI0DAT  = (BYTE)(address & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   
   // Step4: Send the value to write
   SPI0DAT  = value;
   while (!SPIF);
   SPIF     = 0;
   NSSMD0   = 1;
   Delay_us (1);
   
   // Step5: Poll on the Write In Progress (WIP) bit in Read Status Register
   do
   {
      NSSMD0   = 0;                    // Activate Slave Select
      SPI0DAT  = EEPROM_CMD_RDSR;      // Send the Read Status Register command
      while (!SPIF);                   // Wait for the command to be sent out
      SPIF     = 0;
      SPI0DAT  = 0;                    // Dummy write to output serial clock
      while (!SPIF);                   // Wait for the register to be read
      SPIF     = 0;
      NSSMD0   = 1;                    // Deactivate Slave Select after read
      Delay_us (1);
   } while( (SPI0DAT & 0x01) == 0x01 );
}

//-----------------------------------------------------------------------------
// EEPROM_Read
//-----------------------------------------------------------------------------
//
// Return Value : The value that was read from the EEPROM
//                   range: 0x00 to 0xFF
// Parameters   : 1. address - the source EEPROM address.
//                   range: 0 to EEPROM_CAPACITY
//
// Reads one byte from the specified EEPROM address.
//
//-----------------------------------------------------------------------------
BYTE EEPROM_Read (UINT address)
{
   // Reading a byte from the EEPROM is a three-step operation.
   
   // Step1: Send the READ command
   NSSMD0   = 0;                       // Activate Slave Select
   SPI0DAT  = EEPROM_CMD_READ;
   while (!SPIF);
   SPIF     = 0;
   
   // Step2: Send the EEPROM source address (MSB first)
   SPI0DAT  = (BYTE)((address >> 8) & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   SPI0DAT  = (BYTE)(address & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   
   // Step3: Read the value returned
   SPI0DAT  = 0;                       // Dummy write to output serial clock
   while (!SPIF);                      // Wait for the value to be read
   SPIF     = 0;
   NSSMD0   = 1;                       // Deactivate Slave Select
   Delay_us (1);
   
   return SPI0DAT;
}

//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人片在线观看中文| 国产suv精品一区二区883| 麻豆一区二区在线| 大胆欧美人体老妇| 日韩视频在线观看一区二区| 国产精品短视频| 美女精品一区二区| 91精品国产乱码久久蜜臀| 国产日韩精品视频一区| 亚洲线精品一区二区三区八戒| 免费看精品久久片| 欧美在线免费观看视频| 国产日韩欧美不卡在线| 老司机免费视频一区二区| 91国偷自产一区二区使用方法| 久久综合av免费| 日本美女一区二区三区视频| 99riav一区二区三区| 亚洲精品一区二区三区在线观看 | av在线一区二区| 精品国产精品网麻豆系列| 三级精品在线观看| 欧洲av一区二区嗯嗯嗯啊| 国产精品短视频| 波波电影院一区二区三区| 26uuu色噜噜精品一区| 日本伊人午夜精品| 欧美精品三级在线观看| 亚洲成人免费影院| 欧美日韩一二区| 性久久久久久久| 6080yy午夜一二三区久久| 曰韩精品一区二区| 91激情五月电影| 亚洲成人三级小说| 欧美一二三区在线| 久久激五月天综合精品| 欧美成人猛片aaaaaaa| 免费成人你懂的| 欧美不卡一二三| 国产一区日韩二区欧美三区| 久久久亚洲高清| 成人亚洲精品久久久久软件| 中文字幕高清一区| 99久久99久久精品免费观看| 中文字幕在线不卡一区| 97久久精品人人做人人爽| 亚洲免费三区一区二区| 91福利在线观看| 亚洲福利视频三区| 91精品国产综合久久久久久漫画 | 亚洲激情五月婷婷| 欧美亚洲精品一区| 日韩成人一区二区三区在线观看| 4438成人网| 国内成+人亚洲+欧美+综合在线| 久久久噜噜噜久久人人看| 成人av免费在线观看| 亚洲精品欧美在线| 欧美二区乱c少妇| 激情都市一区二区| 亚洲视频狠狠干| 欧美精选一区二区| 国产盗摄一区二区| 一区二区三区四区高清精品免费观看| 欧美日韩国产片| 国产精品影音先锋| 亚洲一区二区三区美女| 91精品国产高清一区二区三区蜜臀| 国内不卡的二区三区中文字幕| 国产精品国产三级国产有无不卡 | 91在线看国产| 三级在线观看一区二区| 国产色产综合产在线视频| 99国产精品久久| 蜜臀久久久99精品久久久久久| 中文字幕va一区二区三区| 欧美性高清videossexo| 国内一区二区视频| 亚洲一区av在线| 日韩美女主播在线视频一区二区三区| 北条麻妃一区二区三区| 青青国产91久久久久久| 国产精品三级av在线播放| 69av一区二区三区| 93久久精品日日躁夜夜躁欧美| 日韩在线播放一区二区| 亚洲国产精品av| 精品少妇一区二区三区视频免付费| 99国产精品一区| 国产很黄免费观看久久| 男女男精品视频网| 亚洲一区二区免费视频| 亚洲国产精品成人久久综合一区| 91精品国产日韩91久久久久久| 99国产欧美另类久久久精品| 国产在线一区二区| 蜜臀国产一区二区三区在线播放| 一区二区三区久久| 中文字幕视频一区二区三区久| 日韩欧美国产麻豆| 这里只有精品免费| 欧美日本在线视频| 欧美日韩一区二区三区免费看| 99在线视频精品| 成人国产精品视频| 国产精品一区在线| 国产美女娇喘av呻吟久久| 秋霞午夜av一区二区三区| 亚洲成人在线网站| 亚洲国产一区二区视频| 亚洲精品高清视频在线观看| 国产精品久线在线观看| 中文字幕第一区二区| 国产嫩草影院久久久久| 国产亚洲制服色| 亚洲国产成人一区二区三区| 久久麻豆一区二区| 国产女主播一区| 国产日韩欧美激情| 国产精品色噜噜| 国产精品国产三级国产aⅴ中文| 国产欧美日本一区二区三区| 国产欧美一区二区精品婷婷| 久久久www成人免费毛片麻豆| 久久九九国产精品| 国产精品久久久久精k8| 国产精品色一区二区三区| 国产精品美女久久福利网站| 国产精品久久综合| 一区二区欧美在线观看| 亚洲福利视频一区| 秋霞影院一区二区| 国产精选一区二区三区| 成人午夜免费视频| 欧洲av一区二区嗯嗯嗯啊| 欧美精品久久天天躁| 久久婷婷国产综合精品青草| 国产欧美日韩另类视频免费观看| 国产精品视频一区二区三区不卡| 亚洲视频 欧洲视频| 性感美女极品91精品| 国产一区二三区| 91丨porny丨蝌蚪视频| 欧美肥大bbwbbw高潮| 久久久777精品电影网影网| 亚洲男人的天堂一区二区| 日韩电影免费在线| 成人av资源网站| 91麻豆精品久久久久蜜臀| 欧美极品xxx| 日日摸夜夜添夜夜添国产精品| 国产一区高清在线| 欧日韩精品视频| 久久欧美一区二区| 亚洲午夜在线电影| 国精产品一区一区三区mba桃花| 99re这里都是精品| 日韩美女主播在线视频一区二区三区| 国产精品久久毛片av大全日韩| 午夜精品久久久久影视| 国产伦精品一区二区三区在线观看| 成人91在线观看| 精品国内片67194| 一区二区三区在线视频播放| 久久国产免费看| 欧美日韩精品是欧美日韩精品| 日本一区二区三区在线不卡| 日日欢夜夜爽一区| 91免费看视频| 国产日韩精品久久久| 美女视频网站黄色亚洲| 欧美午夜精品一区二区三区| 欧美国产成人精品| 极品少妇xxxx精品少妇偷拍| 在线观看日产精品| 国产精品美女久久久久久久网站| 青青草成人在线观看| 91福利在线免费观看| 亚洲欧美自拍偷拍| 国产精华液一区二区三区| 日韩欧美二区三区| 丝袜美腿亚洲综合| 欧美三级电影在线观看| 亚洲欧美影音先锋| 成人美女视频在线观看| 久久婷婷色综合| 国产揄拍国内精品对白| 日韩免费电影网站| 久久精品二区亚洲w码| 欧美疯狂做受xxxx富婆| 亚洲国产裸拍裸体视频在线观看乱了| 91丝袜美腿高跟国产极品老师 | 99视频精品在线| 久久久久久久久伊人| 日本成人超碰在线观看| 欧美视频日韩视频| 亚洲国产精品一区二区www在线| 色偷偷一区二区三区| 亚洲精品ww久久久久久p站|