新聞中心

        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. }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 夏邑县| 天全县| 海淀区| 南昌市| 买车| 建湖县| 军事| 仪征市| 东莞市| 孟连| 宁河县| 株洲市| 合江县| 安岳县| 华池县| 高安市| 上虞市| 双桥区| 丹寨县| 阿拉尔市| 洛宁县| 泉州市| 伊金霍洛旗| 罗源县| 柳河县| 平远县| 天峻县| 延长县| 定襄县| 盐津县| 丰镇市| 南充市| 读书| 五常市| 阳新县| 贵定县| 和政县| 军事| 正宁县| 华亭县| 汉阴县|