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

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

?? 完全實用化的020 smbus程序(與時鐘pcf8563通信).txt

?? 完全實用化的020 SMBUS程序(與時鐘PCF8563通信
?? TXT
字號:
完全實用化的020 SMBUS程序(與時鐘PCF8563通信)

            完全實用化的020 SMBUS程序(與時鐘PCF8563通信) 
                        收集:楊本榮  來源: 網絡   發表于 2005-9-3 

                  //C8051F 單片機:完全實用化的020 SMBUS程序(與時鐘PCF8563通信)
                  #include <intrins.h>
                  #include <stdio.h>
                  #include <absacc.h>
                  #include <C8051F020.h>
                  #define _Nop_() _nop_()
                  #define uint unsigned int
                  #define uchar unsigned char
                  #define ulong unsigned long
                  #define MY_ADD 0x00 //SMBus從地址,B0是應答呼叫地址允許位(1允許), 
                  /*---------------------------定義PCD8583有關地址-----------------------------*/
                  #define write_pcf8563 0xA2
                  #define read_pcf8563 0xA3
                  #define pcf8563_control1 0x00
                  #define pcf8563_control2 0x01
                  #define pcf8563_second 0x02
                  #define pcf8563_minute 0x03
                  #define pcf8563_hour 0x04 //B7=0/1--24/12h B6=0/1--AM/PM 
                  B5B4(ten hours 0 to 2) B3~B0(Unit hours) 
                  #define pcf8563_date 0x05 //B7B6(year 0 to 3) B5B4(ten days 0 
                  to 3) B3~B0(Unit days)
                  #define pcf8563_week 0x06 //B7_B5(Weekdays 0 to 6) B4(ten 
                  months) B3~B0(Unit months)
                  #define pcf8563_month 0x07
                  #define pcf8563_year 0x08
                  #define pcf8563_min_arm 0x09
                  #define pcf8563_hou_arm 0x0a
                  #define pcf8563_dat_arm 0x0b
                  #define pcf8563_wek_arm 0x0c
                  #define pcf8563_clk_reg 0x0d
                  #define pcf8563_arm_reg 0x0e
                  #define pcf8563_tim_arm 0x0F
                  /*---------------------------PCF8583有關的變量----------------------------*/
                  bit dis_clock_flag,read_clock_flag,set_clock_flag;
                  uchar year,year1,month,day,week,hour,minute,second;
                  /*---------------------------SMBUS接口相關變量----------------------------*/
                  bit iic_error_flag,sm_busy;
                  uchar watch_buf[20];
                  uchar iic_read_buf[20]={0};
                  uchar iic_write_buf[20]={0};
                  uchar 
                  slave_add,iic_ram_add,send_byte,write_start_num,read_start_num;
                  uchar 
                  iic_send_count,iic_receive_count,iic_send_len,iic_receive_len,watch,i;

                  uchar hex_bcd(uchar hex_value)//完成HEX(99以內)到BCD(兩位)的確轉換
                  {
                  return(((hex_value/10)<<4)|(hex_value%10));
                  }

                  void enable_wdog(void)
                  {
                  WDTCN=0xA5; 
                  //允許看門狗定時器工作
                  }

                  void disable_wdog(void) //禁止看門狗定時器工作
                  {
                  WDTCN=0xDE;
                  WDTCN=0xAD;
                  }

                  void init_sysclk (void)
                  {
                  uint i=0;
                  OSCXCN=0x67; // start 
                  //external oscillator with 12MHz crystal
                  for(i=0;i<256;i++); // XTLVLD blanking 
                  while(!(OSCXCN & 0x80)); // Wait for crystal osc. to settle
                  OSCICN=0x08;
                  // OSCICN=0x17; //bit7=0:禁止時鐘丟失檢測 bit3=1:選擇外部時鐘
                  }

                  void init_smbus(void)
                  {
                  SMB0CN=0x44; //IIC總線控制寄存器01000100
                  SMB0CR=0xc4; //-(SYSCLK/2*SCL_BAUD);IIC總線速率寄存器SCL=100K
                  SMB0ADR=MY_ADD; //設置從方式時將要應答的從地址 EIE1=EIE1|0x02; 
                  //允許IIC總線中斷,標志位是SI(SMB0CN.3)
                  EIP1=EIP1|0x02; //SMBUS中斷為高優先級
                  }

                  void init_ioport()
                  {
                  XBR0=0x07; //b2=1 TXD0-P0.0 RXD0-P0.1,b1=1 
                  SPI_SCK--P0.2,SPI_MISO--P0.3

                  //SPI_MOSI--P0.4,SPI_NSS--P0.5,b0=1 SDA--P0.6,SCL--P0.7,
                  XBR1=0x24; //b2=1 int0--P1.0,b4=1 int1--P1.1
                  XBR2=0x40; //端口I/O弱上拉允許,交叉開關允許

                  P0MDOUT=0x00; //端口0輸出方式寄存器:1--推挽方式,0--漏極開路
                  P0=0xff;

                  P1MDIN=0XFF; //端口1輸入方式寄存器:1--配置為模擬輸入,0--配置為數字輸入
                  P1MDOUT=0xff; //端口1輸出方式寄存器:1--推挽方式,0--漏極開路
                  P1=0xff;

                  P2MDOUT=0x38; //端口2輸出方式寄存器:1--推挽方式,0--漏極開路
                  P2=0xff; //在該程序中P2.012為鍵盤掃描輸入,如果為推挽方式則不可靠膸

                  P3MDOUT=0X00; //端口3輸出方式寄存器:1--推挽方式,0--漏極開路
                  P3=0xff;

                  P74OUT=0x01; //端口7-4輸出方式寄存器:1--推挽方式,0--漏極開路
                  P4=0xff;
                  P5=0xff;
                  P6=0xff;
                  P7=0xff;
                  }

                  void smbus_send (uchar chip_select,byte_address,write_num)
                  {
                  while(sm_busy); // Wait for SMBus to be free.
                  sm_busy=1; // Occupy SMBus (set to busy)
                  write_start_num=0;
                  slave_add=chip_select; // Chip select + WRITE
                  iic_ram_add=byte_address; // PCF8563的寄存器地址
                  iic_send_len=write_num; // 寫PCF8563字節數
                  STA=1; // Start transfer
                  while (sm_busy);
                  }

                  void smbus_receive (uchar chip_select,receive_num)
                  { 
                  while (sm_busy); // Wait for bus to be free.
                  sm_busy=1; // Occupy SMBus (set to busy)
                  read_start_num=0;
                  slave_add=chip_select; // Chip select + READ
                  iic_receive_len=receive_num; 
                  STA=1; // Start transfer
                  while(sm_busy); // Wait for transfer to finish
                  }

                  void write_8563(uchar ram_add,write_num)
                  {
                  smbus_send(write_pcf8563,ram_add,write_num);
                  }

                  void read_8563(uchar read_num)
                  {
                  smbus_receive(read_pcf8563,read_num);
                  }

                  void set_clock(void)
                  {
                  iic_write_buf[0]=hex_bcd(second); //設置秒
                  iic_write_buf[1]=hex_bcd(minute); //設置分
                  iic_write_buf[2]=hex_bcd(hour); //設置時
                  iic_write_buf[3]=hex_bcd(day); 
                  iic_write_buf[4]=hex_bcd(week); 
                  iic_write_buf[5]=hex_bcd(month); 
                  iic_write_buf[6]=hex_bcd(year); 
                  write_8563(pcf8563_second,0x07);
                  }

                  void read_clock(void)
                  {
                  write_8563(pcf8563_second,0x00);
                  smbus_receive(read_pcf8563,0x07);
                  second=iic_read_buf[0]&0x7f;
                  second=((second&0xf0)>>4)*10+(second&0x0f);//將BCD碼轉換成HEX
                  minute=iic_read_buf[1]&0x7f;
                  minute=((minute&0xf0)>>4)*10+(minute&0x0f);//將BCD碼轉換成HEX
                  hour=iic_read_buf[2]&0x3f;
                  hour=((hour&0xf0)>>4)*10+(hour&0x0f);//將BCD碼轉換成HEX
                  day=iic_read_buf[3]&0x3f;
                  day=((day&0xf0)>>4)*10+(day&0x0f);//將BCD碼轉換成HEX
                  week=iic_read_buf[4]&0x07;
                  week=((week&0xf0)>>4)*10+(week&0x0f);//將BCD碼轉換成HEX
                  month=iic_read_buf[5]&0x1f; 
                  month=((month&0xf0)>>4)*10+(month&0x0f);//將BCD碼轉換成HEX
                  year=iic_read_buf[6];
                  year=((year&0xf0)>>4)*10+(year&0x0f);//將BCD碼轉換成HEX
                  }

                  void init_pcf8563(void)
                  {
                  iic_write_buf[0]=0x00;
                  write_8563(pcf8563_control1,0x01);
                  iic_write_buf[0]=0x00;
                  write_8563(pcf8563_control2,0x01);
                  iic_write_buf[0]=0x80;
                  write_8563(pcf8563_clk_reg,0x01);//CLK輸出頻率32.768K
                  iic_write_buf[0]=0x00;
                  write_8563(pcf8563_min_arm,0x01);//分報警無效
                  iic_write_buf[0]=0x00;
                  write_8563(pcf8563_hou_arm,0x01);//時報警無效
                  iic_write_buf[0]=0x00;
                  write_8563(pcf8563_dat_arm,0x01);//日報警無效
                  iic_write_buf[0]=0x00;
                  write_8563(pcf8563_wek_arm,0x01);//星期報警無效
                  }

                  void smbus(void) interrupt 7 using 2 //SMBUS中斷服務程序
                  {
                  watch=SMB0STA;
                  switch (watch) 
                  //SMBUS狀態寄存器SMB0STA
                  { 
                  //iic_error_flag=1說明SMBus有問題
                  case 0x08: 
                  //主發送/接收:起始條件已發出. 


                  STA=0;iic_error_flag=0;AA=1; //人工清除起始位STA
                  iic_receive_count=0;iic_send_count=0;
                  SMB0DAT=slave_add; 
                  //從地址+讀/寫標志送SMB0DAT,
                  break; 

                  case 0x10: 
                  //主發送/接收:重復起始條件已發出。
                  STA=0;AA=1; 
                  //人工清除起始位STA
                  SMB0DAT=slave_add; 
                  //從地址+讀/寫標志送SMB0DAT
                  iic_receive_len=iic_receive_len+iic_receive_count;
                  iic_send_len=iic_send_len+iic_send_count;
                  iic_receive_count=0;iic_send_count=0;
                  break;
                  case 0x18: //主發送器:從地址+寫標志已發出,收到ACK
                  SMB0DAT=iic_ram_add;write_start_num=0;//將要發送的數據裝入SMB0DAT.
                  break; 

                  case 0x20: 
                  //主發送器:從地址+寫標志已發出,收到NACK
                  write_start_num++;
                  if(write_start_num>5)
                  {STO=1;sm_busy=0;iic_error_flag=1;}//如果超過5次不成功則釋放總線 
                  else{STO=1;STA=1;} //確認查詢重復,置位STO+STA。
                  break;
                  case 0x28: //數據字節已發出,收到ACK,將下一字節裝入SMB0DAT;
                  switch(iic_send_len)
                  {
                  case 0x00: 
                  STO=1;sm_busy=0; //如果數據已經發送結束則釋放總線 
                  break; 
                  default :
                  SMB0DAT=iic_write_buf[iic_send_count++];iic_send_len--; 
                  break;
                  }
                  break;
                  case 0x30: //主發送器:數據字節已發出,收到NACK,
                  write_start_num++;
                  if(write_start_num>5)
                  { STO=1;sm_busy=0;iic_error_flag=1;}//如果超過5次不成功則釋放總線 
                  else
                  {STO=1;STA=1;} //重試傳輸或置位STO
                  break;
                  case 0x38: //主發送器:競爭失敗,保存當前數據
                  write_start_num++;
                  if(write_start_num>5)
                  {STO=1;sm_busy=0;iic_error_flag=1;} //如果超過5次不成功則釋放總線 
                  {STO=1;STA=1;}
                  break;
                  case 0x40: 
                  read_start_num=0; //主接收器:從地址+讀標志已發出,收到ACK,
                  if(iic_receive_len<2)AA=0; //如果只接收一個字節,清AA位(收到字節后發NACK),等待接收數據
                  break;
                  case 0x48: //主接收器:從地址+讀標志已發出,收到NACK,
                  read_start_num++;
                  if(read_start_num>5)
                  {STO=1;sm_busy=0;iic_error_flag=1;} //如果超過5次不成功則釋放總線
                  else
                  {STO=1;STA=1;}
                  break; //確認查詢重復,置位STO+STA。
                  case 0x50: //主接收器:數據字節收到,ACK已發出;讀SMB0DAT,等待
                  iic_read_buf[iic_receive_count++]=SMB0DAT;
                  iic_receive_len--;
                  if(iic_receive_len<2)AA=0; //下一個字節,如下一個字節是最后字節,清除AA。
                  break;
                  case 0x58: //主接收器:數據字節收到,NACK已發出,置位STO。
                  iic_read_buf[iic_receive_count++]=SMB0DAT; 
                  //讀操作已經完成,讀數據寄存器并且發出STOP.
                  iic_receive_len--;
                  STO=1;sm_busy=0; //Free SMBus 
                  break;
                  default:
                  STO=1;sm_busy=0;iic_error_flag=1; //Reset communication. 
                  break;
                  }
                  SI=0; //clear interrupt flag
                  }

                  main()
                  {
                  disable_wdog();
                  init_sysclk();
                  init_ioport();
                  init_smbus();
                  EA=1;i=0;
                  init_pcf8563();
                  for(;;)
                  {
                  read_clock();
                  }

                  }



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男女男精品网站| 亚洲精品视频自拍| 激情欧美日韩一区二区| 欧美一区二区三区视频免费播放| 亚洲小少妇裸体bbw| 欧美一区二区免费视频| 久久精品国产免费看久久精品| 精品欧美一区二区在线观看| 国产精品一级黄| 亚洲色图欧美激情| 欧美成人欧美edvon| 国产精品一区一区| 中文字幕一区二区三区色视频| 99re亚洲国产精品| 日韩精品久久久久久| 亚洲精品在线三区| 99精品在线免费| 亚洲va国产va欧美va观看| 日韩一区二区在线观看| 丁香婷婷综合色啪| 亚洲综合另类小说| 久久这里只有精品视频网| 波多野结衣在线aⅴ中文字幕不卡| 亚洲激情在线播放| 欧美xxxxx牲另类人与| av一区二区三区四区| 亚洲超丰满肉感bbw| 国产日韩欧美综合在线| 色婷婷精品久久二区二区蜜臀av| 青青草国产成人99久久| 国产精品免费免费| 4438x亚洲最大成人网| 国产不卡高清在线观看视频| 一区二区欧美精品| 国产日韩亚洲欧美综合| 欧美情侣在线播放| 夫妻av一区二区| 午夜精品爽啪视频| 国产精品久久久久7777按摩| 欧美一区二区日韩| 色婷婷国产精品久久包臀| 国产中文字幕精品| 亚洲成人免费影院| 亚洲色图20p| 久久精品亚洲一区二区三区浴池| 欧美日韩在线三区| 99久久综合精品| 国产主播一区二区三区| 日韩高清不卡一区| 一区二区三区四区在线播放 | 日韩一级大片在线| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩欧美成人一区二区| 色婷婷精品大视频在线蜜桃视频| 美女视频免费一区| 日韩专区在线视频| 亚洲一区二区欧美激情| 亚洲欧美自拍偷拍| 中文在线一区二区| 2023国产精华国产精品| 91精品国产黑色紧身裤美女| 欧美亚洲禁片免费| 91久久久免费一区二区| thepron国产精品| 国产成人亚洲综合a∨婷婷图片| 久久成人免费网站| 秋霞国产午夜精品免费视频| 午夜免费久久看| 亚洲成人免费看| 亚洲成av人片一区二区梦乃| 亚洲国产视频在线| 亚洲一区日韩精品中文字幕| 亚洲精品高清视频在线观看| 1000部国产精品成人观看| 国产精品视频观看| 国产精品美女久久久久高潮| 国产精品网站导航| 国产精品乱码人人做人人爱 | 欧美肥妇free| 在线成人av影院| 欧美日韩国产高清一区二区三区| 欧美日韩成人一区| 91精品国产欧美一区二区成人| 91精品国产综合久久香蕉的特点| 在线播放欧美女士性生活| 欧美精品一级二级| 日韩欧美国产综合| 亚洲精品一线二线三线无人区| 2021久久国产精品不只是精品| 久久久青草青青国产亚洲免观| 国产亚洲综合色| 亚洲欧洲av在线| 亚洲日本va午夜在线电影| 亚洲精品日韩综合观看成人91| 亚洲精品成a人| 丝袜诱惑制服诱惑色一区在线观看| 日韩精品电影在线观看| 黑人巨大精品欧美一区| 丁香啪啪综合成人亚洲小说| 91免费在线看| 欧美高清性hdvideosex| 欧美精品一区二区三区一线天视频 | 免费观看一级特黄欧美大片| 激情久久五月天| 99久久精品情趣| 欧美人伦禁忌dvd放荡欲情| 欧美一区二区免费| 国产精品久久久久影视| 亚洲国产美女搞黄色| 久久99国产乱子伦精品免费| 成年人午夜久久久| 欧美精品自拍偷拍| 中文字幕欧美国产| 亚洲成人午夜电影| 国产乱色国产精品免费视频| 色88888久久久久久影院按摩| 欧美一区二区在线视频| 日本一区二区三区久久久久久久久不| 亚洲欧美色综合| 麻豆精品在线观看| 色综合天天综合色综合av| 欧美一级国产精品| 1区2区3区国产精品| 蜜桃91丨九色丨蝌蚪91桃色| 波多野洁衣一区| 日韩色在线观看| 国产精品久久久久四虎| 日韩中文字幕1| 91女厕偷拍女厕偷拍高清| 日韩欧美国产电影| 一片黄亚洲嫩模| 懂色av一区二区夜夜嗨| 91麻豆精品91久久久久同性| 亚洲视频一区二区在线| 极品少妇xxxx偷拍精品少妇| 久久一夜天堂av一区二区三区| 亚洲欧美另类久久久精品| 精品系列免费在线观看| 欧美日韩一级二级三级| 亚洲婷婷国产精品电影人久久| 蜜桃精品视频在线| 欧美性xxxxxx少妇| 综合久久久久综合| 国产精品一区二区视频| 日韩午夜在线观看视频| 亚洲一区二区不卡免费| 91在线视频官网| 国产日韩欧美制服另类| 国产真实乱偷精品视频免| 在线播放91灌醉迷j高跟美女| 亚洲精品国产成人久久av盗摄| 成人小视频免费观看| 欧美精品一区二区蜜臀亚洲| 日本欧美一区二区三区乱码| 欧美日韩色一区| 亚洲国产一区二区视频| 日本道色综合久久| 亚洲免费av在线| av电影天堂一区二区在线观看| 欧美激情综合在线| 成人手机电影网| 欧美精品一区二区久久久| 久久99精品一区二区三区 | 色悠悠久久综合| 国产精品成人免费在线| 成人av电影在线网| 国产精品黄色在线观看| av在线不卡免费看| **网站欧美大片在线观看| av毛片久久久久**hd| 国产精品国产三级国产普通话三级 | 欧美国产精品中文字幕| 成人黄色免费短视频| 中文av一区二区| 91丨porny丨国产| 一区二区三区免费看视频| 欧美性三三影院| 婷婷激情综合网| 3751色影院一区二区三区| 久久精品av麻豆的观看方式| 欧美精品一区二区高清在线观看| 国精品**一区二区三区在线蜜桃| 久久久夜色精品亚洲| 成人免费观看视频| 亚洲欧美日韩国产另类专区 | 免费一级片91| 久久久久久久综合日本| eeuss影院一区二区三区| 一区二区三区日韩精品视频| 欧美色综合天天久久综合精品| 日韩高清不卡在线| 国产色一区二区| 99精品久久久久久| 午夜精品久久久| 精品国产伦理网| 99久久精品国产毛片| 亚洲成人免费av| 久久久久九九视频| 色94色欧美sute亚洲13| 秋霞午夜av一区二区三区|