新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機串口通信試驗匯編程序

        51單片機串口通信試驗匯編程序

        作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
        (今天是硬生生的把它給摳出來了):PC 通過串口助手向單片機系統(tǒng)傳遞命令和數(shù)據(jù):以A5開始,以5A結(jié)束;中間是數(shù)據(jù),長度不一,要求把數(shù)據(jù)部分用led燈顯示出來;并且要求循環(huán)顯示;

        //This is my x_Edprogramcode
        //we use it as the pc communicated with themcu
        //At the same time,we want to see the result by LCD;
        STFLAG BIT 00H //收到起始碼標(biāo)志,1為收到起始碼
        EDFLAG BIT 01H //到結(jié)束碼標(biāo)志,1為收到結(jié)束碼
        TMFLAG BIT 02H //定時時間到標(biāo)志,1為定時時間到
        ORG 0000H
        SJMP Initialize//主程序入口 (初始化程序)
        ORG 000BH //定時器0入口
        LJMP TIMER0 //定時器0中斷
        ORG 0023H //串口中斷程序的入口地址
        LJMP Transfer //跳轉(zhuǎn)到接受中斷入口
        ///////////////////////////////////////////////////////////////
        ORG 0050H
        Initialize:
        MOV SP,#70H //設(shè)置堆棧
        MOV TMOD,#21H //T1工作方式2 T0工作
        MOV TH1,#0FDH //波特率9600
        MOV TL1,#0FDH //波特率9600 自動重裝載
        MOV TH0,#3CH //定時50ms
        MOV TL0,#0BH //定時50ms
        MOV SCON,#50H //串口工作方式1
        MOV R6,#00H //定時次數(shù)計數(shù)器20一秒
        MOV R5,#00H //接收數(shù)據(jù)長度計數(shù)器
        MOV R4,#00H //控制輸出控制寄存器
        MOV R0,#30H //數(shù)據(jù)存儲地址
        MOV R1,#30H //控制輸出的數(shù)據(jù)緩存
        CLR STFLAG //清起始標(biāo)志位
        CLR EDFLAG //清結(jié)束標(biāo)志位
        CLR TMFLAG //清時鐘標(biāo)志位
        SETB PS //提高串口中斷的優(yōu)先級
        SETB TR1 //打開定時器1;
        SETB ES //打開串口中斷允許位
        SETB ET0 //定時器0中斷允許位
        SETB EA //打開全局中斷允許位
        /////////////////等待接受命令////////////////////////
        Main: JB STFLAG,NODE3 //已經(jīng)收到起始位
        SJMP Main //未起始繼續(xù)等待
        NODE3: JB EDFLAG,NODE4 //已經(jīng)收到結(jié)束位
        SJMP Main //未結(jié)束繼續(xù)等待
        NODE4: SETB TR0 //打開定時器0;
        NODE5: JB TMFLAG,OUTPUT
        SJMP NODE5
        ///////////////////等待上位機傳送數(shù)據(jù)并記錄////////
        Transfer: CLR ES
        MOV A,SBUF
        CJNE A,#0A5H,NODE0 //檢測到起始位
        SETB STFLAG
        SJMP JIEDIAN
        NODE0: CJNE A,#05AH,NODE1 //檢測到結(jié)束位
        SETB EDFLAG
        MOV DPH,R5
        MOV R4,DPH
        clr ES //打開串口中斷允許位
        SJMP ret00
        NODE1: MOV @R0,A //既非起始碼,又非結(jié)束碼,則為數(shù)據(jù)
        INC R0
        INC R5
        MOV SBUF,#055H
        JIEDIAN: CLR TI
        CLR RI
        SETB ES
        ret00: RETI
        TIMER0: CLR TR0
        MOV TH0,#3CH
        MOV TL0,#0B0H
        INC R6
        CJNE R6,#20,RTN
        SETB TMFLAG
        MOV R6,#00H
        RTN: SETB TR0
        RETI

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

        OUTPUT: CLR TR0
        clr TMFLAG
        MOV A,@R1
        MOV P1,A
        INC R1
        DJNZ R4,NODE4
        MOV R1,#30H
        CLR TMFLAG
        MOV DPH,R5
        MOV R4,DPH
        SJMP NODE4
        RETI
        END



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 三台县| 土默特左旗| 乐山市| 梨树县| 抚州市| 绥德县| 横峰县| 芷江| 江源县| 博兴县| 揭阳市| 茂名市| 雷波县| 双峰县| 文昌市| 老河口市| 新乡县| 繁昌县| 霍城县| 苍溪县| 潢川县| 涞源县| 和静县| 武城县| 桓仁| 璧山县| 东丰县| 申扎县| 朔州市| 浠水县| 定西市| 河间市| 永新县| 榕江县| 安徽省| 石城县| 漳平市| 华蓥市| 富顺县| 西林县| 原阳县|