原创 在KEIL平台基础上实现LPC2132与MAX485进行RS485通信

2009-4-8 17:22 2752 2 2 分类: MCU/ 嵌入式

  1. http://www.pudn.com/downloads126/sourcecode/embed/detail533096.html
  2. #include <LPC213X.H>    
  3.    
  4. typedef unsigned char  uint8;                   /* defined for unsigned 8-bits integer variable     无符号8位整型变量  */   
  5. typedef signed   char  int8;                    /* defined for signed 8-bits integer variable       有符号8位整型变量  */   
  6. typedef unsigned short uint16;                  /* defined for unsigned 16-bits integer variable    无符号16位整型变量 */   
  7. typedef signed   short int16;                   /* defined for signed 16-bits integer variable      有符号16位整型变量 */   
  8. typedef unsigned int   uint32;                  /* defined for unsigned 32-bits integer variable    无符号32位整型变量 */   
  9. typedef signed   int   int32;                   /* defined for signed 32-bits integer variable      有符号32位整型变量 */   
  10. typedef float          fp32;                    /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */   
  11. typedef double         fp64;                    /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */   
  12.    
  13. #define Fosc            12000000                    //Crystal frequence,10MHz~25MHz,should be the same as actual status.     
  14.                             //应当与实际一至晶振频率,10MHz~25MHz,应当与实际一至    
  15. #define Fcclk           (Fosc * 4)                //System frequence,should be (1~32)multiples of Fosc,and should be equal or less  than 60MHz.     
  16.                             //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ    
  17. #define Fcco            (Fcclk * 4)                 //CCO frequence,should be 2、4、8、16 multiples of Fcclk, ranged from 156MHz to 320MHz.     
  18.                             //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz    
  19. #define Fpclk           (Fcclk / 4) * 1             //VPB clock frequence , must be 1、2、4 multiples of (Fcclk / 4).    
  20.                             //VPB时钟频率,只能为(Fcclk / 4)的1、2、4倍    
  21.    
  22.    
  23. /*  
  24. *********************************************************************************************************  
  25. ** 函数名称 :DelayNS()  
  26. ** 函数功能 :长软件延时。  
  27. ** 入口参数 :dly    延时参数,值越大,延时越久  
  28. ** 出口参数 :无  
  29. *********************************************************************************************************  
  30. */   
  31. void DelayNS (uint32 dly)   
  32. {   
  33.     uint32 i;   
  34.        
  35.     for ( ; dly>0; dly--)   
  36.         for (i=0; i<50000; i++);   
  37. }   
  38. #define UART_BPS    115200              // 串口通讯波特率    
  39. /*  
  40. *********************************************************************************************************  
  41. ** 函数名称 :UART0_Init()  
  42. ** 函数功能 :串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率115200。  
  43. ** 入口参数 :无  
  44. ** 出口参数 :无  
  45. *********************************************************************************************************  
  46. */   
  47. void UART0_Init (void)   
  48. {   
  49.     uint16 Fdiv;   
  50.        
  51.     U0LCR = 0x83;                       // DLAB=1,允许设置波特率    
  52.     Fdiv  = (Fpclk / 16) / UART_BPS;    // 设置波特率    
  53.     U0DLM = Fdiv / 256;   
  54.     U0DLL = Fdiv % 256;   
  55.     U0LCR = 0x03;   
  56. }   
  57. /*  
  58. *********************************************************************************************************  
  59. ** 函数名称 :UART0_GetByte()  
  60. ** 函数功能 :从串口接收1字节数据,使用查询方式接收。  
  61. ** 入口参数 :无  
  62. ** 出口参数 :接收到的数据  
  63. *********************************************************************************************************  
  64. */   
  65. uint8 UART0_GetByte (void)   
  66. {   
  67.     uint8 rcv_dat;   
  68.     IO0CLR |=1<<31;   
  69.     while ((U0LSR & 0x01) == 0);   
  70.     rcv_dat = U0RBR;   
  71.        
  72.     return (rcv_dat);      
  73. }   
  74. /*  
  75. *********************************************************************************************************  
  76. ** 函数名称 :UART0_GetStr()  
  77. ** 函数功能 :从串口接收  
  78. ** 入口参数 :   s   指向接收数据数组的指针  
  79. **              n   接收的个数  
  80. ** 出口参数 :   无  
  81. *********************************************************************************************************  
  82. */   
  83. void UART0_GetStr (uint8 *s, uint32 n)   
  84. {   
  85.     for ( ; n>0; n--)   
  86.     {   
  87.         *s++ = UART0_GetByte();   
  88.     }   
  89. }   
  90. /*  
  91. *********************************************************************************************************  
  92. ** 函数名称 :UART0_SendByte()  
  93. ** 函数功能 :向串口发送字节数据,并等待发送完毕,查询方式。  
  94. ** 入口参数 :dat    要发送的数据  
  95. ** 出口参数 :无  
  96. *********************************************************************************************************  
  97. */   
  98. void UART0_SendByte (uint8 dat)   
  99. {   
  100.      IO0SET |=1<<31;   
  101.     U0THR = dat;   
  102.     while ((U0LSR & 0x40) == 0);        // 等待数据发送完毕    
  103. }   
  104. /*  
  105. *********************************************************************************************************  
  106. ** 函数名称 :UART0_SendStr()  
  107. ** 函数功能 :向串口发送一字符串  
  108. ** 入口参数 :str    要发送的字符串的指针  
  109. ** 出口参数 :无  
  110. *********************************************************************************************************  
  111. */   
  112. void UART0_SendStr (uint8 const *str)   
  113. {   
  114.     while (1)   
  115.     {   
  116.         if (*str == '\0')   break;      // 遇到结束符,退出    
  117.         UART0_SendByte(*str++);         // 发送数据    
  118.     }   
  119. }   
  120.    
  121. /*  
  122. *********************************************************************************************************  
  123. ** 函数名称 :main()  
  124. ** 函数功能 :从串口UART0接收字符串"Hello EasyARM2131!",并发送回上位机显示。  
  125. ** 调试说明 :需要PC串口显示终端软件如EasyARM.exe。  
  126. *********************************************************************************************************  
  127. */   
  128. int main (void)   
  129. {   
  130.     uint8 snd[2];   
  131.     uint8 RCV[2];   
  132.     memset(RCV,0,2);   
  133.     IO0DIR |=1<<31;   
  134.     IO0CLR |=1<<31;   
  135.     PINSEL0  |=0x05;    /* Select the pins for Uart 选择管脚为UART0 */   
  136.    
  137.        
  138.     UART0_Init();                       // 串口初始化    
  139.    snd[0]='a';   
  140.    snd[1]='b';   
  141.     //UART0_GetStr(snd,18);             // 从串口接收字符串    
  142.     //DelayNS(10);    
  143.    while (1)   
  144.    {       
  145.     //UART0_SendStr(snd);                   // 向串口发送字符串    
  146.     DelayNS(10);   
  147.     UART0_GetStr(RCV,2);   
  148.     DelayNS(10);   
  149.     }   
  150.        
  151.     return 0;   
  152. }   
  153. /*********************************************************************************************************  
  154. **                            End Of File  
  155. ********************************************************************************************************/   
  156.    
  157. /*  
  158. *******************************************************************************************************  
  159. **                            End Of File  
  160. ********************************************************************************************************/   
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条