《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

PIC单片机I/O口单线通讯的实现
程序匠人 发表于 2006-3-10 20:42:00  阅读全文 | 回复(0) | 引用通告 | 编辑

 

PIC单片机I/O口单线通讯的实现

    中、低档PIC单片机有些不带串口,有些虽然有串行口,却受串口固定协议的限制或留作他用,故需用普通I/O口进行通讯。由于中、低档机I/O口数量相对较少,为节省口线,就要用I/O口模拟串行通讯。
    本文以两片采用不同主频的PIC单片机(A机时钟频率为6MHz,使用口线RB6;B机时钟频率为4MHz,使用口线RB4)之间用异步通讯方式传送一组数据为例,说明I/O口一线通讯的实现方法。
    一、设计思想
    1.时钟同步问题
    因两个单片机的时钟不同,故采用异步通讯方式。发送、接收一位数据时,采用软件延时,保证发送、接收完全同步。
    2.数据发送、接收方式
    I/O口一线串行通讯,并-串(或串-并)转换用软件完成。将欲发送的字节存于16H中,经移位指令移至进位位。根据进位位的值,将口线RB6置0或1。接收端RB4接收并判断后,置进位标志为0或1,再经移位指令移入14H中。这样循环执行8次,就可将一个字节由低位到高位一位位地发送出去。数据传送速率可用延时循环的方法进行调节。
    3.握手协议
    先发握手信号,后发数据。假定A机为发送,B机为接收。A机开始发送时,先发送一个握手数据信号,B机收到后回送一个应答信号,表示同意接收。
    A机收到应答信号后,开始发送数据。握手信号和数据信号都按异步通讯格式,先发准备信号“1”,接着发送起始位“0”,然后发数据位。
    4.数据传送
    异步通讯时,发送时钟控制数据位的定时移位串行输出,接收时钟检测起始位,并控制数据的定时接收移入。两个时钟信号不是通过信号线传递,而是采用编程约定的办法,使之和实际使用的数据速率基本保持一致,而数据信号中的起始位则是发和收的同步控制。接收时钟为数据传送波特率的16倍频信号,即一个数据位宽的时间内将会出现16个接收时钟的信号,这是检测起始位和保证在数据位中央位置接收数据所需要的。为排除瞬时干扰,在检测到数据输入线的电平由“1”变为“0”之后,接收端将继续检测。仅当连续8个接收时钟周期内都检测到数据线上的电平为“0”时,才确认是起始位,且发送端每一个“0”或“1”都发送16次,接收端将以16倍的时钟周期,即以位宽时间为间隔,接收各数据位(在其中央位置接收数据)。一个字长数据(8位)接收完后,子程序返回。
    二、程序框图和源程序
    下面给出发送、接收一字长(8位)信号的子程序框图(见图1、图2)和PIC单片机源程序(发送、接收联络信号与数据信号相同)。注:所有延时程序略。
    1.发送子程序
   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   ;发准备信号“1”
       movlw0x08
       movwf1f       ;置发送字长
       call   ystb      ;延时同步
       movlw0x10
       movwf1c
fs1  bcf    portb,6   ;发16个起始位
       decfsz1c,1
       goto   fs1
ts    call   ystj      ;延时调节波特率
       rrf    16h,1     ;发送字节移位
      btfsc  status,0
       goto    ty
       movlw0x10
       movwf1c
fs2  bcf    portb,6   ;位为埃ⅲ保陡觥埃啊?BR>       decfsz1c,1
       goto   fs2
       goto     tr
ty    movlw0x10
       movwf1c
fs3  bsf    portb,6   ;位为1,发16个“1”
       decfsz1c,1
      goto         fs3
tr    decfsz1f,  1
      goto    ts        ;发送未完,延时发下一位
       return          ;发送结束返回
      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  ;恢复存储体0
js1  btfss   portb,4    ;检测收到“1”否
      goto    js1        ;未收到“1”继续检测
      movlw0x08      ;置接收字长8位
      movwf1f
loop1 movlw0x08      ;置循环次数8
       movwf1d
loop  btfsc  portb,4    ;检测起始位
        goto   loop1     ;未收到“0”重置8次循环
       decfsz1d,1
       goto   loop       ;收到“0”继续检测
jz    call     ystb       ;收到8个“0”,延时同步,接收数据
        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         ;未接收完,延时接收下一位
        return            ;接收完返回
        end

       

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!