电工吧
◎ 电工吧 >> 设为首页 >> 加入收藏>> 联系方式 >> 投稿 >>留言 
网站首页 · 电工新闻 · 电工基础 · 电力技术 · 电子技术 · 电工图片 · 电工法规 · 电工图书 · 电工搜索 · 论坛交流
 
      最新电子论文
 · 谈谈C51的编程规范 
 · 单片机初学者不好掌握的概 
 · MC14541B制作可编程序定时 
 · AT89C系列单片机加解密原理 
 · 功能强大的时钟中断 
 · PIC系单片机与MCS-51系列单 
 · 有些51系统容易复位的解决 
 · 温度传感器ds1820的汇编程 
      推荐电子论文

 · 功能强大的时钟中断
 · DSP编程的几个关键问题
 · 寻址方式与指令系统
 · 数码管的显示一例
 · PIC单片机软件开发技巧 

  ■ 所在位置:首页>>电子技术>>单片机技术>>正文
 

PIC16系列单片机与PC机串行通信的软硬件实现

PIC16系列单片机与PC机

串行通信的软硬件实现

西安第四军医大学生物医学工程系

电子学教研室(710032) 焦 纯 陈马丁 李洪义

   摘 要 介绍一种运用PIC16F84单片机实现与PC机串行通信的方法,并给出其硬件接口电路及通信源程序。

   关键词    异步串行通信    发送与接收    VB4 Win95 串口查询法  单片机

1 前言

   美国Microchip公司的PIC16系列单片机是一种新型的CMOS工艺的8位单片机。其中,PIC16FXX单片机的程序存储器为电可擦除闪速存储器(flash),可多次修改程序,甚至可以在线编程。PIC16F83和PIC16F84片内数据存储器除RAM外,还有64字节的EEPROM,可以当作一般的或非易失性的数据存储器使用,简单方便。它还具有片内上电复位、延时电路、看门狗电路等。另外,PIC16系列单片机功耗极低,因而是一种非常适合在各种便携式设备中使用的高性价比的单片机,并已经得到了越来越广泛的应用。
   但是在许多需要大量计算的运用中,还必须借助微机的强大数据处理能力。这样必须通过通信电路实现PIC单片机与微机间的可靠数据传输。有的PIC16单片机内并没有提供串行口,所以串行通信必须通过自己设计的硬件电路和通信软件来实现。
   下面介绍用查询法实现异步串行通讯的方法。同时给出了用PIC16F84单片机的两个I/O口模拟2线串行口的硬件接口电路、程序流程框图、单片机内通信程序以及微机内的通信程序等。

2 硬件实现方法与电路

   PIC16F84单片机的程序存储器由1K×14的闪速(flash)存储器构成,它只有13条I/O口,1个定时器,为了尽量节省单片机的软硬件资源,采用下述异步串行通信的实现方法。
   如图1所示,PIC16F84在4MHz时钟下,采用半双工方式,可实现9600波特率的异步串行数据通信,1位停止位,8位数据位,无校验位。接收和发送以低位在先(一般模式),采用软件延时。为节省篇幅,单片机内的通信程序中未提供任何握手协议,用户可根据自己的需要在软件中加入握手方式。

   由于PIC16F84本身没有专门的串行口,这里用其I/O口来模拟串行口的功能。
   PC机的串行接口是符合EIA RS-232C规范的外部总线标准接口。RS-232C采用的是负逻辑,即逻辑“1”:-5V至-15V;逻辑“0”:+5V至+15V。而CMOS电平为:逻辑“1”:4.99V,逻辑“0”:0.01V;TTL电平的逻辑“1”和“0”则分别为2.4V和0.4V。因此在用RS-232C总线进行串行通信时需外接电路实现电平转换。在发送端用驱动器将TTL或CMOS电平转换为RS-232C电平,在接收端用接收器将RS—232C电平再转换为TTL或CMOS电平。
   这里选用了MAXIM公司的MAX202E来作电平转换。MAX202E属于MAXIM公司的通用串行接收/发送驱动器芯片。其外围电路简单,只需外接四个0.1μF的电容即可,如图1所示。

按此在新窗口浏览图片

图1 接口原理图

3 PIC16F84单片机内通信程序的设计

 

按此在新窗口浏览图片

图2 接收子程序框图   图3发送子程序框图

 

   图2和图3分别是串行发送和接收的子程序流程框图。发送时,通过使数据发送端DX为低电平并保持B秒(9600波特率时为104μs)来发送起始位。随后每B秒钟通过置位或清零DX端把数据发送出去。这里的B是指一位所持续的时间(B=1/波特率)。接收时,数据接收端DR大约要每B/2秒(9600波特率时为52μs)查询一次以检测起始位,如果检测到起始位,则在大约1.5B秒(9600波特率时为156μs)后检测第一位数据位,随后每B秒钟检测一次其它的数据位。
   相应的源程序如下:

;接收子程序
Rcvr

          clrwdt

;清片内看门狗
;定时器

btfsc

RA,DR;检测起始位

goto

Rcvr;未检测到起始位

movlw

8;检测到起始位

movwf

R_CNT;8位数据位
Rnext

call

Delay;延时B/2秒

bcf

STATUS,C;清进位标志

rrf

RevReg;LSB在先

btfsc

RA,DR;该位为0

 

;还是为1

bsf

RcvReg,MSB;为1

call

Delay;延时B/2秒

decfsz

R_CNT

goto

Rnext

retlw0

;返回
;发送子程序
Xmtr

clrwdt

;清片内看门狗
;定时器

movlw

8;发送位数为8

movwf

X_CNT

bcf

RA,DX;发送起始位
Xnext

call

Delay;延时B/2秒

call

Delay;延时B/2秒

rrf

XmtReg;LSB在先

btfsc

STATUS,C;检测将要发送

 

;的数据位

bsf

RA,DX;数据位为1

btfss

STATUS,C

bcf

RA,DX;数据位为0

decfsz

X_CNT;位计数为0则
;发停止位

goto

Xnext;位计数不为0
;则发下一位数据位
Xstop

call

Delay;延时B/2秒

call

Delay;延时B/2秒

Bsf

RA,DX;发送停止位

Retlw

0;返回
;延时子程序
Delay

movlw

12;52μS延时

movwf

DCNT
Dnext

decfsz

DCNT

goto

Dnext

retlw 0

4 Win95的串行通信机制及串口查询法的原理

本新闻共4页,当前在第1页  [1]  [2]  [3]  [4]  

 
         相关文章

·
·
·
·
·
·

 
 
  关于本站 | 友情站点 | 联系方式 | 版权声明 | 电工技术服务与支持中心
Copyright© 2005-2006 Dg8.Com.CN ,All Rights Reserved
电工网 电工吧 电子吧