久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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

AT89C51雙機通信C程序

作者: 時間:2016-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. }


評論


技術專區

關閉