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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2477|回復: 0
打印 上一主題 下一主題
收起左側

單片機SPI總線源碼 將數據"0xaa"寫入X5045再讀出送P1口顯示

[復制鏈接]
跳轉到指定樓層
樓主
  1. //將數據"0xaa"寫入X5045再讀出送P1口顯示
  2. #include<reg51.h>    //包含單片機寄存器的頭文件
  3. #include<intrins.h>  //包含_nop_()函數定義的頭文件
  4. sbit SCK=P3^4;       //將SCK位定義為P3.4引腳
  5. sbit SI=P3^5;        //將SI位定義為P3.5引腳
  6. sbit SO=P3^6;        //將SO位定義為P3.6引腳
  7. sbit CS=P3^7;        //將SCK位定義為P3.7引腳
  8. #define WREN 0x06    //寫使能鎖存器允許
  9. #define WRDI 0x04    //寫使能鎖存器禁止
  10. #define WRSR 0x01    //寫狀態寄存器
  11. #define READ 0x03    //讀出
  12. #define WRITE 0x02   //寫入
  13. unsigned char mm;
  14. /*****************************************************
  15. 函數功能:延時1ms
  16. (3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
  17. ***************************************************/
  18. void delay1ms()
  19. {
  20.    unsigned char i,j;        
  21.          for(i=0;i<10;i++)
  22.           for(j=0;j<33;j++)
  23.            ;                 
  24. }
  25. /*****************************************************
  26. 函數功能:延時若干毫秒
  27. 入口參數:n
  28. ***************************************************/
  29. void delaynms(unsigned char n)
  30. {
  31.    unsigned char i;

  32.         for(i=0;i<n;i++)
  33.            delay1ms();
  34. }
  35. /*****************************************************
  36. 函數功能:從X5045的當前地址讀出數據
  37. 出口參數:x
  38. ***************************************************/
  39. unsigned char ReadCurrent(void)
  40. {
  41.           unsigned char i;
  42.         unsigned char x=0x00;      //儲存從X5045中讀出的數據
  43.         SCK=1;                     //將SCK置于已知的高電平狀態
  44.    for(i = 0; i < 8; i++)
  45.         {
  46.            SCK=1;                 //拉高SCK
  47.            SCK=0;                 //在SCK的下降沿輸出數據        
  48.            x<<=1;  //將x中的各二進位向左移一位,因為首先讀出的是字節的最高位數據           
  49.                 x|=(unsigned char)SO;  //將SO上的數據通過按位"或"運算存入 x      
  50.         }
  51.         return(x);   //將讀取的數據返回
  52. }
  53. /*****************************************************
  54. 函數功能:寫數據到X5045的當前地址
  55. 入口參數:dat
  56. ***************************************************/
  57. void WriteCurrent(unsigned char dat)
  58. {
  59.    unsigned char i;
  60.         SCK=0;                 //將SCK置于已知的低電平狀態
  61.   for(i = 0; i < 8; i++)  // 循環移入8個位
  62.         {
  63.          SI=(bit)(dat&0x80);   //通過按位"與"運算將最高位數據送到S
  64.                                     //因為傳送時高位在前,低位在后
  65.          SCK=0;
  66.          SCK=1;               //在SCK上升沿寫入數據
  67.     dat<<=1;   //將y中的各二進位向左移一位,因為首先寫入的是字節的最高位
  68.   }
  69. }

  70. /*****************************************************
  71. 函數功能:寫狀態寄存器 ,可以設置看門狗的溢出時間及數據保護
  72. 入口參數:rs;  //儲存寄存器狀態值
  73. ***************************************************/
  74. void WriteSR(unsigned char rs)
  75. {
  76.          CS=0;                 //拉低CS,選中X5045
  77.          WriteCurrent(WREN);   //寫使能鎖存器允許
  78.          CS=1;                 //拉高CS
  79.          CS=0;                 //重新拉低CS,否則下面的寫寄存器狀態指令將被丟棄
  80.          WriteCurrent(WRSR);   //寫狀態寄存器
  81.          WriteCurrent(rs);     //寫入新設定的寄存器狀態值
  82.          CS=1;                 //拉高CS
  83. }

  84. /*****************************************************
  85. 函數功能:寫數據到X5045的指定地址
  86. 入口參數:addr
  87. ***************************************************/
  88. void WriteSet(unsigned char dat,unsigned char addr)
  89. {
  90.           SCK=0;                 //將SCK置于已知狀態
  91.    CS=0;                  //拉低CS,選中X5045
  92.         WriteCurrent(WREN);    //寫使能鎖存器允許
  93.         CS=1;                  //拉高CS
  94.    CS=0;                  //重新拉低CS,否則下面的寫入指令將被丟棄
  95.         WriteCurrent(WRITE);   //寫入指令
  96.         WriteCurrent(addr);    //寫入指定地址
  97.         WriteCurrent(dat);     //寫入數據
  98.         CS=1;                  //拉高CS
  99.    SCK=0;                 //將SCK置于已知狀態
  100. }

  101. /*****************************************************
  102. 函數功能:從X5045的指定地址讀出數據
  103. 入口參數:addr
  104. 出口參數:dat
  105. ***************************************************/
  106. unsigned char ReadSet(unsigned char addr)
  107. {
  108. unsigned char dat;
  109. SCK=0;                 //將SCK置于已知狀態
  110. CS=0;                  //拉低CS,選中X5045
  111. WriteCurrent(READ);   //開始讀
  112. WriteCurrent(addr);   //寫入指定地址
  113. dat=ReadCurrent();    //讀出數據
  114. CS=1;                 //拉高CS
  115. SCK=0;                //將SCK置于已知狀態
  116. return dat;           //返回讀出的數據
  117. }

  118. /*****************************************************
  119. 函數功能:看門狗復位程序
  120. ***************************************************/
  121. void WatchDog(void)
  122. {
  123. CS=1;    //拉高CS
  124. CS=0;    //CS引腳的一個下降沿復位看門狗定時器
  125. CS=1;    //拉高CS
  126. }
  127. /*****************************************************
  128. 函數功能:主程序
  129. ***************************************************/
  130. void main(void)
  131. {
  132.   WriteSR(0x12);        //寫狀態寄存器(設定看門狗溢出時間為600ms,寫不保護)  
  133.   delaynms(10);         //X5045的寫入周期約為10ms
  134.   while(1)
  135.   {         mm=0x00;
  136.           do{
  137.          
  138.          WriteSet(mm,0x10);  //將數據"0xaa"寫入指定地址"0x10"
  139.          delaynms(10);         //X5045的寫入周期約為10ms
  140.    P1=ReadSet(0x10);      //將數據讀出送P1口顯示
  141.     WatchDog();           //復位看門狗
  142.         mm=mm+1;}while(mm<0xff);
  143.         mm=0xff;
  144.         do{
  145.                  WriteSet(mm,0x10);  //將數據"0xaa"寫入指定地址"0x10"
  146.          delaynms(10);         //X5045的寫入周期約為10ms
  147.    P1=ReadSet(0x10);      //將數據讀出送P1口顯示
  148.     WatchDog();           //復位看門狗
  149.         mm=mm-1;}while(mm<0xff);
  150.         }

  151. }


復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜不卡福利视频 | 国产婷婷色综合av蜜臀av | 天天拍夜夜爽 | 久草视频在线播放 | 一区欧美 | 日韩在线免费视频 | 亚洲成人综合在线 | 日本久久一区二区三区 | 成人不卡 | 天天操狠狠操 | 久久久精品网站 | 日韩一区二区三区在线看 | 中文在线一区二区 | 中文字幕1区 | 午夜电影在线播放 | 成年人网站免费 | 99re视频在线观看 | 国产精品一区一区 | av片免费| 日韩精品免费 | 精精国产xxxx视频在线野外 | 久久久91精品国产一区二区三区 | 成人在线视频网 | 欧美日韩一区二区在线播放 | 日本综合在线观看 | 一区二区精品 | 91精品国产综合久久久久久漫画 | 一区二区在线免费观看视频 | 蜜桃视频在线观看www社区 | 日韩免费网站 | 国产乱码久久久 | a在线v| 天天精品在线 | 欧美福利在线 | 亚洲欧美综合精品久久成人 | 欧洲一级毛片 | 成人欧美一区二区三区视频xxx | 国产精品亚洲成在人线 | www.狠狠干 | 国产小网站 | 国产精品久久久久久久久久免费看 |