PIC单片机I-O口单线通讯的实现.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PIC单片机I-O口单线通讯的实现

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???;位为0,发16个“0”  ??????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

您可能关注的文档

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档