在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51 單片機(jī)串行通訊中波特率的自動(dòng)檢測(cè)

            51 單片機(jī)串行通訊中波特率的自動(dòng)檢測(cè)

            作者: 時(shí)間:2012-10-16 來(lái)源:網(wǎng)絡(luò) 收藏

            AutoBaud: MOV TMOD, #01h ;初始化T0(串行口定時(shí)器)
            MOV TH0, #0 ;將T0 置于16位定時(shí)器模式
            MOV TL0, #0
            MOV TCON, #0
            MOV CharH, #0 ;預(yù)置檢測(cè)結(jié)果
            MOV CharL, #0
            AB0: JB RX, AB0 ;等待起始
            SETB TR0 ;起動(dòng)定時(shí)器 T0
            AB1: JB TF0, AB3 ;檢查定時(shí)器是否溢出?
            JNB RX, AB1 ;檢測(cè)串行信號(hào)上升沿?
            MOV CharH, TH0 ;在串行信號(hào)上升沿捕獲定時(shí)器T0數(shù)值
            MOV CharL, TL0
            AB2: JB TF0, AB3 ;檢查定時(shí)器是否溢出?
            JB RX, AB2 ;檢查串行信號(hào)下降沿?
            SJMP AB1 ;返回,繼續(xù)采集
            AB3: CLR TR0 ;最大的采集時(shí)間已經(jīng)超過(guò),檢查結(jié)果
            CLR TF0 ;清除定時(shí)器溢出標(biāo)志
            MOV BaudRate, #19 ;設(shè)置表指針
            CmpLoop: MOV A, BaudRate
            MOV DPTR, #CmpTable
            MOVC A, @A+DPTR ;取一個(gè)表項(xiàng)目(高位字節(jié))以進(jìn)行比較
            DEC BaudRate
            CJNE A, CharH, Cmp1 ;捕獲值與表項(xiàng)目的高位字節(jié)相等?
            SJMP CmpLow ;高位字節(jié)相等,檢查低位字節(jié)
            Cmp1: JC CmpMatch ;表項(xiàng)目小于定時(shí)值,則符合?
            DJNZ BaudRate, CmpLoop ;未至表項(xiàng)目的結(jié)尾,則繼續(xù)?
            SJMP CmpMatch ;至比較結(jié)束
            CmpLow: MOV A, BaudRate
            MOVC A, @A+DPTR ;取一個(gè)表項(xiàng)目(低位字節(jié))以進(jìn)行比較
            CJNE A, CharL, Cmp2 ;捕獲值與表項(xiàng)目的低位字節(jié)相等?
            SETB C ;結(jié)果相等
            Cmp2: JC CmpMatch ;如果表項(xiàng)目<定時(shí)值,則置位C
            DJNZ BaudRate, CmpLoop ;未至表項(xiàng)目的結(jié)尾,則繼續(xù)?
            CmpMatch: MOV A, BaudRate ;數(shù)據(jù)比較完成
            CLR C ;產(chǎn)生結(jié)果(波特率索引)
            RRC A
            MOV BaudRate, A ;保存結(jié)果
            RET
            ;*******************************************************
            ; CmpTable 比較表
            ;*****************************************************
            ;比較表所保持的定時(shí)值用于公認(rèn)的波特率轉(zhuǎn)換情況。表項(xiàng)目為低位(LSB)、高位(MSB)。
            ;這些數(shù)據(jù)是以12MHz為基準(zhǔn)操作。
            CmpTable: DB 40h,0 ;0 – 超出范圍,值太低
            DB 80h,0 ;1 – 38400 baud.
            DB 0,01h ;2 – 19200 baud.
            DB 0,02h ;3 – 9600 baud.
            DB 0,04h ;4 – 4800 baud.
            DB 0,08h ;5 – 2400 baud.
            DB 0,10h ;6 – 1200 baud.
            DB 0,20h ;7 – 600 baud.
            DB 0,40h ;8 – 300 baud.
            DB 0,80h ;9 – 超出范圍,值太高
            END

            附: 波特率自動(dòng)檢測(cè)程序(通過(guò)驗(yàn)證)
            RX BIT P3.0 ;串行數(shù)據(jù)接收端
            CharH EQU 30H ;計(jì)時(shí)數(shù)據(jù)高位 TH0
            CharL EQU 31H ;計(jì)時(shí)數(shù)據(jù)低位 TL0
            BaudRt EQU 32H ;波特率計(jì)算值
            ;subroutine
            AutoBaud: MOV TMOD, #01H ;初始化“T0”為計(jì)時(shí)器
            MOV TH0, #0
            MOV TL0, #0
            MOV TCON, #0
            MOV CharH, #0
            MOV CharL, #0
            JB RX, $ ;等待通訊開(kāi)始位
            SETB TR0
            CHK1: JBC TF0, CHK_END ;若溢出,則開(kāi)始計(jì)算
            JNB RX, $-2 ;檢測(cè)串行數(shù)據(jù)上升沿
            MOV CharH, TH0 ;捕獲“T0”計(jì)時(shí)數(shù)
            MOV CharL, TL0
            JBC TF0, CHK_END ;若溢出,則開(kāi)始計(jì)算
            JB RX, $-2 ;檢測(cè)串行數(shù)據(jù)下降沿
            SJMP CHK1
            CHK_END: CLR TR0 ;停止計(jì)數(shù)器
            MOV DPTR, #baudtable
            MOV BaudRt, #19
            LOOP: MOV A, BaudRt ;
            MOVC A, @A+DPTR ;取表格數(shù)據(jù)(高位)
            DEC BaudRt ;索引地址減 1
            CJNE A, CharH, CMP_1 ;檢查結(jié)果范圍
            SJMP CMP_LOW
            CMP_1: JC MATCH ;若表中值 計(jì)時(shí)值,則匹配
            DJNZ BaudRt, LOOP
            SJMP MATCH ;表查完,至結(jié)束查表程序
            CMP_LOW: MOV A, BaudRt ;高位相等,比較低位
            MOVC A, @A+DPTR
            CJNE A, CharL, CMP_2
            SETB C ;相等則匹配
            CMP_2: JC MATCH ;若低位字節(jié) 計(jì)時(shí)值,則匹配
            DJNZ BaudRt, LOOP
            MATCH: MOV A, BaudRt ;轉(zhuǎn)換為波特率索引值
            CLR C
            RRC A
            MOV BaudRt, A ;保存
            RET
            ;波特率索引表(LSB 在前,MSB 在后,晶振為11.0592MHz)
            baudtable: DB 03CH,00H ;0-越限,值太小
            DB 078H,00H ;1-波特率 38400
            DB 0F0H,00H ;2-波特率 19200
            DB 0E0H,01H ;3-波特率 9600
            DB 0C0H,03H ;4-波特率 4800
            DB 080H,07H ;5-波特率 2400
            DB 00H,00FH ;6-波特率 1200
            DB 00H,01EH ;7-波特率 600
            DB 00H,03CH ;8-波特率 300
            DB 00H,078H ;9-越限,值太大
            END


            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉