新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機-串口

        51單片機-串口

        作者: 時間:2016-12-02 來源:網絡 收藏
        void main(){
        TMOD = 0x20; //工作方式2,8位自動重裝定時/計數器
        TH1 = 0xfd; //波特率為9600bps,系統晶振頻率為11.0592MHZ時需要裝入的
        TL1 = 0xfd; //TH1,TL1的值可以通過公式 T1溢出率=fosc/{12*[256-(TH1)]}
        EA = 1; //開啟CPU中斷允許位
        ES = 1; //開始串口中斷允許位
        SM1 = 1; //設置串口的工作方式為01即方式1,10位異步收發(8位數據)
        TR1 = 1; //T1開啟
        REN = 1; //允許串行接受位
        while(1){
        if(RI == 1){ //大循環進行輪詢,如果串行發送停止位開始,則RI會被硬件置1
        RI = 0;
        buzzer=0;
        delay(10);
        buzzer=1;
        delay(10);
        }
        }
        }
        兩個糾結的程序:
        由上位機發送1給單片機時,蜂鳴器以400ms頻率發聲,發2時以200ms頻率發聲,發3時以100ms頻率發聲,發4時關閑蜂鳴器。
        #include<reg52.h>
        unsigned char flag,a,num,benum;
        sbit beep=P3^4;
        void main()
        {
        TMOD=0x21;//設置定時器1為工作方式2
        TH1=0xfd;
        TL1=0xfd;
        TH0=(65536-50000)/255;
        TL0=(65536-50000)%255;
        TR1=1;
        ET0=1;
        SM0=0;
        SM1=1;
        REN=1;
        EA=1;
        ES=1;
        while(1)
        {
        if(flag==1)
        {
        EA=0;
        flag=0;
        TR0=1;
        if(a==1)
        benum=4;
        if(a==2)
        benum=2;
        if(a==3)
        benum=1;
        if(a==4)
        {
        TR0=0;
        beep=1;
        }
        EA=1;
        }
        }
        }
        void ser() interrupt 4
        {
        RI=0;
        a=SBUF;
        flag=1;
        }
        void time0() interrupt 1
        {
        TH0=(65536-50000)/255;
        TL0=(65536-50000)%255;
        num++;
        if(num>=benum)
        {
        num=0;
        beep="beep;
        }
        }
        以2400bps從計算機發送任一字節數據,當單片機收到該數據后,在此數據前加上一序號然后連同此數據一起發送至計算機,當序號超過255時歸零。
        #include<reg52.h>
        unsigned char flag,a,num,num1;
        sbit beep=P3^4;
        void main()
        {
        TMOD=0x20;//設置定時器1為工作方式2
        TH1=0xf4;
        TL1=0xf4;
        TR1=1;
        SM0=0;
        SM1=1;
        REN=1;
        EA=1;
        ES=1;
        while(1)
        {
        if(flag==1)
        {
        ES=0;
        flag=0;
        num1++;
        if(num1==255)
        num1=0;
        SBUF=num1;
        while(!TI);
        TI=0;
        SBUF=a;
        while(!TI);
        TI=0;
        ES=1;
        }
        }
        }
        void ser() interrupt 4
        {
        RI=0;
        a=SBUF;
        flag=1;
        }
        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 新泰市| 社会| 吉水县| 司法| 临沂市| 富蕴县| 皮山县| 渝北区| 四平市| 平阳县| 阳朔县| 乐业县| 时尚| 商水县| 吐鲁番市| 凤山市| 大厂| 乐都县| 墨江| 洛浦县| 三亚市| 本溪| 新竹市| 岳普湖县| 亚东县| 清流县| 东海县| 承德县| 英吉沙县| 赤壁市| 高邑县| 牟定县| 汕头市| 孙吴县| 曲麻莱县| 许昌市| 大姚县| 花莲县| 平泉县| 浮山县| 平顶山市|