<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC單片機I/O口單線(xiàn)通訊的實(shí)現

PIC單片機I/O口單線(xiàn)通訊的實(shí)現

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

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

單片機相關(guān)文章:單片機教程


單片機相關(guān)文章:單片機視頻教程


單片機相關(guān)文章:單片機工作原理


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>