找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 串口通訊例程.rar

        串口通訊例程.rar

         

        51單片機的串口通訊例程:
        51單片機的串口通訊例程詳情見附件
        1. // 采用查詢方式進行串口通訊的例子

        2. // 采用這種方式的弊端:
        3. // 1.如果對方沒有發送數據,則本機無限等待,而不能做其它事情
        4. // 2.如果對方發送數據而本機正做其它事情,那么有可能丟失數據。

        5. // 因此實際上串口接收常采用中斷方式,串口發送則不需要。


        6. #include <reg51.h>

        7. extern void serial_init(void);
        8. extern unsigned char getchar(void);
        9. extern void putchar(unsigned char ch);
        10. extern void puthex(unsigned char ch);


        11. void main(void)
        12. {
        13. unsigned char i;

        14. serial_init(); // 串口初始化


        15. do {
        16. i=getchar(); // 如果沒有收到串口數據則一直等待(查詢接收串口數據的弊端)

        17. ++i;
        18. --i; // 觀察斷點

        19. putchar(i); // 在串口顯示接收到的ASCII數據(就是把原來收到的數據再送回串口)
        20. putchar(' ');
        21. putchar(' ');

        22. putchar('0');
        23. putchar('x');
        24. puthex(i); // 在串口以十六進制格式顯示接收的ASCII數據

        25. putchar(' ');
        26. putchar(' ');

        27. ++i;
        28. --i; // 觀察斷點

        29. }while(1);
        30. }
        復制代碼



        1. // 題目:串口初始化C代碼
        2. // 要求:
        3. // 1.波特率1200bps,無奇偶校驗,停止位1,數據位8
        4. // 2.定時器T1做波特率發生器

        5. // 軟件模擬測試說明:
        6. // 1.這個測試采用查詢方式進行串口通訊
        7. // 2.將軟件仿真環境的晶震設為11.0592 MHz
        8. // 3.軟件模擬全速運行, 觀察波特率是1200bps
        9. // 4.在串口1中輸入數字或字母,可觀察到通訊是否有誤。

        10. //#pragma src

        11. #include <reg51.h>

        12. //串口初始化
        13. void serial_init(void)
        14. {
        15. //ET1 = 0; //CLR 0ABH ;禁止T1中斷
        16. TMOD = 0x20; //MOV 89H,#20H ;timer 1 mode 2: 8-Bit reload(定時器T1 模式2: 8位自動初值重裝)
        17. TH1 = 0xE8; //MOV 8DH,#0E8H
        18. TL1 = 0xE8; //MOV 8BH,#0E8H ;1200bps, 11.059
        19. TR1 = 1; //SETB 8EH ;啟動定時器1

        20. SCON = 0x50; // mode 1: 10-bit UART, enable receiver(模式1: 10位異步發送/接收, 使能接收允許位)
        21. //SM1 = 1; // ;串行口 模式1
        22. //SM0 = 0;
        23. //REN = 1; // ;允許串行中斷接收

        24. SM2 = 1; //SETB O9DH ;收到有效的停止位時才將RI置1

        25. ES = 1; //SETB 0ACH ;允許串行中斷
        26. EA = 1; //SETB 0AFH ;總中斷開
        27. }

        28. //中斷方式處理串口數據

        29. void serial(void) interrupt 4 using 1
        30. {
        31. if(RI)
        32. {
        33. // RI = 0;
        34. // 串口接收, 采用臨時緩沖
        35. }
        36. #if 0
        37. if(TI)
        38. {
        39. // TI = 0;
        40. // 串口發送, 沒有必要使用中斷方式
        41. }
        42. #endif

        43. }

        44. // 查詢方式接收串口數據
        45. unsigned char getchar(void)
        46. {
        47. while(!RI);// 沒有收到串口數據則一直等待
        48. RI=0;
        49. return SBUF;
        50. }
        51. // 查詢方式發送串口數據
        52. void putchar(unsigned char ch)
        53. {
        54. SBUF=ch;
        55. while(!TI);
        56. TI=0;
        57. }

        58. code unsigned char HEX_TAB []="0123456789ABCDEF";
        59. void puthex(unsigned char ch)
        60. {
        61. unsigned char i,j;
        62. i=ch>>4;
        63. j=ch&0x0f;
        64. putchar(HEX_TAB[i]);
        65. putchar(HEX_TAB[j]);
        66. }
        復制代碼


        不錯!!!!!!!!!
        感謝分享.....................
        感謝分享!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        {:13_780:}收下了,哈哈!~
        {:13_1488:}為什么我就下不了呢!。。。
        haohaomashangqukankan好號碼閃回去


        hsy2966于2011-3-1 23:12補充以下內容:
                #include<reg52.h>
                typedef unsigned int uint16;
                typedef unsigned char uint8;
                void init()
                {
                        TMOD=0X20;
                        TH1=0XFD;
                        TL1=0XFD;
                        TR1=1;
                        SCON=0X50;
                        ES=1;
                        EA=1;
                }
                void main()
                {
                        init();
                        while(1);

                }
                void serial() interrupt 4
                {        RI=0;
                ACC=SBUF;
                ES=0;
                P1=0Xef;
                SBUF=ACC;
                while(TI==0);
                TI=0;
                ES=1;
               
               
                }


        hsy2966于2011-3-1 23:12補充以下內容:
                #include<reg52.h>
                typedef unsigned int uint16;
                typedef unsigned char uint8;
                void init()
                {
                        TMOD=0X20;
                        TH1=0XFD;
                        TL1=0XFD;
                        TR1=1;
                        SCON=0X50;
                        ES=1;
                        EA=1;
                }
                void main()
                {
                        init();
                        while(1);

                }
                void serial() interrupt 4
                {        RI=0;
                ACC=SBUF;
                ES=0;
                P1=0Xef;
                SBUF=ACC;
                while(TI==0);
                TI=0;
                ES=1;
               
               
                }
        還在學習中,謝謝樓主了

        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網站地圖

        GMT+8, 2025-3-16 21:34 , Processed in 0.039837 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2024 Discuz! Team.

        返回頂部
        好大用力深一点动态图| 男人狂扒美女尿口亲尿口动态图| 国产精品每日在线观看男人的天堂 | 四虎影视永久在线精品| 伊人久久无码精品中文字幕| 久久精品国产亚洲av麻豆色欲 | 国产精品玖玖美女张开腿让男人桶爽免费看 | 亚洲精品人成无码中文毛片| 亚洲无线观看国产精品| 国产2021精品视频免费播放| 久草热久草热线频97精品| 国产一区二区不卡视频| 大桥未久在线精品视频在线 | 2020亚洲男人天堂精品| 国内精品久久久久久久影视麻豆| 91国语精品自产拍在线观看性色| 国产精品欧美一区二区三区不卡 | 亚洲AV无码国产精品色午友在线| 国产精品免费网站| 午夜精品久久久久9999高清| 国产精品人成在线播放新网站| 国产精品热久久无码av| 亚洲精品自产拍在线观看| 久久99国产精品99久久| 亚洲国产精品自产在线播放| 98视频精品全部国产| 热RE99久久精品国产66热| 97r久久精品国产99国产精| 日韩精品欧美激情国产一区| 51午夜精品免费视频| 午夜精品久久久内射近拍高清| 成人午夜精品视频在线观看 | laowang在线精品视频| 亚洲国产午夜中文字幕精品黄网站| xxx国产精品视频| 亚洲国产成人精品女人久久久 | 久久久91精品国产一区二区三区| 亚洲精品老司机在线观看| 国内精品一级毛片免费看| 野外一男一女一级毛片女人男人| 久久久久免费精品国产|