C51 COMPILER V9.59.0.0 MAIN 06/08/2021 17:32:56 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\list\main.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c OMF2 OPTIMIZE(8,SPEED) BROWSE DEBUG PRINT(.\list\main.lst) TABS(2 -) OBJECT(.\list\main.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 "config.h" 14 #include "STC8A_GPIO.h" 15 #include "STC8A_UART.h" 16 #include "STC8A_NVIC.h" 17 #include "STC8A_Delay.h" 18 #include "STC8A_Switch.h" 19 20 /************* 功能说明 ************** 21 22 例程为双串口全双工中断方式收发通讯程序。 23 24 通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回. 25 26 串口1默认波特率:115200,N,8,1. 27 28 串口2默认波特率:57600,N,8,1. 29 30 通过开启 UART.h 头文件里面的 UART1~UART4 定义,启动不同通道的串口通信。 31 32 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度。 33 34 下载时, 选择时钟 22.1184MHz (可以在配置文件"config.h"中修改). 35 36 ******************************************/ 37 38 /************* 本地常量声明 **************/ 39 40 41 /************* 本地变量声明 **************/ 42 43 44 /************* 本地函数声明 **************/ 45 46 47 /************* 外部函数和变量声明 *****************/ 48 49 50 /******************* IO配置函数 *******************/ 51 void GPIO_config(void) 52 { 53 1 GPIO_InitTypeDef GPIO_InitStructure; //结构定义 54 1 C51 COMPILER V9.59.0.0 MAIN 06/08/2021 17:32:56 PAGE 2 55 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7 56 1 GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O -UT_PP 57 1 GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //初始化 58 1 59 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7 60 1 GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O -UT_PP 61 1 GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //初始化 62 1 } 63 64 /*************** 串口初始化函数 *****************/ 65 void UART_config(void) 66 { 67 1 COMx_InitDefine COMx_InitStructure; //结构定义 68 1 69 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART -_9bit_BRTx 70 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使 -用BRT_Timer2) 71 1 COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 一般 110 ~ 115200 72 1 COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE 73 1 COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE 74 1 UART_Configuration(UART1, &COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4 75 1 NVIC_UART1_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Pri -ority_2,Priority_3 76 1 77 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,U -ART_9bit_BRTx 78 1 COMx_InitStructure.UART_BaudRate = 57600ul; //波特率, 110 ~ 115200 79 1 COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE 80 1 UART_Configuration(UART2, &COMx_InitStructure); //初始化串口2 USART1,USART2,USART3,USART4 81 1 NVIC_UART2_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Pri -ority_2,Priority_3 82 1 83 1 UART1_SW(UART1_SW_P30_P31); //UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44 84 1 UART2_SW(UART2_SW_P10_P11); //UART2_SW_P10_P11,UART2_SW_P40_P42 85 1 } 86 87 /***********************************************/ 88 void main(void) 89 { 90 1 u8 i; 91 1 92 1 GPIO_config(); 93 1 UART_config(); 94 1 EA = 1; 95 1 96 1 PrintString1("STC8 UART1 Test Programme!\r\n"); //UART1发送一个字符串 97 1 PrintString2("STC8 UART2 Test Programme!\r\n"); //UART2发送一个字符串 98 1 99 1 while (1) 100 1 { 101 2 delay_ms(1); 102 2 if(COM1.RX_TimeOut > 0) //超时计数 103 2 { 104 3 if(--COM1.RX_TimeOut == 0) 105 3 { 106 4 if(COM1.RX_Cnt > 0) 107 4 { 108 5 for(i=0; i 0) //超时计数 114 2 { 115 3 if(--COM2.RX_TimeOut == 0) 116 3 { 117 4 if(COM2.RX_Cnt > 0) 118 4 { 119 5 for(i=0; i