main.c
上传用户:mhstny
上传日期:2022-08-05
资源大小:793k
文件大小:3k
源码类别:

微处理器开发

开发平台:

Unix_Linux

  1. #include "2410lib.h"
  2. #include "2410addr.h"
  3. static int UartNum=0;
  4. //===============================================================
  5. //对Uart进行初始化,以所需要的波特率为输入参数
  6. void myUart_Init(int whichuart, int baud)
  7. {
  8.    if(whichuart==0)
  9.    {
  10.         UartNum=0;
  11.         
  12. rGPHCON = rGPHCON & (~(0xffff)) ;
  13. rGPHCON = rGPHCON | (0xaaa0) ;
  14.      rGPHUP  = 0x0;    // The pull up function is enable
  15. rUFCON0=0x00;   //不使用FIFO
  16.         rUMCON0=0x00;   //不使用自动流控制
  17.         rULCON0=0x03;   //不采用红外线传输模式,无奇偶校验位,1个停止位,8个数据位
  18.         rUCON0=0x245;   //发送中断为电平方式,接收中断为边沿方式,禁止超时中断,允许产生错误状态中断,禁止回送模式,禁止中止 //信号,传输模式为中断请求模式,接收模式也为中断请求模式。
  19.         rUBRDIV0=((int)(PCLK/(baud*16))-1); //根据波特率计算UBRDIV0的值
  20. Delay(10);
  21.     }
  22.     else if(whichuart==1)
  23.     {
  24.         UartNum=1;
  25.         
  26. rGPHCON = rGPHCON & (~(0xffff)) ;
  27. rGPHCON = rGPHCON | (0xaaa0) ;
  28.      rGPHUP  = 0x0;    // The pull up function is enable
  29. rUFCON1=0x0;    
  30.         rUMCON1=0x0;   
  31.         rULCON1=0x3; 
  32.         rUCON1=0x245; 
  33.         rUBRDIV0=((int)(PCLK/(baud*16))-1);
  34.         Delay(10);
  35.     }
  36. }
  37. /*******************************************************************/
  38. void myUart_SendByte(char ch)
  39. {
  40. if (UartNum ==0)
  41.     {
  42. if(ch=='n')
  43. {
  44.     while(!(rUTRSTAT0 & 0x2));//等待,直到发送缓冲区为空
  45.     //Delay(10); //超级中断的响应速度较慢 
  46.     WrUTXH0('r');//发送回车符
  47. }
  48. while(!(rUTRSTAT0 & 0x2)); //等待,直到发送缓冲区为空
  49. Delay(10);
  50. WrUTXH0(ch);//发送字符
  51.     }
  52. else
  53.     {
  54. if(ch=='n')
  55.     {
  56.     while(!(rUTRSTAT1 & 0x2));
  57.     Delay(10); //because the slow response of hyper_terminal 
  58.     rUTXH1='r';
  59.     }
  60.     while(!(rUTRSTAT1 & 0x2));  //Wait until THR is empty.
  61.     Delay(10);
  62.     WrUTXH1(ch);
  63.     }
  64. }
  65. //====================================================================
  66. void myUart_Send (char *str)
  67. {
  68.     myUart_Init(0,115200);
  69. while (*str)
  70. myUart_SendByte(*str++);
  71. }
  72. /********************************************************************/
  73. char myUart_ReceiveByte(void)
  74. {
  75.     if(UartNum==0)
  76.     {       
  77.         while(!(rUTRSTAT0 & 0x1)); //Receive data ready
  78.         return RdURXH0();
  79.     }
  80.     else if(UartNum==1)
  81.     {       
  82.         while(!(rUTRSTAT1 & 0x1)); //Receive data ready
  83.         return RdURXH1();
  84.     }
  85.     return 0;
  86. }
  87. //===================================================================
  88. void myUart_receive(char *string)
  89. {
  90.  char *string2 = string;
  91.      char c;
  92.      myUart_Init(0,115200);
  93.      while((c = myUart_ReceiveByte())!='r')
  94.      {
  95.         if(c=='b')
  96.         {
  97.             if( (int)string2 < (int)string )
  98.             {
  99.                 printf("b b");
  100.                 string--;
  101.             }
  102.         }
  103.         else 
  104.         {
  105.             *string++ = c;
  106.             myUart_SendByte(c);
  107.         }
  108.      }
  109.      *string='';
  110.      myUart_SendByte('n');
  111. }
  112. //======================================================================
  113. int Main(void)
  114. {
  115. char aa;
  116. char *str;         
  117.     char *string;
  118.      ChangeClockDivider(1,1);
  119.      ChangeMPllValue(0xa1,0x3,0x1);   
  120.      Port_Init();
  121.     myUart_Send("Please Input a string:n");
  122.     myUart_receive(string);
  123.     *str=*string;
  124.     Delay(500);
  125.     myUart_Send(str);
  126.     while(1);
  127. }