Chinaunix首页 | 论坛 | 博客
  • 博客访问: 630982
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:27:05

原文地址:AT89C51双机通信C程序 作者:luozhiyong131

  1. /***********************************************
  2. 文件名:8051串口发送
  3. 描 述:串口发送函数 void Uart_sent(char uart_ch)
  4.         握手协议,主机发送AA,收到BB
  5. 时 间:2011年3月1日
  6. 【 】:罗志勇
  7. ************************************************/

  8. #include <reg52.h>

  9. void uart_init(void) // X = 256 - f*2(SMOD+1)/384*BAUD

  10. {
  11.         SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1          

  12.      TMOD|= 0x20; //定时器工作方式2

  13.         PCON|= 0x80;
  14.         //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)

  15.         TH1 = 0xF3;        // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)

  16.         TL1 = 0xF3;
  17.         TR1 = 1;
  18. }

  19. void Uart_Send( char uart_chm)     //发送字符

  20. {
  21.     TI=0;
  22.     SBUF = uart_chm;         
  23.     while(TI == 0);     // 等特数据传送    (TI发送中断标志)

  24.     TI=0;             // 清除数据传送标志

  25. }

  26. void Uart_sent(char uart_ch)
  27. {    
  28.     /*握手程序(主机发送AA,从机回答BB)*/
  29.     do{                    
  30.         SBUF = 0xAA;        //发送联络信号

  31.         while(TI == 0);
  32.         TI = 0;                //清除发送标志

  33.         
  34.         while(RI == 0);        //等待回答

  35.         RI = 0;                //清除接收标志     

  36.     } while((SBUF^0xBB) != 0);        //有误,继续联络

  37.     
  38.     Uart_Send(uart_ch);                 //发送字符函数

  39. }

  40. void main(void)
  41. {    
  42.     uart_init();     //初始化串口

  43.     while(1)
  44.     {                  
  45.         Uart_sent(P1);
  46.     }
  47. }




  48. /***********************************************
  49. 文件名:8051串口接收(中断)
  50. 描 述:使用串口中断接收数据
  51.         握手协议,从机收到AA,发送BB
  52. 时 间:2011年3月1日
  53. 【 】:罗志勇
  54. ************************************************/

  55. #include <reg52.h>

  56. char uart_chm;

  57. void uart_init_r(void) // X = 256 - f*2(SMOD+1)/384*BAUD

  58. {
  59.         SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1          

  60.      TMOD|= 0x20; //定时器工作方式2

  61.         PCON|= 0x80;
  62.         //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)

  63.         TH1 = 0xF3;        // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)

  64.         TL1 = 0xF3;
  65.         TR1 = 1;
  66.         ES = 1; //开串口中断

  67.         EA = 1; // 开总中断

  68. }

  69. void Uart_receive( void)
  70. {
  71.     while(RI == 0);         // 接收数据    

  72.     RI = 0;             //清除RI接受中断标志

  73.     P1 = SBUF;         //读出数据        

  74. }

  75. void main(void)
  76. {
  77.     uart_init_r();
  78.     while(1)
  79.     {
  80.         
  81.     }
  82. }

  83. void int_Uart_resive(void)    interrupt 4
  84. {        
  85.     /*握手程序(主机发来AA,从机回答BB) */
  86.     do{        
  87.         while(RI == 0);        //等待回答

  88.         RI = 0;                //清除接收标志        

  89.      }    while((SBUF^0xAA) != 0);    //判断是否可正常接收        

  90.     
  91.     SBUF = 0xBB;        //发送联络信号

  92.     while(TI == 0);
  93.     TI = 0;    
  94.         
  95.     Uart_receive();        //接收函数


  96. }
阅读(204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~