找回密码
 注册会员
搜索附件  

15883819uart.rar

 

51单片机普通I/O口,做串口用可以和真的串口一样,设置发送和接收的波特率:
51单片机普通I/O口,做串口用,可以和真的串口一样,设置发送和接收的波特率,和发送接收的模式-51

  1. /****************************************************************************************
  2. *文件:UART2.C
  3. *功能:利用LPC900普通I/O口实现模拟串口,占用定时器1
  4. *日期:05/07/18
  5. *****************************************************************************************/
  6. #include "Reg935.h"
  7. #include "uart2.h"
  8. #define uchar unsigned char
  9. #define BRH  0xfd  //0xfe 0x95//波特率为9600,使用内部RC振荡
  10. #define BRL  0x15 //0xfd 0x15 //波特率为4800,使用内部RC振荡
  11. //////////////////////////////////////////////////////////////////////////////////////////
  12. uchar num;
  13. uchar uart2s;           //ie. SBUF2
  14. unsigned char uart2f=0; //0:disable 1:read 2:send 3: read completed 4:send completed
  15. //****************************************************************************************
  16. void timer1_isr(void) interrupt 3
  17. {
  18.   TH1=BRH;
  19.   TL1=BRL;
  20.   if(uart2f==2) //每个IF大概运行32周期,从而可以计算出BRH和BRL
  21.    {
  22.     if(num>1)
  23.       {
  24.        if(uart2s&(0x01<<(9-num)))
  25.          {uart2txd=1;}
  26.        else
  27.          {uart2txd=0;}
  28.        num--;
  29.       }
  30.     else if(num==1)
  31.          {
  32.       uart2txd=1;
  33.       //uart2f=4;
  34.        num--;
  35.       // num=9;
  36.       }
  37.     else {TR1=0;uart2f=4;}
  38.    }
  39.   if(uart2f==1)
  40.     {
  41.      if(num>1)
  42.       {
  43.        if(uart2rxd)
  44.          {uart2s=uart2s|(0x01<<(9-num));}
  45.        else
  46.          {uart2s=uart2s&~(0x01<<(9-num));}
  47.        num--;
  48.       }
  49.      // else if(num==1){if(uart2rxd)num--;
  50.      //                 }
  51.       else
  52.       {
  53.        uart2f=3;
  54.        TR1=0;
  55.        }
  56.    }
  57. }
  58. //---------------------------------------------------------------------------------------
  59. //uart2send: 向模拟串口发送一个字符
  60. //入口参数: s 被发送字符
  61. //出口参数: 无
  62. //---------------------------------------------------------------------------------------
  63. void uart2send(uchar s)
  64. {
  65.   TH1=BRH;
  66.   TL1=BRL;
  67.   num=9;
  68.   uart2s=s;
  69.   uart2f=2;
  70.   uart2txd=0;
  71.   TR1=1;
  72.   while(uart2f!=4);
  73. }
  74. //---------------------------------------------------------------------------------------
  75. //uart2read: 向模拟串口接收一个字符
  76. //入口参数 无
  77. //出口参数 s 被发送字符
  78. //---------------------------------------------------------------------------------------
  79. unsigned char uart2read(void)
  80. {
  81.   while(uart2rxd);
  82.   num=9;
  83.   uart2f=1;
  84.   TH1=BRH-1;
  85.   TL1=BRL;//-0x15;
  86.   TR1=1;
  87.   while(uart2f!=3);
  88.   while(!uart2rxd);
  89.   return(uart2s);
  90. }
  91. //---------------------------------------------------------------------------------------
复制代码

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
不错,不错,先支持一下标记,以后可能用得到{:e154:}

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 10:36 , Processed in 0.038494 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部