微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AT89C51双机通信C程序

AT89C51双机通信C程序

时间:11-11 来源:互联网 点击:
  1. /***********************************************
  2. 文件名:8051串口发送
  3. 描 述:串口发送函数 void Uart_sent(char uart_ch)
  4. 握手协议,主机发送AA,收到BB
  5. 时 间:2011年3月1日
  6. :罗志勇
  7. ************************************************/
  8. #include
  9. voiduart_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. voidUart_Send(charuart_chm)//发送字符
  20. {
  21. TI=0;
  22. SBUF=uart_chm;
  23. while(TI==0);// 等特数据传送(TI发送中断标志)
  24. TI=0;// 清除数据传送标志
  25. }
  26. voidUart_sent(charuart_ch)
  27. {
  28. /*握手程序(主机发送AA,从机回答BB)*/
  29. do{
  30. SBUF=0xAA;//发送联络信号
  31. while(TI==0);
  32. TI=0;//清除发送标志
  33. while(RI==0);//等待回答
  34. RI=0;//清除接收标志
  35. }while((SBUF^0xBB)!=0);//有误,继续联络
  36. Uart_Send(uart_ch); //发送字符函数
  37. }
  38. voidmain(void)
  39. {
  40. uart_init();//初始化串口
  41. while(1)
  42. {
  43. Uart_sent(P1);
  44. }
  45. }
  46. /***********************************************
  47. 文件名:8051串口接收(中断)
  48. 描 述:使用串口中断接收数据
  49. 握手协议,从机收到AA,发送BB
  50. 时 间:2011年3月1日
  51. :罗志勇
  52. ************************************************/
  53. #include
  54. charuart_chm;
  55. voiduart_init_r(void)// X = 256 - f*2(SMOD+1)/384*BAUD
  56. {
  57. SCON=0x50;//REN=1允许串行接受状态,串口工作模式1
  58. TMOD|=0x20;//定时器工作方式2
  59. PCON|=0x80;
  60. //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
  61. TH1=0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
  62. TL1=0xF3;
  63. TR1=1;
  64. ES=1;//开串口中断
  65. EA=1;// 开总中断
  66. }
  67. voidUart_receive(void)
  68. {
  69. while(RI==0);// 接收数据
  70. RI=0;//清除RI接受中断标志
  71. P1=SBUF;//读出数据
  72. }
  73. voidmain(void)
  74. {
  75. uart_init_r();
  76. while(1)
  77. {
  78. }
  79. }
  80. voidint_Uart_resive(void)interrupt 4
  81. {
  82. /*握手程序(主机发来AA,从机回答BB) */
  83. do{
  84. while(RI==0);//等待回答
  85. RI=0;//清除接收标志
  86. }while((SBUF^0xAA)!=0);//判断是否可正常接收
  87. SBUF=0xBB;//发送联络信号
  88. while(TI==0);
  89. TI=0;
  90. Uart_receive();//接收函数
  91. }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top