UART1.c
上传用户:buddy3
上传日期:2022-06-12
资源大小:100k
文件大小:3k
源码类别:

GPS编程

开发平台:

C/C++

  1. #include "..config.h"
  2. //定义串口操作变量
  3. int UART1_RX_Len = 0;
  4. // 串口 1 的接收标志
  5. char nRev_UART1;
  6. // 串口 1 的接收缓冲区
  7. char UART1_RX_BUF[UART1_RX_MAXLen] = {0};
  8. /*
  9. //int nTX1_Len;
  10. //char nRX1_Len;
  11. //char nRX1_Len_temp;
  12. //char nTX1_Flag;
  13. //char nTime_Flag;
  14. //int nSend_TX1;
  15. */
  16. int ReadUART1_new = 0;
  17. void UART1_Init(void) 
  18. {
  19. //  UART1 Function, Idle line multiprocessor Protocol,9600 baud, 8n1 for Uart port
  20. UCTL1 &=~ SWRST;  //reset SWRST bit
  21. UCTL1 = SPB+CHAR; //0XD0;
  22. //9600
  23. U1BR0  = 0x74;         // Prescale divisor = 0x0174
  24.         U1BR1  = 0x01; 
  25.         U1MCTL = 0xEF;         // Modulation 11101111
  26.         
  27.         //4800
  28.          //U1BR0  = 0xE9;         // Prescale divisor = 0x02E9
  29.          //U1BR1  = 0x02; 
  30.          //U1MCTL = 0x6D;         // Modulation 01101101
  31. UTCTL1 |= SSEL0 + SSEL1;
  32. URCTL1 = 0X00;    //rx control reg.
  33. ME2 |= UTXE1 + URXE1;  //Enable USART1 TXD/RXD
  34. P3SEL |= BIT6 + BIT7;   //P3.6 and P3.7 used by USART module
  35. P3DIR |= BIT6;   //P3.6 is output
  36. P3DIR &=~ BIT7;
  37. IE2 |= URXIE1; //Enable USART 1 interrupt
  38. memset(GPS_GPRMC.GPS1_Head,0,6);
  39. strncpy(GPS_GPRMC.GPS1_Head,"$HZQJ",5);
  40. GPS_GPRMC.GPS1_Head[5] = 0;
  41. memset(GPS_GPRMC.GPS2_Command,0,7);
  42. strncpy(GPS_GPRMC.GPS2_Command,"$GPRMC",6);
  43. GPS_GPRMC.GPS2_Command[6] = 0;
  44. /*
  45. **********************************************************************
  46. 函数:UART1_RX_ISR
  47. 参数:无
  48. 返回:无
  49. 功能:处理来自串口 1 的接收中断
  50. **********************************************************************
  51. */
  52. interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void)
  53. {
  54.     //接收来自的数据 
  55.     UART1_RX_BUF[UART1_RX_Len++] = RXBUF1;
  56.     if(UART1_RX_Len >= UART1_RX_MAXLen)
  57.     {
  58.       UART1_RX_Len = 0;
  59.       memset(UART1_RX_BUF,0,UART1_RX_MAXLen);
  60.     }
  61.   
  62.     ReadUART1_new = 200;
  63. }
  64. /*
  65. **********************************************************************
  66. 函数:ReadUART1
  67. 参数:无
  68. 返回:无
  69. 功能:接收处理串口1的数据
  70. **********************************************************************
  71. */
  72. void ReadUART1(void)
  73. {
  74.   if((ReadUART1_new > 0) && ((--ReadUART1_new) == 0))
  75.   {
  76.       ReadUART1_new = 0;
  77.      
  78.       GPS_0183(UART1_RX_BUF); //GPS数据处理
  79.       //UART1_SendStr_char(UART1_RX_BUF);
  80.       
  81.       memset(UART1_RX_BUF,0,UART1_RX_MAXLen);
  82.       UART1_RX_Len = 0;  
  83.   }
  84. }
  85. /*
  86. **********************************************************************
  87. 函数:UART1_SendByte
  88. 参数:dat 要发送的数据
  89. 返回:无
  90. 功能:向串口发送字节数据,并等待发送完毕,查询方式。
  91. **********************************************************************
  92. */ 
  93. void UART1_SendByte (char dat)
  94. {
  95. U1TXBUF = dat;
  96. while ((UTCTL1 & 0x01) == 0); // 等待数据发送完毕
  97. }
  98. /*
  99. *********************************************************************************************************
  100. 函数:UART1_SendStr()
  101. 参数:str 要发送的字符串的指针
  102. 返回:无
  103. 功能:向串口发送一字符串
  104. *********************************************************************************************************
  105. */
  106. void UART1_SendStr_char (char *str)
  107. {
  108. while (1)
  109. {
  110. if (*str == '') break; // 遇到结束符,退出
  111. UART1_SendByte(*str++); // 发送数据
  112. }
  113. }