×
单片机 > 单片机程序设计 > 详情

AT89C51双机通信C程序

发布时间:2020-06-20 发布时间:
|
  1. /***********************************************
  2. 文件名:8051串口发送
  3. 描 述:串口发送函数 void Uart_sent(char uart_ch)
  4.         握手协议,主机发送AA,收到BB
  5. 时 间:2011年3月1日
  6. 【 】:罗志勇
  7. ************************************************/
  8.  
  9. #include  
  10.  
  11. void uart_init(void) // X = 256 - f*2(SMOD+1)/384*BAUD 
  12.  
  13.         SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1           
  14.  
  15.      TMOD|= 0x20; //定时器工作方式2 
  16.  
  17.         PCON|= 0x80; 
  18.         //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) 
  19.  
  20.         TH1 = 0xF3;        // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
  21.  
  22.         TL1 = 0xF3; 
  23.         TR1 = 1; 
  24.  
  25. void Uart_Send( char uart_chm)     //发送字符
  26.  
  27.     TI=0; 
  28.     SBUF = uart_chm;         
  29.     while(TI == 0);     // 等特数据传送    (TI发送中断标志)
  30.  
  31.     TI=0;             // 清除数据传送标志
  32.  
  33.  
  34. void Uart_sent(char uart_ch)
  35. {     
  36.     /*握手程序(主机发送AA,从机回答BB)*/
  37.     do{                    
  38.         SBUF = 0xAA;        //发送联络信号
  39.  
  40.         while(TI == 0);
  41.         TI = 0;                //清除发送标志
  42.  
  43.          
  44.         while(RI == 0);        //等待回答
  45.  
  46.         RI = 0;                //清除接收标志     
  47.  
  48.     } while((SBUF^0xBB) != 0);        //有误,继续联络
  49.  
  50.      
  51.     Uart_Send(uart_ch);                 //发送字符函数
  52.  
  53. }
  54.  
  55. void main(void)
  56. {     
  57.     uart_init();     //初始化串口
  58.  
  59.     while(1)
  60.     {                  
  61.         Uart_sent(P1);
  62.     }
  63. }
  64.  
  65.  
  66.  
  67.  
  68. /***********************************************
  69. 文件名:8051串口接收(中断)
  70. 描 述:使用串口中断接收数据
  71.         握手协议,从机收到AA,发送BB
  72. 时 间:2011年3月1日
  73. 【 】:罗志勇
  74. ************************************************/
  75.  
  76. #include  
  77.  
  78. char uart_chm;
  79.  
  80. void uart_init_r(void) // X = 256 - f*2(SMOD+1)/384*BAUD 
  81.  
  82.         SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1           
  83.  
  84.      TMOD|= 0x20; //定时器工作方式2 
  85.  
  86.         PCON|= 0x80; 
  87.         //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) 
  88.  
  89.         TH1 = 0xF3;        // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
  90.  
  91.         TL1 = 0xF3; 
  92.         TR1 = 1; 
  93.         ES = 1; //开串口中断 
  94.  
  95.         EA = 1; // 开总中断 
  96.  
  97.  
  98. void Uart_receive( void) 
  99.     while(RI == 0);         // 接收数据    
  100.  
  101.     RI = 0;             //清除RI接受中断标志
  102.  
  103.     P1 = SBUF;         //读出数据        
  104.  
  105.  
  106. void main(void)
  107. {
  108.     uart_init_r();
  109.     while(1)
  110.     {
  111.         
  112.     }
  113. }
  114.  
  115. void int_Uart_resive(void)    interrupt 4 
  116. {        
  117.     /*握手程序(主机发来AA,从机回答BB) */
  118.     do{        
  119.         while(RI == 0);        //等待回答
  120.  
  121.         RI = 0;                //清除接收标志        
  122.  
  123.      }    while((SBUF^0xAA) != 0);    //判断是否可正常接收        
  124.  
  125.     
  126.     SBUF = 0xBB;        //发送联络信号
  127.  
  128.     while(TI == 0);
  129.     TI = 0;    
  130.          
  131.     Uart_receive();        //接收函数
  132.  
  133.  
  134. }
关键字:AT89C51  双机通信  C程序

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项