三菱PLC源碼,提供給大家參考。
0.png (10.05 KB, 下載次數: 180)
下載附件
2019-4-18 15:13 上傳
電路原理圖如下:
0.png (134.41 KB, 下載次數: 167)
下載附件
2019-4-18 15:16 上傳
0.png (78.85 KB, 下載次數: 180)
下載附件
2019-4-18 15:17 上傳
單片機源程序如下:
- /*
- UART 后臺處理程序
- */
- /*************Both Uart Used Variable Define *********************/
- unsigned char crc1,crc2;
- unsigned char crc3,crc4;
- /*************** Uart 0 Used Variable Define *********************/
- unsigned char uart0_rxbuf[127]; //接受數據包緩沖
- unsigned char uart0_txbuf[127]; //發送數據包緩沖
- unsigned char uart0_rxptr; //接受數據包當前指針
- unsigned char uart0_txptr; //發送數據包當前指針
- unsigned char uart0_txall; //發送數據包總長度
- unsigned char uart0_time; //接受數據包分割計時參數
- /*************** Uart 1 Used Variable Define *********************/
- unsigned char uart1_rxbuf[127]; //接受數據包緩沖
- unsigned char uart1_txbuf[127]; //發送數據包緩沖
- unsigned char uart1_rxptr; //接受數據包當前指針
- unsigned char uart1_txptr; //發送數據包當前指針
- unsigned char uart1_txall; //發送數據包總長度
- unsigned char uart1_time; //接受數據包分割計時參數
- /************* Genernal Uart Function Predefine ***************/
- extern void uart_crc(unsigned char* , unsigned char);
- /*********** Two Uart Disposal Function Predefine **************/
- extern void uart0_dispose(void);
- extern void uart1_dispose(void);
- /************ Two Uart Setup Function Predefine ***************/
- extern void UART0_setup(void);
- extern void UART1_setup(void);
- /*******************************************************************************
- * Function Name : UART1_Setup
- * Description : Configures the uart1
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void UART1_setup(void)
- {
- USART_InitTypeDef USART_InitStructure;
- USART_InitStructure.USART_BaudRate = 57600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- /* Configure the USART1*/
- USART_Init(USART1, &USART_InitStructure);
- /* Enable USART1 Receive and Transmit interrupts */
- USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
- USART_ITConfig(USART1, USART_IT_TC, ENABLE);
- /* Enable the USART1 */
- USART_Cmd(USART1, ENABLE);
- USART1->CR1 = 0x0000206C;
-
- // 初始化 串口輸入輸出緩沖
- uart0_time = 0;
- uart0_txall = 0;
- uart0_txptr = 0;
- uart0_rxptr = 0;
- USART1->CR1 |= 0x00002000;
- }
- /**************************************************************************** F!
- * 名稱:uart0_setup()
- * 功能:串口UART1 初始化以及變更格式程序
- * 入口參數:無
- * 出口參數:無
- ****************************************************************************/
- /*第二通訊口 通訊參數更新函數*/
- void UART0_setup(void)
- {
- USART_InitTypeDef USART_InitStructure;
- switch(program[0x1C])
- {
- //=============無校驗通訊設置區域========================
- case(0x01):
- /* 設置UART串口波特率 4800bps */
- USART_InitStructure.USART_BaudRate = 4800;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x02):
- /* 設置UART串口波特率 9600bps */
- USART_InitStructure.USART_BaudRate = 9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x03):
- /* 設置UART串口波特率 14400bps */
- USART_InitStructure.USART_BaudRate = 14400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x04):
- /* 設置UART串口波特率 19200bps*/
- USART_InitStructure.USART_BaudRate = 19200;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x05):
- /* 設置UART串口波特率 38400bps */
- USART_InitStructure.USART_BaudRate = 38400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x06):
- /* 設置UART串口波特率 57600bps */
- USART_InitStructure.USART_BaudRate = 57600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- //=============奇校驗通訊設置區域========================
- case(0x11):
- /* 設置UART串口波特率 4800bps */
- USART_InitStructure.USART_BaudRate = 4800;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Odd;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x12):
- /* 設置UART串口波特率 9600bps */
- USART_InitStructure.USART_BaudRate = 9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Odd;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x13):
- /* 設置UART串口波特率 14400bps */
- USART_InitStructure.USART_BaudRate = 14400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Odd;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x14):
- /* 設置UART串口波特率 19200bps*/
- USART_InitStructure.USART_BaudRate = 19200;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Odd;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x15):
- /* 設置UART串口波特率 38400bps */
- USART_InitStructure.USART_BaudRate = 38400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Odd;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x16):
- /* 設置UART串口波特率 57600bps */
- USART_InitStructure.USART_BaudRate = 57600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Odd;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- //=============偶校驗通訊設置區域========================
- case(0x21):
- /* 設置UART串口波特率4800bps */
- USART_InitStructure.USART_BaudRate = 4800;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Even;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x22):
- /* 設置UART串口波特率 9600bps*/
- USART_InitStructure.USART_BaudRate = 9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Even;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x23):
- /* 設置UART串口波特率 14400bps*/
- USART_InitStructure.USART_BaudRate = 14400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Even;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x24):
- /* 設置UART串口波特率 19200bps */
- USART_InitStructure.USART_BaudRate = 19200;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Even;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x25):
- /* 設置UART串口波特率 38400bps */
- USART_InitStructure.USART_BaudRate = 38400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Even;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- case(0x26):
- /* 設置UART串口波特率 57600bps */
- USART_InitStructure.USART_BaudRate = 57600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_Even;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- //==============出現異常后的處理 9600bps 8 N 1
- default:
- /* 設置UART串口波特率 38400bps */
- USART_InitStructure.USART_BaudRate = 38400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- break;
- }
- /* Configure the USART2*/
- USART_Init(USART2, &USART_InitStructure);
- /* Enable USART1 Receive and Transmit interrupts */
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
- USART_ITConfig(USART2, USART_IT_TC, ENABLE);
- /* Enable the USART1 */
- USART_Cmd(USART2, ENABLE);
- // 初始化 串口輸入輸出緩沖
- uart1_time = 0;
- uart1_txall = 0;
- uart1_txptr = 0;
- uart1_rxptr = 0;
- }
- //=================================================================================================================
- //=================================================================================================================
- //=================================================================================================================
- //=================================================================================================================
- /**************************************************************************** F
- * 名稱:uart1_dispose()
- * 功能:串口uart1數據處理。 專用編程接口
- * 入口參數:無
- * 出口參數:無
- ****************************************************************************/
- void uart1_dispose(void)
- {
- unsigned char bitres;
- unsigned short address;
- unsigned short length;
- unsigned short counter;
- unsigned char ta;
- //
- unsigned short tc;
- if((uart1_rxptr > 4) && (uart1_time > 10))
- {
- if((uart1_rxbuf[0] == 0x00) || (uart1_rxbuf[0] == program[0x1b]) ) //通訊地址判斷機制——8位模式 #### 以后用數據表參數代替
- {
- crc3 = uart1_rxbuf[uart1_rxptr - 2];
- crc4 = uart1_rxbuf[uart1_rxptr - 1];
- uart_crc(uart1_rxbuf , (uart1_rxptr - 2));
- if((crc3 == crc1)&&(crc4 == crc2))
- {
- /*********@@@@@@@@@@@@@@@@解釋執行程序 begin @@@@@@@@@@@@@@@***********/
- switch(uart1_rxbuf[1])
- {
- //+++++++++++++++++++++++++++++++++++++++++++++++
- case(0x01):
- address = uart1_rxbuf[2];
- address = address << 8;
- address |= uart1_rxbuf[3];
- bitres = address & 0x0f;
- address = address >> 4;
-
- length = uart1_rxbuf[4];
- length = length << 8;
- length |= uart1_rxbuf[5];
-
- if(length == 0) length = 1;
- ta = 0;
- uart1_txbuf[0] = uart1_rxbuf[0];
- uart1_txbuf[1] = uart1_rxbuf[1];
- //uart1_txbuf[2] =
- counter = 3;
- uart1_txbuf[counter] = 0;
- while(length)
- {
- if(memory[address] & (1<<bitres))
- {
- uart1_txbuf[counter] |= (1<<ta);
- }
- else
- {
- uart1_txbuf[counter] &= ~(1<<ta);
- }
- bitres++;
- if(bitres == 16)
- {
- bitres = 0;
- address ++;
- }
- ta++;
- length--;
- if((ta == 8)&(length != 0))
- {
- ta = 0;
- counter ++;
- uart1_txbuf[counter] = 0;
- }
-
- }
- uart1_txbuf[2] = counter - 2;
- uart_crc(uart1_txbuf,(counter + 1));
- uart1_txbuf[counter+1] = crc1;
- uart1_txbuf[counter+2] = crc2;
- uart1_txall = counter+2;
- uart1_txptr = 0;
- COM1_OUT;
- USART2->DR = uart1_txbuf[0];
- break;
- //+++++++++++++++++++++++++++++++++++++++++++++++
- //+++++++++++++++++++++++++++++++++++++++++++++++
- case(0x05):
- address = uart1_rxbuf[2];
- address = address << 8;
- address |= uart1_rxbuf[3];
- bitres = address & 0x0f;
- address = address >> 4;
-
- if((uart1_rxbuf[4] == 0xff) && (uart1_rxbuf[5] == 0x00))
- {
- memory[address] |= (1<< bitres);
- }
- else if((uart1_rxbuf[4] == 0x00) && (uart1_rxbuf[5] == 0x00))
- {
- memory[address] &= ~(1<< bitres);
- }
- uart1_txbuf[0] = uart1_rxbuf[0];
- uart1_txbuf[1] = uart1_rxbuf[1];
- uart1_txbuf[2] = uart1_rxbuf[2];
- uart1_txbuf[3] = uart1_rxbuf[3];
- uart1_txbuf[4] = uart1_rxbuf[4];
- uart1_txbuf[5] = uart1_rxbuf[5];
- uart1_txbuf[6] = uart1_rxbuf[6];
- uart1_txbuf[7] = uart1_rxbuf[7];
- uart1_txall = 7;
- //-----------------
- uart1_txptr = 0;
- COM1_OUT;
- USART2->DR = uart1_txbuf[0];
- break;
- //+++++++++++++++++++++++++++++++++++++++++++++++
- case(0x03):
- address = uart1_rxbuf[2];
- address = address << 8;
- address |= uart1_rxbuf[3];
- length = uart1_rxbuf[4];
- length = length << 8;
- length |= uart1_rxbuf[5];
- if(length == 0) length = 1;
- counter = 2;
- uart1_txbuf[0] = uart1_rxbuf[0];
- uart1_txbuf[1] = uart1_rxbuf[1];
-
- while(length)
- {
- counter ++;
- uart1_txbuf[counter] = memory[address] >> 8;
- counter ++;
- uart1_txbuf[counter] = memory[address] & 0x00ff;
-
- length --;
- address ++;
- }
-
- uart1_txbuf[2]= counter -2;
- uart_crc(uart1_txbuf,(counter + 1));
- uart1_txbuf[counter+1] = crc1;
- uart1_txbuf[counter+2] = crc2;
- uart1_txall = counter+2;
- uart1_txptr = 0;
- COM1_OUT;
- USART2->DR = uart1_txbuf[0];
- break;
- //+++++++++++++++++++++++++++++++++++++++++++++++
- /*
- //+++++++++++++++++++++++++++++++++++++++++++++++
- case(0x0F):
- address = uart1_rxbuf[2];
- address = address << 8;
- address |= uart1_rxbuf[3];
- bitres = address & 0x0f;
- address = address >> 4;
-
- length = uart1_rxbuf[4];
- length = length << 8;
- length |= uart1_rxbuf[5];
- uart1_txbuf[0] = uart1_rxbuf[0];
- uart1_txbuf[1] = uart1_rxbuf[1];
- uart1_txbuf[2] = uart1_rxbuf[2];
- uart1_txbuf[3] = uart1_rxbuf[3];
- uart1_txbuf[4] = uart1_rxbuf[4];
- uart1_txbuf[5] = uart1_rxbuf[5];
- ta = 0;
- counter = 7;
- //-----------------
- while(length)
- {
- if(uart1_rxbuf[counter] & (1<<ta))
- {
- memory[address] |= (1<<bitres);
- }
- else
- {
- memory[address] &= ~(1<<bitres);
- }
- bitres++;
- if(bitres == 8)
- {
- bitres = 0;
- address ++;
- }
- ta++;
- length--;
- if(ta == 8)
- {
- ta = 0;
- counter ++;
- }
-
- }
- uart_crc(uart1_txbuf,6);
- uart1_txbuf[6] = crc1;
- uart1_txbuf[7] = crc2;
- uart1_txall = 7;
- //-----------------
- uart1_txptr = 0;
- COM1_OUT;
- USART2->DR = uart1_txbuf[0];
- break;
- */
- //+++++++++++++++++++++++++++++++++++++++++++++++
- case(0x10):
- address = uart1_rxbuf[2];
- address = address << 8;
- address |= uart1_rxbuf[3];
- length = uart1_rxbuf[4];
- length = length << 8;
- length |= uart1_rxbuf[5];
- if(length == 0) length = 1;
- counter = 7;
- uart1_txbuf[0] = uart1_rxbuf[0];
- uart1_txbuf[1] = uart1_rxbuf[1];
- uart1_txbuf[2] = uart1_rxbuf[2];
- uart1_txbuf[3] = uart1_rxbuf[3];
- uart1_txbuf[4] = uart1_rxbuf[4];
- uart1_txbuf[5] = uart1_rxbuf[5];
- while(length)
- {
- tc = uart1_rxbuf[counter];
- tc = tc << 8;
- tc |= uart1_rxbuf[counter +1];
- memory[address] = tc;
- counter +=2;
- address ++;
- length --;
- }
- uart_crc(uart1_txbuf,6);
- uart1_txbuf[6] = crc1;
- uart1_txbuf[7] = crc2;
- uart1_txall = 7;
- uart1_txptr = 0;
- COM1_OUT;
- USART2->DR = uart1_txbuf[0];
- break;
- }
- /*********@@@@@@@@@@@@@@@@解釋執行程序 end @@@@@@@@@@@@@@@***********/
- uart1_rxptr = 0; //清空uart1的緩沖計數 以及 定時
- uart1_time = 0;
- }
- else
- {
- uart1_rxptr = 0; //清空uart1的緩沖計數 以及 定時
- uart1_time = 0;
- }
- }
- else
- {
- uart1_rxptr = 0; //清空uart1的緩沖計數 以及 定時
- uart1_time = 0;
- }
- }
- if((uart1_rxptr <= 4) && (uart1_time > 15))
- {
- uart1_rxptr = 0; //清空uart1的緩沖計數 以及 定時
- uart1_time = 0;
- }
- }
- /**************************************************************************** F
- * 名稱:uart0_dispose()
- * 功能:串口uart0數據處理。
- * 入口參數:無
- * 出口參數:無
- ****************************************************************************/
- void uart0_dispose(void)
- {
- unsigned short address;
- unsigned char ta;
- //
- unsigned short tt,tc;
- if((uart0_rxptr > 4) && (uart0_time > 9))
- {
- if((uart0_rxbuf[0] == 0x01)&&(uart0_rxbuf[1] == 0x55)&&(uart0_rxbuf[2] == 0xaa)&&(uart0_rxbuf[11] == 0x12)&&(uart0_rxbuf[12] == 0xef)&&(uart0_rxbuf[13] == 0xff))
- {
- /*********@@@@@@@@@@@@@@@@編程口解釋執行程序 begin @@@@@@@@@@@@@@@***********/
- if(uart0_rxbuf[3] == 0x00) //讀參數系統
- {
- address = uart0_rxbuf[5];
- address = address << 8;
- address |= uart0_rxbuf[6];
- switch(uart0_rxbuf[4])
- {
- //=====================================================================
- case(0x00):
- uart0_txbuf[7] = memory[address];
- uart0_txbuf[8] = memory[address] >> 8;
- uart0_txbuf[9] = memory[address + 1];
- uart0_txbuf[10] = memory[address + 1] >> 8;
- break;
- //=====================================================================
- case(0x11):
- uart0_txbuf[7] = program[address];
- uart0_txbuf[8] = program[address + 1];
- uart0_txbuf[9] = program[address + 2];
- uart0_txbuf[10] = program[address + 3];
- break;
- }
- uart0_txbuf[0] = 0x02;
- uart0_txbuf[1] = 0xAA;
- uart0_txbuf[2] = 0x55;
- uart0_txbuf[3] = 0x00;
- uart0_txbuf[4] = uart0_rxbuf[4];
- uart0_txbuf[5] = uart0_rxbuf[5];
- uart0_txbuf[6] = uart0_rxbuf[6];
- uart0_txbuf[11] = 0x34;
- uart0_txbuf[12] = 0xcd;
- uart0_txbuf[13] = 0xff;
- uart0_txall = 13;
- uart0_txptr = 0;
- USART1->DR = uart0_txbuf[0];
- }
- else if(uart0_rxbuf[3] == 0x11) //寫參數系統
- {
- address = uart0_rxbuf[5];
- address = address << 8;
- address |= uart0_rxbuf[6];
- switch(uart0_rxbuf[4])
- {
- //=====================================================================
- case(0x00):
- tc = uart0_rxbuf[8];
- tc = tc << 8;
- tc |= uart0_rxbuf[7];
- memory[address] = tc;
- tc = uart0_rxbuf[10];
- tc = tc << 8;
- tc |= uart0_rxbuf[9];
- memory[address + 1] = tc;
- break;
- //=====================================================================
- //=====================================================================
- case(0x11):
- if(address == 0)
- {
- FLASH_Unlock();
- FLASH_ErasePage(0x0800C000);
- FLASH_ErasePage(0x0800C400);
- FLASH_ErasePage(0x0800C800);
- FLASH_ErasePage(0x0800CC00);
-
- FLASH_ErasePage(0x0800D000);
- FLASH_ErasePage(0x0800D400);
- FLASH_ErasePage(0x0800D800);
- FLASH_ErasePage(0x0800DC00);
-
- FLASH_ErasePage(0x0800E000);
- FLASH_ErasePage(0x0800E400);
- FLASH_ErasePage(0x0800E800);
- FLASH_ErasePage(0x0800EC00);
-
- FLASH_ErasePage(0x0800F000);
- FLASH_ErasePage(0x0800F400);
- FLASH_ErasePage(0x0800F800);
- FLASH_ErasePage(0x0800FC00);
- }
-
- tc = uart0_rxbuf[8];
- tc = tc << 8;
- tc |= uart0_rxbuf[7];
- FLASH_ProgramHalfWord( (0x0800C000 + address), tc);
-
- tc = uart0_rxbuf[10];
- tc = tc << 8;
- tc |= uart0_rxbuf[9];
- FLASH_ProgramHalfWord( (0x0800C000 + address + 2), tc);
-
- break;
- }
- uart0_txbuf[0] = 0x02;
- uart0_txbuf[1] = 0xAA;
- uart0_txbuf[2] = 0x55;
- uart0_txbuf[3] = 0x11;
- uart0_txbuf[4] = uart0_rxbuf[4];
- uart0_txbuf[5] = uart0_rxbuf[5];
- uart0_txbuf[6] = uart0_rxbuf[6];
-
- uart0_txbuf[7] = uart0_rxbuf[7];
- uart0_txbuf[8] = uart0_rxbuf[8];
- uart0_txbuf[9] = uart0_rxbuf[9];
- uart0_txbuf[10] = uart0_rxbuf[10];
- uart0_txbuf[11] = 0x34;
- uart0_txbuf[12] = 0xCD;
- uart0_txbuf[13] = 0xFF;
- uart0_txall = 13;
- uart0_txptr = 0;
- USART1->DR = uart0_txbuf[0];
- }
- else if(uart0_rxbuf[3] == 0x30) //特殊指令
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
工程是IAR編譯的51hei附件下載:
STM32仿三菱PLC開源代碼.7z
(500.17 KB, 下載次數: 1167)
2019-4-18 15:16 上傳
點擊文件名下載附件
STM32仿三菱PLC開源代碼 下載積分: 黑幣 -5
STM32F103RBT6_開源PLC原理圖.pdf
(897.25 KB, 下載次數: 1048)
2019-4-18 11:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|