新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C51單片機與PC串口通信的單片機部分程序

        C51單片機與PC串口通信的單片機部分程序

        作者: 時間:2016-11-24 來源:網絡 收藏
        注意波特率是9600

        功能:電腦通過串口給單片機發一個字節,單片機收到后又給電腦發回去

        #include
        #define uchar unsigned char
        #define uint unsigned int

        uint temp;
        bit flag;
        void init_ser1();
        main()
        {
        init_ser1();
        while(1)
        {
        if(RI==1)
        {
        P1=SBUF;
        RI=0;
        }
        if(flag==1)
        {
        ES=0;//暫時關閉接收
        flag=0;
        SBUF=temp;
        while(!TI);//等待發送完畢
        TI=0;
        ES=1;
        }
        }
        }

        void sel() interrupt 4
        {
        RI=0;
        P1=SBUF;
        temp=SBUF;
        flag=1;
        }

        void init_ser1()
        {

        REN=1;
        SM0=0;
        SM1=1;
        TMOD=0x20;
        TH1=0xFD;
        TL1=0xFD;
        EA=1;
        TR1=1;
        ES=1;
        }

        本文引用地址:http://www.104case.com/article/201611/320608.htm


        //======聲明======
        #include
        unsigned char Read_Keyboard();
        void RS232_SendData(unsigned char Sdata);
        //======延遲函數======
        void delay(unsigned int t)
        {
        for(;t>0;t--); //延遲循環
        }
        //======UART初始化函數=====
        void RS232_Init()
        {
        SCON=0x50; //0101 0000 UART工作模式1,REN=1(本位為串行接收啟用位1:開始接收 0:停止接收)
        TMOD=0x20; //0010 0000 Timer1 工作模式2
        PCON=0x80; //SMOD1=1
        TH1=0xfa; //波特率9600 bps at 11.0592MHZ
        TL1=0xfa; //波特率9600 bps at 11.0592MHZ
        TR1=1;
        }
        //======主函數============
        void main()
        {
        unsigned char Keyboard_Status=0xff; //定義按鍵
        RS232_Init(); // 初始化UART
        while(1)
        {
        Keyboard_Status=Read_Keyboard()|0xf0; //讀取按鍵值(屏蔽高4位)
        //
        switch(Keyboard_Status)
        {
        case ~0x01:RS232_SendData(A);break;
        case ~0x02:RS232_SendData(B);break;
        case ~0x04:RS232_SendData(C);break;
        case ~0x08:RS232_SendData(D);break;
        default:RS232_SendData(X);break;
        }
        }
        }
        //===========發送數據函數========
        void RS232_SendData(unsigned char Sdata)
        {
        SBUF=Sdata; //發送數據
        while(TI==0); //等待發送結束
        TI=0; //清除發送結束標志
        }
        //========讀取按鍵函數==========
        unsigned char Read_Keyboard()
        {
        unsigned char Keys_Value; //定義按鍵變量
        unsigned char Keys_Temp;
        do
        {
        P1=0xff; //P2口置高,準備讀取按鍵狀態
        Keys_Temp=P1; //讀取按鍵狀態
        delay(150); //消抖延時
        P1=0xff; //P2口置高,準備讀取按鍵狀態
        Keys_Value=P1; //讀取按鍵狀態
        }
        while(Keys_Value!=Keys_Temp); //如果讀狀態不一致,則重復讀取鍵值
        return Keys_Value; //返回按鍵狀態值
        }




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 甘洛县| 香港 | 柳林县| 瑞金市| 宿迁市| 东至县| 仙居县| 宜章县| 诸城市| 莎车县| 舟山市| 五莲县| 含山县| 老河口市| 临沧市| 武安市| 丹巴县| 连平县| 大名县| 石泉县| 双桥区| 孙吴县| 万全县| 长寿区| 三门县| 左贡县| 清水河县| 汉中市| 惠安县| 彭山县| 绍兴县| 贵德县| 古蔺县| 景泰县| 琼结县| 叶城县| 藁城市| 衡南县| 花垣县| 尖扎县| 哈密市|