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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4648|回復(fù): 0
收起左側(cè)

STC8A8K單片機(jī)SPI主從機(jī)設(shè)置通訊 測(cè)試程序

[復(fù)制鏈接]
ID:777263 發(fā)表于 2020-7-18 17:16 | 顯示全部樓層 |閱讀模式
stc8a8k 單片機(jī)測(cè)試程序,請(qǐng)各位參考。
串口4 定時(shí)器4.jpg

單片機(jī)源程序如下:
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15F4K60S4 系列 單主單從的SPI中斷方式舉例---------------------*/

  4. /*
  5.   mcu主頻為 11.0592MHz
  6.   波特率    115200

  7.   SPI主從機(jī)設(shè)置通訊 測(cè)試程序


  8. */



  9. #include "stc8.h"

  10. //#define MASTER                  //define:master undefine:slave         打開(kāi)設(shè)置為主機(jī)  關(guān)閉設(shè)置為從機(jī)
  11. #define FOSC        11059200L
  12. #define BAUD        (256 - FOSC / 32 / 115200)

  13. typedef unsigned char BYTE;
  14. typedef unsigned int WORD;
  15. typedef unsigned long DWORD;

  16. #define     URMD    0           //0:使用定時(shí)器2作為波特率發(fā)生器
  17.                                 //1:使用定時(shí)器1的模式0(16位自動(dòng)重載模式)作為波特率發(fā)生器
  18.                                 //2:使用定時(shí)器1的模式2(8位自動(dòng)重載模式)作為波特率發(fā)生器

  19. //sfr T2H   = 0xd6;               //定時(shí)器2高8位
  20. //sfr T2L   = 0xd7;               //定時(shí)器2低8位
  21. //
  22. //sfr  AUXR       =   0x8e;       //輔助寄存器                              
  23. //sfr SPSTAT      =   0xcd;       //SPI狀態(tài)寄存器                           
  24. #define SPIF        0x80        //SPSTAT.7                                
  25. #define WCOL        0x40        //SPSTAT.6                                
  26. //sfr SPCTL       =   0xce;       //SPI控制寄存器                           
  27. #define SSIG        0x80        //SPCTL.7                                 
  28. #define SPEN        0x40        //SPCTL.6                                 
  29. #define DORD        0x20        //SPCTL.5                                 
  30. #define MSTR        0x10        //SPCTL.4                                 
  31. #define CPOL        0x08        //SPCTL.3                                 
  32. #define CPHA        0x04        //SPCTL.2                                 
  33. #define SPDHH       0x00        //CPU_CLK/4                              
  34. #define SPDH        0x01        //CPU_CLK/16                              
  35. #define SPDL        0x02        //CPU_CLK/64                              
  36. #define SPDLL       0x03        //CPU_CLK/128                             
  37. //sfr SPDAT       =   0xcf;       //SPI數(shù)據(jù)寄存器                           
  38. sbit SPISS      =   P1^1;       //SPI從機(jī)選擇口, 連接到其它MCU的SS口
  39.                                 //當(dāng)SPI為一主多從模式時(shí),請(qǐng)使用主機(jī)的普通IO口連接到從機(jī)的SS口

  40. //sfr IE2         =   0xAF;       //中斷控制寄存器2
  41. #define ESPI        0x02        //IE2.1

  42. void InitUart();
  43. void InitSPI();
  44. void SendUart(BYTE dat);        //發(fā)送數(shù)據(jù)到PC
  45. BYTE RecvUart();                //從PC接收數(shù)據(jù)

  46. ///////////////////////////////////////////////////////////

  47. void main()
  48. {
  49.     InitUart();                 //初始化串口   
  50.     InitSPI();                  //初始化SPI   
  51.     IE2 |= ESPI;
  52.     EA = 1;

  53.     while (1)
  54.     {
  55. #ifdef MASTER                   //對(duì)于主機(jī)(接收串口數(shù)據(jù) 并發(fā)送給從機(jī),同時(shí)
  56.                                 //            從從機(jī)接收SPI數(shù)據(jù)并回傳給PC)
  57.         ACC = RecvUart();
  58.         SPISS = 0;              //拉低從機(jī)的SS
  59.         SPDAT = ACC;            //觸發(fā)SPI發(fā)送數(shù)據(jù)
  60. #endif
  61.     }
  62. }

  63. ///////////////////////////////////////////////////////////

  64. void spi_isr() interrupt 9 using 1     //SPI中斷服務(wù)程序 9 (004BH)
  65. {
  66.     SPSTAT = SPIF | WCOL;       //清除SPI狀態(tài)位
  67. #ifdef MASTER
  68.     SPISS = 1;                  //拉高從機(jī)的SS
  69.     SendUart(SPDAT);            //返回SPI數(shù)據(jù)
  70. #else                           //對(duì)于從機(jī)(從主機(jī)接收SPI數(shù)據(jù),同時(shí)
  71.     SPDAT = SPDAT;              //           發(fā)送前一個(gè)SPI數(shù)據(jù)給主機(jī))
  72. #endif
  73. }

  74. ///////////////////////////////////////////////////////////

  75. void InitUart()
  76. {
  77.     SCON = 0x5a;                //設(shè)置串口為8位可變波特率
  78. #if URMD == 0
  79.     T2L = 0xe8;                 //設(shè)置波特率重裝值
  80.     T2H = 0xff;                 //115200 bps(65536-11059200/4/115200)

  81. //    T2L = 0xd8;                 //設(shè)置波特率重裝值
  82. //    T2H = 0xff;                 //115200 bps(65536-18432000/4/115200)
  83.     AUXR = 0x14;                //T2為1T模式, 并啟動(dòng)定時(shí)器2
  84.     AUXR |= 0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
  85. #elif URMD == 1
  86.     AUXR = 0x40;                //定時(shí)器1為1T模式
  87.     TMOD = 0x00;                //定時(shí)器1為模式0(16位自動(dòng)重載)
  88.     TL1 = 0xd8;                 //設(shè)置波特率重裝值
  89.     TH1 = 0xff;                 //115200 bps(65536-18432000/4/115200)
  90.     TR1 = 1;                    //定時(shí)器1開(kāi)始啟動(dòng)
  91. #else
  92.     TMOD = 0x20;                //設(shè)置定時(shí)器1為8位自動(dòng)重裝載模式
  93.     AUXR = 0x40;                //定時(shí)器1為1T模式
  94.     TH1 = TL1 = 0xfb;           //115200 bps(256 - 18432000/32/115200)
  95.     TR1 = 1;
  96. #endif
  97. }

  98. ///////////////////////////////////////////////////////////

  99. void InitSPI()
  100. {
  101.     SPDAT = 0;                  //初始化SPI數(shù)據(jù)
  102.     SPSTAT = SPIF | WCOL;       //清除SPI狀態(tài)位
  103. #ifdef MASTER
  104.     SPCTL = SPEN | MSTR;        //主機(jī)模式
  105. #else
  106.     SPCTL = SPEN;               //從機(jī)模式
  107. #endif
  108. }

  109. ///////////////////////////////////////////////////////////

  110. void SendUart(BYTE dat)
  111. {
  112.     while (!TI);                //等待發(fā)送完成
  113.     TI = 0;                     //清除發(fā)送標(biāo)志
  114.     SBUF = dat;                 //發(fā)送串口數(shù)據(jù)
  115. }

  116. ///////////////////////////////////////////////////////////

  117. BYTE RecvUart()
  118. {
  119.     while (!RI);                //等待串口數(shù)據(jù)接收完成
  120.     RI = 0;                     //清除接收標(biāo)志
  121.     return SBUF;                //返回串口數(shù)據(jù)
  122. }
復(fù)制代碼

所有資料51hei提供下載:
SPI主從機(jī)設(shè)置通訊 測(cè)試程序.rar (90.16 KB, 下載次數(shù): 38)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩一区二区三免费高清 | 久久精品黄色 | 一区二区三区四区av | 在线免费看91 | 99国产精品久久久久久久 | 亚洲一区二区视频 | 日韩亚洲欧美一区 | 狠狠婷婷综合久久久久久妖精 | 色啪网| 九九热精品视频 | 久久毛片 | 精品国产一区二区三区久久影院 | 欧美在线一区二区三区 | 久久久精品影院 | 欧美日韩成人一区二区 | 罗宾被扒开腿做同人网站 | 美日韩免费视频 | 中文字幕精品一区二区三区精品 | 一区二区三区免费 | 亚洲成人第一页 | 欧美日韩国产中文 | 国产福利视频网站 | 日韩av黄色 | 成人在线视频网 | 亚洲视频一区二区三区 | 性高湖久久久久久久久 | 中文字幕亚洲区 | 日韩视频一区在线观看 | 国产wwwcom| 国产色婷婷精品综合在线手机播放 | 成人在线观看免费 | 九九国产 | 999观看免费高清www | 黄色三级免费网站 | 国产91视频免费 | 久久久久久久久国产成人免费 | 欧美日韩精品久久久免费观看 | 欧美影院| 久久成人精品视频 | 欧美精品一区二区三区视频 | 毛片在线看片 |