<del id="p0fsc"><progress id="p0fsc"></progress></del>
<dl id="p0fsc"></dl>

    一级A片网站|下载一级毛片黄片|午夜理论福利|精品毛片福利午夜视频|国产色婷婷精品免费视频|国产无码黄色一级|aⅤ高清无码免费看大片|黄片大全迷奸免费

    技術(shù)熱線: 4007-888-234

    專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

    提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

    從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

    技術(shù)支持

    PIC單片機(jī)IO口單線通訊的實現(xiàn)

    更新時間: 2019-03-23

    PIC單片機(jī)IO口單線通訊的實現(xiàn)

           中、低檔PIC單片機(jī)有些不帶串口,有些雖然有串行口,卻受串口固定協(xié)議的限制或留作他用,故需用普通I/O口進(jìn)行通訊。由于中、低檔機(jī)I/O口數(shù)量相對較少,為節(jié)省口線,就要用I/O口模擬串行通訊。
           本文以兩片采用不同主頻的PIC單片機(jī)(A機(jī)時鐘頻率為6MHz,使用口線RB6;B機(jī)時鐘頻率為4MHz,使用口線RB4)之間用異步通訊方式傳送一組數(shù)據(jù)為例,說明I/O口一線通訊的實現(xiàn)方法。
            一、設(shè)計思想
           1.時鐘同步問題
           因兩個單片機(jī)的時鐘不同,故采用異步通訊方式。發(fā)送、接收一位數(shù)據(jù)時,采用軟件延時,保證發(fā)送、接收完全同步。
           2.?dāng)?shù)據(jù)發(fā)送、接收方式
           I/O口一線串行通訊,并-串(或串-并)轉(zhuǎn)換用軟件完成。將欲發(fā)送的字節(jié)存于16H中,經(jīng)移位指令移至進(jìn)位位。根據(jù)進(jìn)位位的值,將口線RB6置0或1。接收端RB4接收并判斷后,置進(jìn)位標(biāo)志為0或1,再經(jīng)移位指令移入14H中。這樣循環(huán)執(zhí)行8次,就可將一個字節(jié)由低位到高位一位位地發(fā)送出去。數(shù)據(jù)傳送速率可用延時循環(huán)的方法進(jìn)行調(diào)節(jié)。
           3.握手協(xié)議
           先發(fā)握手信號,后發(fā)數(shù)據(jù)。假定A機(jī)為發(fā)送,B機(jī)為接收。A機(jī)開始發(fā)送時,先發(fā)送一個握手?jǐn)?shù)據(jù)信號,B機(jī)收到后回送一個應(yīng)答信號,表示同意接收。
           A機(jī)收到應(yīng)答信號后,開始發(fā)送數(shù)據(jù)。握手信號和數(shù)據(jù)信號都按異步通訊格式,先發(fā)準(zhǔn)備信號&ldquo;1&rdquo;,接著發(fā)送起始位&ldquo;0&rdquo;,然后發(fā)數(shù)據(jù)位。
           4.?dāng)?shù)據(jù)傳送
           異步通訊時,發(fā)送時鐘控制數(shù)據(jù)位的定時移位串行輸出,接收時鐘檢測起始位,并控制數(shù)據(jù)的定時接收移入。兩個時鐘信號不是通過信號線傳遞,而是采用編程約定的辦法,使之和實際使用的數(shù)據(jù)速率基本保持一致,而數(shù)據(jù)信號中的起始位則是發(fā)和收的同步控制。接收時鐘為數(shù)據(jù)傳送波特率的16倍頻信號,即一個數(shù)據(jù)位寬的時間內(nèi)將會出現(xiàn)16個接收時鐘的信號,這是檢測起始位和保證在數(shù)據(jù)位中央位置接收數(shù)據(jù)所需要的。為排除瞬時干擾,在檢測到數(shù)據(jù)輸入線的電平由&ldquo;1&rdquo;變?yōu)?amp;ldquo;0&rdquo;之后,接收端將繼續(xù)檢測。僅當(dāng)連續(xù)8個接收時鐘周期內(nèi)都檢測到數(shù)據(jù)線上的電平為&ldquo;0&rdquo;時,才確認(rèn)是起始位,且發(fā)送端每一個&ldquo;0&rdquo;或&ldquo;1&rdquo;都發(fā)送16次,接收端將以16倍的時鐘周期,即以位寬時間為間隔,接收各數(shù)據(jù)位(在其中央位置接收數(shù)據(jù))。一個字長數(shù)據(jù)(8位)接收完后,子程序返回。
        二、程序框圖和源程序
        下面給出發(fā)送、接收一字長(8位)信號的子程序框圖(見圖1、圖2)和PIC單片機(jī)源程序(發(fā)送、接收聯(lián)絡(luò)信號與數(shù)據(jù)信號相同)。注:所有延時程序略。
        1.發(fā)送子程序
       list p=16c65,f=inhx8m
    portb  equ6
    trisb  equ 16h
    status equ3
    rp0    equ5
            org0x100
    fs    bsf   status,rp0;選存儲體1
           bcf   trisb,6    ;置RB6為輸出
           bcf   status,rp0;恢復(fù)存儲體0
           bsf    portb,6   ;發(fā)準(zhǔn)備信號&ldquo;1&rdquo;
           movlw0x08
           movwf1f       ;置發(fā)送字長
           call   ystb      ;延時同步
           movlw0x10
           movwf1c
    fs1  bcf    portb,6   ;發(fā)16個起始位
           decfsz1c,1
           goto   fs1
    ts    call   ystj      ;延時調(diào)節(jié)波特率
           rrf    16h,1     ;發(fā)送字節(jié)移位
          btfsc  status,0
           goto    ty
           movlw0x10
           movwf1c
    fs2  bcf    portb,6   ;位為0,發(fā)16個&ldquo;0&rdquo;
           decfsz1c,1
           goto   fs2
           goto     tr
    ty    movlw0x10
           movwf1c
    fs3  bsf    portb,6   ;位為1,發(fā)16個&ldquo;1&rdquo;
           decfsz1c,1
          goto         fs3
    tr    decfsz1f,  1
          goto    ts        ;發(fā)送未完,延時發(fā)下一位
           return          ;發(fā)送結(jié)束返回
          end
        2.接收子程序
       list p=16c65,f=inhx8m
    portb  equ6
    trisb  equ 16h
    status equ 3
    rp0    equ5
             org   0x200
    js    bsf    status,rp0  ;選存儲體1
          bsf     trisb,4     ;置RB4為輸入
          bcf    status,rp0  ;恢復(fù)存儲體0
    js1  btfss   portb,4    ;檢測收到&ldquo;1&rdquo;否
          goto    js1        ;未收到&ldquo;1&rdquo;繼續(xù)檢測
          movlw0x08      ;置接收字長8位
          movwf1f
    loop1 movlw0x08      ;置循環(huán)次數(shù)8
           movwf1d
    loop  btfsc  portb,4    ;檢測起始位
            goto   loop1     ;未收到&ldquo;0&rdquo;重置8次循環(huán)
           decfsz1d,1
           goto   loop       ;收到&ldquo;0&rdquo;繼續(xù)檢測
    jz    call     ystb       ;收到8個&ldquo;0&rdquo;,延時同步,接收數(shù)據(jù)
            btfsc    portb,4     ;測試接收位
            goto   jy
          bcf    status,0    ;收到&ldquo;0&rdquo;置c=0
          goto   j1
    jy    bsf    status,0    ;收到&ldquo;1&rdquo;置c=1
    j1    rrf     14h,1      ;接收位移入14h
          decfsz  1f,1
          goto   jz         ;未接收完,延時接收下一位
            return            ;接收完返回
            end

    404
    返回首頁 |  返回上一頁
    一级A片网站|下载一级毛片黄片|午夜理论福利|精品毛片福利午夜视频|国产色婷婷精品免费视频|国产无码黄色一级|aⅤ高清无码免费看大片|黄片大全迷奸免费
    <del id="p0fsc"><progress id="p0fsc"></progress></del>
    <dl id="p0fsc"></dl>