C51 COMPILER V9.59.0.0 USART1 09/14/2020 11:27:23 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE USART1 OBJECT MODULE PLACED IN .\list\USART1.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE USART1.C OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\list\USART1 -.lst) TABS(2) OBJECT(.\list\USART1.obj) line level source 1 2 /*------------------------------------------------------------------*/ 3 /* --- STC MCU International Limited -------------------------------*/ 4 /* --- STC 1T Series MCU RC Demo -----------------------------------*/ 5 /* --- Mobile: (86)13922805190 -------------------------------------*/ 6 /* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/ 7 /* --- Tel: 86-0513-55012928,55012929,55012966 ---------------------*/ 8 /* --- Web: www.GXWMCU.com -----------------------------------------*/ 9 /* --- QQ: 800003751 ----------------------------------------------*/ 10 /* If you want to use the program or the program referenced in the */ 11 /* article, please specify in which data and procedures from STC */ 12 /*------------------------------------------------------------------*/ 13 14 15 #include "USART1.h" 16 17 18 COMx_Define COM1; 19 u8 UART1_BUF_type TX1_Buffer[COM_TX1_Lenth]; //发送缓冲 20 u8 UART1_BUF_type RX1_Buffer[COM_RX1_Lenth]; //接收缓冲 21 22 u8 USART_Configuration(u8 UARTx, COMx_InitDefine *COMx) 23 { 24 1 u8 i; 25 1 u32 j; 26 1 27 1 if(UARTx == USART1) 28 1 { 29 2 COM1.id = 1; 30 2 COM1.TX_read = 0; 31 2 COM1.TX_write = 0; 32 2 COM1.B_TX_busy = 0; 33 2 COM1.RX_Cnt = 0; 34 2 COM1.RX_TimeOut = 0; 35 2 COM1.B_RX_OK = 0; 36 2 for(i=0; iUART_Mode > UART_9bit_BRTx) return 1; //模式错误 40 2 if(COMx->UART_Polity == PolityHigh) PS = 1; //高优先级中断 *** ERROR C202 IN LINE 40 OF USART1.C: 'PolityHigh': undefined identifier 41 2 else PS = 0; //低优先级中断 42 2 SCON = (SCON & 0x3f) | COMx->UART_Mode; 43 2 if((COMx->UART_Mode == UART_9bit_BRTx) ||(COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率 44 2 { 45 3 j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算 46 3 if(j >= 65536UL) return 2; //错误 47 3 j = 65536UL - j; 48 3 if(COMx->UART_BRT_Use == BRT_Timer1) 49 3 { 50 4 TR1 = 0; 51 4 AUXR &= ~0x01; //S1 BRT Use Timer1; 52 4 TMOD &= ~(1<<6); //Timer1 set As Timer 53 4 TMOD &= ~0x30; //Timer1_16bitAutoReload; C51 COMPILER V9.59.0.0 USART1 09/14/2020 11:27:23 PAGE 2 54 4 AUXR |= (1<<6); //Timer1 set as 1T mode 55 4 TH1 = (u8)(j>>8); 56 4 TL1 = (u8)j; 57 4 ET1 = 0; //禁止中断 58 4 TMOD &= ~0x40; //定时 59 4 INT_CLKO &= ~0x02; //不输出时钟 60 4 TR1 = 1; 61 4 } 62 3 else if(COMx->UART_BRT_Use == BRT_Timer2) 63 3 { 64 4 AUXR &= ~(1<<4); //Timer stop 65 4 AUXR |= 0x01; //S1 BRT Use Timer2; 66 4 AUXR &= ~(1<<3); //Timer2 set As Timer 67 4 AUXR |= (1<<2); //Timer2 set as 1T mode 68 4 TH2 = (u8)(j>>8); 69 4 TL2 = (u8)j; 70 4 IE2 &= ~(1<<2); //禁止中断 71 4 AUXR &= ~(1<<3); //定时 72 4 AUXR |= (1<<4); //Timer run enable 73 4 } 74 3 else return 2; //错误 75 3 } 76 2 else if(COMx->UART_Mode == UART_ShiftRight) 77 2 { 78 3 if(COMx->BaudRateDouble == ENABLE) AUXR |= (1<<5); //固定波特率SysClk/2 79 3 else AUXR &= ~(1<<5); //固定波特率SysClk/12 80 3 } 81 2 else if(COMx->UART_Mode == UART_9bit) //固定波特率SysClk*2^SMOD/64 82 2 { 83 3 if(COMx->BaudRateDouble == ENABLE) PCON |= (1<<7); //固定波特率SysClk/32 84 3 else PCON &= ~(1<<7); //固定波特率SysClk/64 85 3 } 86 2 if(COMx->UART_Interrupt == ENABLE) ES = 1; //允许中断 87 2 else ES = 0; //禁止中断 88 2 if(COMx->UART_RxEnable == ENABLE) REN = 1; //允许接收 89 2 else REN = 0; //禁止接收 90 2 P_SW1 = (P_SW1 & 0x3f) | (COMx->UART_P_SW & 0xc0); //切换IO 91 2 if(COMx->UART_RXD_TXD_Short == ENABLE) PCON2 |= (1<<4); //内部短路RXD与TXD, 做中继, ENABLE,DISABLE *** ERROR C202 IN LINE 91 OF USART1.C: 'PCON2': undefined identifier 92 2 else PCON2 &= ~(1<<4); *** ERROR C202 IN LINE 92 OF USART1.C: 'PCON2': undefined identifier 93 2 return 0; 94 2 } 95 1 return 3; //其它错误 96 1 } 97 98 99 /*************** 装载串口发送缓冲 *******************************/ 100 101 void TX1_write2buff(u8 dat) //写入发送缓冲,指针+1 102 { 103 1 TX1_Buffer[COM1.TX_write] = dat; //装发送缓冲 104 1 if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0; 105 1 106 1 if(COM1.B_TX_busy == 0) //空闲 107 1 { 108 2 COM1.B_TX_busy = 1; //标志忙 109 2 TI = 1; //触发发送中断 110 2 } 111 1 } 112 113 void PrintString1(u8 *puts) C51 COMPILER V9.59.0.0 USART1 09/14/2020 11:27:23 PAGE 3 114 { 115 1 for (; *puts != 0; puts++) TX1_write2buff(*puts); //遇到停止符0结束 116 1 } 117 118 119 120 /********************* UART1中断函数************************/ 121 void UART1_int (void) interrupt UART1_VECTOR 122 { 123 1 if(RI) 124 1 { 125 2 RI = 0; 126 2 if(COM1.B_RX_OK == 0) 127 2 { 128 3 if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0; 129 3 RX1_Buffer[COM1.RX_Cnt++] = SBUF; 130 3 COM1.RX_TimeOut = TimeOutSet1; 131 3 } 132 2 } 133 1 134 1 if(TI) 135 1 { 136 2 TI = 0; 137 2 if(COM1.TX_read != COM1.TX_write) 138 2 { 139 3 SBUF = TX1_Buffer[COM1.TX_read]; 140 3 if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0; 141 3 } 142 2 else COM1.B_TX_busy = 0; 143 2 } 144 1 } 145 146 147 148 C51 COMPILATION COMPLETE. 0 WARNING(S), 3 ERROR(S)