新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AT89C51雙機通信C程序

AT89C51雙機通信C程序

作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
  1. /***********************************************
  2. 文件名:8051串口發(fā)送
  3. 描 述:串口發(fā)送函數(shù) void Uart_sent(char uart_ch)
  4. 握手協(xié)議,主機發(fā)送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允許串行接受狀態(tài),串口工作模式1
  12. TMOD|=0x20;//定時器工作方式2
  13. PCON|=0x80;
  14. //TH1 = 0xFD; //baud*2 /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗位無 (11.0592)
  15. TH1=0xF3;// //baud*2 /* 波特率4800、數(shù)據(jù)位8、停止位1。效驗位無 (12M)
  16. TL1=0xF3;
  17. TR1=1;
  18. }
  19. voidUart_Send(charuart_chm)//發(fā)送字符
  20. {
  21. TI=0;
  22. SBUF=uart_chm;
  23. while(TI==0);// 等特數(shù)據(jù)傳送(TI發(fā)送中斷標志)
  24. TI=0;// 清除數(shù)據(jù)傳送標志
  25. }
  26. voidUart_sent(charuart_ch)
  27. {
  28. /*握手程序(主機發(fā)送AA,從機回答B(yǎng)B)*/
  29. do{
  30. SBUF=0xAA;//發(fā)送聯(lián)絡信號
  31. while(TI==0);
  32. TI=0;//清除發(fā)送標志
  33. while(RI==0);//等待回答
  34. RI=0;//清除接收標志
  35. }while((SBUF^0xBB)!=0);//有誤,繼續(xù)聯(lián)絡
  36. Uart_Send(uart_ch); //發(fā)送字符函數(shù)
  37. }
  38. voidmain(void)
  39. {
  40. uart_init();//初始化串口
  41. while(1)
  42. {
  43. Uart_sent(P1);
  44. }
  45. }
  46. /***********************************************
  47. 文件名:8051串口接收(中斷)
  48. 描 述:使用串口中斷接收數(shù)據(jù)
  49. 握手協(xié)議,從機收到AA,發(fā)送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允許串行接受狀態(tài),串口工作模式1
  58. TMOD|=0x20;//定時器工作方式2
  59. PCON|=0x80;
  60. //TH1 = 0xFD; //baud*2 /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗位無 (11.0592)
  61. TH1=0xF3;// //baud*2 /* 波特率4800、數(shù)據(jù)位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);// 接收數(shù)據(jù)
  70. RI=0;//清除RI接受中斷標志
  71. P1=SBUF;//讀出數(shù)據(jù)
  72. }
  73. voidmain(void)
  74. {
  75. uart_init_r();
  76. while(1)
  77. {
  78. }
  79. }
  80. voidint_Uart_resive(void)interrupt 4
  81. {
  82. /*握手程序(主機發(fā)來AA,從機回答B(yǎng)B) */
  83. do{
  84. while(RI==0);//等待回答
  85. RI=0;//清除接收標志
  86. }while((SBUF^0xAA)!=0);//判斷是否可正常接收
  87. SBUF=0xBB;//發(fā)送聯(lián)絡信號
  88. while(TI==0);
  89. TI=0;
  90. Uart_receive();//接收函數(shù)
  91. }


評論


技術專區(qū)

關閉