C51 COMPILER V9.59.0.0 APP_SPI_PS 06/10/2021 10:21:38 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE APP_SPI_PS OBJECT MODULE PLACED IN .\list\APP_SPI_PS.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE ..\App\src\APP_SPI_PS.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\Dr -iver\inc;..\User;..\App\inc) DEBUG PRINT(.\list\APP_SPI_PS.lst) TABS(2) OBJECT(.\list\APP_SPI_PS.obj) line level source 1 /*---------------------------------------------------------------------*/ 2 /* --- STC MCU Limited ------------------------------------------------*/ 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ 9 /* --- QQ: 800003751 -------------------------------------------------*/ 10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ 11 /*---------------------------------------------------------------------*/ 12 13 #include "APP.h" 14 #include "STC8A_GPIO.h" 15 #include "STC8A_SPI.h" 16 #include "STC8A_UART.h" 17 #include "STC8A_NVIC.h" 18 19 /************* 功能说明 ************** 20 21 通过串口发送数据给MCU1,MCU1将接收到的数据由SPI发送给MCU2,MCU2再通过串口发送出去. 22 23 设置方法 2: 24 两个设备初始化时都设置 SSIG 为 0,MSTR 设置为0,此时两个设备都是不忽略 SS 的从机模式。 25 当其中一个设备需要启动传输时,先检测 SS 管脚的电平,如果时候高电平, 26 就将自己设置成忽略 SS 的主模式,自己的 SS 脚输出低电平,拉低对方的 SS 脚,即可进行数据传输。 27 28 MCU1 MCU2 29 |-----------------| |-----------------| 30 | MISO |-----------| MISO | 31 --| TX MOSI |-----------| MOSI TX |-- 32 | SCLK |-----------| SCLK | 33 --| RX SS |-----------| SS RX |-- 34 |-----------------| |-----------------| 35 36 37 下载时, 选择时钟 22.1184MHz (可以在配置文件"config.h"中修改). 38 39 ******************************************/ 40 41 //======================================================================== 42 // 本地常量声明 43 //======================================================================== 44 45 46 //======================================================================== 47 // 本地变量声明 48 //======================================================================== 49 50 51 //======================================================================== 52 // 本地函数声明 53 //======================================================================== 54 C51 COMPILER V9.59.0.0 APP_SPI_PS 06/10/2021 10:21:38 PAGE 2 55 56 //======================================================================== 57 // 外部函数和变量声明 58 //======================================================================== 59 60 61 //======================================================================== 62 // 函数: SPI_PS_init 63 // 描述: 用户初始化程序. 64 // 参数: None. 65 // 返回: None. 66 // 版本: V1.0, 2020-09-27 67 //======================================================================== 68 void SPI_PS_init(void) 69 { 70 1 SPI_InitTypeDef SPI_InitStructure; 71 1 COMx_InitDefine COMx_InitStructure; //结构定义 72 1 73 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART -_9bit_BRTx 74 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使 -用BRT_Timer2) 75 1 COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 一般 110 ~ 115200 76 1 COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE 77 1 COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE 78 1 UART_Configuration(UART1, &COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4 79 1 NVIC_UART1_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Pri -ority_2,Priority_3 80 1 81 1 SPI_InitStructure.SPI_Enable = ENABLE; //SPI启动 ENABLE, DISABLE 82 1 SPI_InitStructure.SPI_SSIG = ENABLE; //片选位 ENABLE, DISABLE 83 1 SPI_InitStructure.SPI_FirstBit = SPI_MSB; //移位方向 SPI_MSB, SPI_LSB 84 1 SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; //主从选择 SPI_Mode_Master, SPI_Mode_Slave 85 1 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟相位 SPI_CPOL_High, SPI_CPOL_Low 86 1 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据边沿 SPI_CPHA_1Edge, SPI_CPHA_2Edge 87 1 SPI_InitStructure.SPI_Speed = SPI_Speed_4; //SPI速度 SPI_Speed_4, SPI_Speed_16, SPI_Speed_64, SP -I_Speed_128 88 1 SPI_Init(&SPI_InitStructure); 89 1 NVIC_SPI_Init(ENABLE,Priority_3); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Prior -ity_2,Priority_3 90 1 91 1 P2_MODE_IO_PU(GPIO_Pin_All); //P2 设置为准双向口 92 1 93 1 SPI_SS_2 = 1; 94 1 } 95 96 //======================================================================== 97 // 函数: Sample_SPI_PS 98 // 描述: 用户应用程序. 99 // 参数: None. 100 // 返回: None. 101 // 版本: V1.0, 2020-09-27 102 //======================================================================== 103 void Sample_SPI_PS(void) 104 { 105 1 u8 i; 106 1 107 1 if(COM1.RX_TimeOut > 0) 108 1 { 109 2 if(--COM1.RX_TimeOut == 0) 110 2 { 111 3 if(COM1.RX_Cnt > 0) C51 COMPILER V9.59.0.0 APP_SPI_PS 06/10/2021 10:21:38 PAGE 3 112 3 { 113 4 COM1.B_RX_OK = 1; 114 4 } 115 3 } 116 2 } 117 1 if((COM1.B_RX_OK) && (SPI_SS_2)) 118 1 { 119 2 SPI_SS_2 = 0; //拉低从机 SS 管脚 120 2 SPI_SetMode(SPI_Mode_Master); 121 2 for(i=0;i 0) 132 1 { 133 2 if(--SPI_RxTimerOut == 0) 134 2 { 135 3 if(SPI_RxCnt > 0) 136 3 { 137 4 for(i=0; i