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

GPS编程

开发平台:

C/C++

  1. #include "..config.h"
  2. //定义串口操作变量
  3. // 串口 0 的接收标志
  4. char nRev_UART0 ;
  5. // 串口 0 的接收缓冲区
  6. int UART0_RX_Len = 0;
  7. char UART0_RX_BUF[UART0_RX_MAXLen] = {0};
  8. /*
  9. int nTX0_Len;
  10. char nRX0_Len;
  11. char nTX0_Flag;
  12. //char nTime_Flag;
  13. int nSend_TX0;
  14. */
  15. int ReadUART0_new = 0;
  16. /*
  17. **********************************************************************
  18. 函数:UART0_Init
  19. 参数:无
  20. 返回:无
  21. 功能:串口0初始化程序
  22. **********************************************************************
  23. */
  24. void UART0_Init(void)
  25. {
  26. //  UART0 Function, Idle line multiprocessor Protocol, 9600,8,n,1 for GSM
  27. UCTL0 &= ~SWRST;  //reset SWRST bit
  28. UCTL0 = SPB+CHAR; //
  29. //9600
  30. U0BR0  = 0x74;         // Prescale divisor = 0x0174
  31.         U0BR1  = 0x01; 
  32.         U0MCTL = 0xEF;         // Modulation 11101111
  33.         
  34.         //4800
  35.          //U0BR0  = 0xE9;         // Prescale divisor = 0x02E9
  36.          //U0BR1  = 0x02; 
  37.          //U0MCTL = 0x6D;         // Modulation 01101101
  38.         
  39. UTCTL0 |= SSEL0+SSEL1;   //UCLK = ACLK 0X10;    tx control reg.
  40. URCTL0 = 0x00;    //rx control reg.
  41. ME1 |=URXE0+UTXE0;  // //Enable USART1 TXD/RXD
  42. P3SEL |= BIT4+BIT5;   //P3.4 and P3.5 used by USART module
  43. P3DIR |= BIT4;   //P3.4 is output
  44. P3DIR &=~ BIT5;   //P3.5 is input
  45. IE1 |= URXIE0;  //enable uart0 interrupt*/
  46. /*
  47. **********************************************************************
  48. 函数:UART0_RX_ISR
  49. 参数:无
  50. 返回:无
  51. 功能:处理来自串口 0 的接收中断
  52. **********************************************************************
  53. */
  54. interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void)
  55. {
  56.     //接收来自的数据 
  57.     UART0_RX_BUF[UART0_RX_Len++] = RXBUF0;
  58.       
  59.     
  60.     if(UART0_RX_Len >= UART0_RX_MAXLen)
  61.     {
  62.       UART0_RX_Len = 0;
  63.       memset(UART0_RX_BUF,0,UART0_RX_MAXLen);
  64.     }
  65.     ReadUART0_new = 200;
  66. }
  67. /*
  68. **********************************************************************
  69. 函数:ReadUART0
  70. 参数:无
  71. 返回:无
  72. 功能:接收处理串口0的数据
  73. **********************************************************************
  74. */
  75. void ReadUART0(void)
  76. {
  77.   if((ReadUART0_new > 0) && ((--ReadUART0_new) == 0))
  78.   {
  79.       ReadUART0_new = 0;
  80.       
  81.       ReadGSMReturn(UART0_RX_BUF);
  82.       GPRS_Con(UART0_RX_BUF);
  83.       
  84.       memset(UART0_RX_BUF,0,UART0_RX_MAXLen);
  85.       UART0_RX_Len = 0;  
  86.   }
  87. }
  88. /*
  89. **********************************************************************
  90. 函数:UART0_SendByte
  91. 参数:dat 要发送的数据
  92. 返回:无
  93. 功能:向串口发送字节数据,并等待发送完毕,查询方式。
  94. **********************************************************************
  95. */ 
  96. void UART0_SendByte (char dat)
  97. {
  98. U0TXBUF = dat;
  99. while ((UTCTL0 & 0x01) == 0); // 等待数据发送完毕
  100. }
  101. /*
  102. *********************************************************************************************************
  103. 函数:UART0_SendStr()
  104. 参数:str 要发送的字符串的指针
  105. 返回:无
  106. 功能:向串口发送一字符串
  107. *********************************************************************************************************
  108. */
  109. void UART0_SendStr_char (char *str)
  110. {
  111. while (1)
  112. {
  113. if (*str == '') break; // 遇到结束符,退出
  114. UART0_SendByte(*str++); // 发送数据
  115. }
  116. }