用户名:
密 码:
 
 
 
 
 
IC芯片
 
>>  电子元件
 
>>  技术文章
 
>>  PCB技术
 
>>  IC芯片
 
>>  EDA教程
 
>>  软件下载
 
 
IC查询:
IC库存PDF资料
 
 
 
首 页 >> 技术支持 >> IC芯片
 
基于单片机串行口红外通信的设计
提交日期:2011/11/7
 

多费率电能表是我国目前节约用电和计划用电政策下不可缺少的电能计量产品,多费率电能表的通信接口一般兼有红外接口和RS485接口。红外通信具有直观、操作简便、可靠性高等优点,是电能表中使用最为普遍的一种通信方式,是电能表和掌机之间实现抄表、编程、校时、数据管理等功能的有效手段。采用新茂单片机SSU7301(51系列)、日本光电子公司的红外发射管SE303和红外接收管PIC12043,以及单片机串行口、2个定时器/计数器可以有效地实现红外通信功能。

 

1 红外通信原理

红外通信是利用波长为900nm1000nm的红外波作为信息的载体,发射装置把二进制信号经过高频调制后发送出去,接收装置把接收的红外高频信号进行解调为原来信息的一种通信传输方式。其中调制方式有脉宽调制(通过改变脉冲宽度调制信号PWM)和脉时调制(通过改变脉冲串之间时间间隔调制信号PPM)两种,本文采用PPM脉时调制方式。

 

2 串行口红外通信硬件设计

多费率电能表的红外发射和红外接收电路主要包括新茂单片机SSU7301、日本光电子公司的红外发射管SE303和红外接收管PIC12043,以及驱动三极管8550、电阻和电容,红外通信硬件原理图见图1

 

2.1 红外发射硬件设计

红外发射是利用单片机SSU7301的串行数据发送口TXD(P3.1)控制驱动三极管BG1进行二进制数据“0”和“1”的传输(数据由串行发送缓冲器SBUF中送出),以及利用P3.4口控制驱动三极管BG2进行高频38.4kHz调制(高频驱动信号由定时器/计数器T0的方式2自动重装模式产生),从而可靠地实现了红外发射管D1在传输数据“0”时进行高频红外发射和数据“1”时被截止的发射功能。状态关系见表1,波形见图2

 

2.2 红外接收硬件设计

红外接收是利用红接收管PIC12034收到高频信号输出低电平确定为数据“0”,而没收到高频信号输出高电平确定为数据“1”的方式经过解调,把数据通过单片机SSU7301的串行数据接收口RXD(P3.0)进行串行方式接收(接收数据存储在串行口缓冲器SBUF)

 

3 红外通信软件设计

DL/T645-1997《多功能电能表通信》中规定电能表的红外载波频率为38kHz±1kHz;初始速率为1200 bps;通信的字节格式为8位二进制码D0D7,传输时加上一个起始位(0),一个偶校验位P和一个停止位(1),11位,传输时先传低位,后传高位,传输序列见图3。根据以上要求,本设计中红外载波频率采用38.4kHz,波特率为1200bps,串行口采用模式39位异步通信方式,加1位起始位和1位结束位,传送一个字节数据为11位。

 

3.1 红外载波和定时器/计数器T0设置

红外载波频率f238.4kHz,当定时器/计数器T0模式控制器TMODC/T=0M1M0=10时,SSU7301的定时器/计数器T0设置成模式2方式。此时,TL0TH0预置成1个可以自动重装的8位的定时器/计数器。用软件将TL0TH0预置相同的初值后,当TL0计数值增1溢出时,一方面使TF01,申请中断;另一方面产生的溢出脉冲将TH0的数据值自动打入到TL0中去,不需要用软件对TL0重新置初值。系统的晶振f111.0592MHz,TL0TH0的初值计算如下:

 

f2=38.4kHz T=1/f2=1/38.4k26×10-6=26 μs

所以高频调制反转的周期TC=T/2=26/2=13μs

 

即定时器/计数器T0的初值TL0=TH0=28-(TC×f1)/12=256-(13×10-6×11.0592×106)/12=256-11.9808244=0F4H

在定时器/计数器T0的中断服务程序中只用两条指令即可实现高频调制, CPL P3.4RETI

 

3.2 串行口和定时器/计数器T1波特率发生器设置

串行口采用模式39位异步通信方式,波特率为1200bps。由串行口控制寄存器SCON的操作模式选择位SM0SM1都置1设置为模式3,当定时器/计数器T1模式控制器TMODC/T=0M1M0=10时,SSU7301的定时器/计数器T1设置成模式2方式作为波特率发生器,其波特率表示为:

 

波特率=T1的溢出率)/ n

SMOD=0时,n=32;当SMOD=1时,n=16,(本设计中SMOD=0)则

波特率=T1的溢出率)×2SMOD / 32

T1的溢出率=f1/12/(28-T1初值)

得:波特率=T1的溢出率)×2SMOD / 32

        =[f1/12/(28- T1初值)] ×2SMOD / 32

得:定时器/计数器T1初值

TL1=TH1=28-(f1×2SMOD )/(12×32×波特率)

           =256-(11.0592×106)/( 12×32×1200)

           =256-24=232=0E8H

 

3.3 程序设计

根据以上两点参数的设置,51系列单片机SSU7301的汇编语言程序设计如下:

 

以下为参数设置程序

MOV  TMOD, #22H :定时器/计数器T0方式2自动重装模式用于PWM38.4KHZ

;制用,定时器/计数器T1方式2自动重装模式用于串行口通讯波特率发生器

MOV  TH1,#0E8H  :波特率1200,定时器/计数器T1自动重装初值

MOV  TL1,#0E8H

MOV  TH0,#0F4H  38.4KHz高频频调制时, 定时器/计数器T0自动重装初值

MOV  TL0,#0F4H

SETB ET0        :定时器/计数器T0溢出中断允许位

SETB TR1        :定时器/计数器T1开始定时控制位

SETB TR0        :定时器/计数器T0 开始定时控制位                           

MOV  PCON,#00H  SMOD0不倍增模式

MOV  SCON,#0D0H :串行口设置为模式3,允许接收

SETB ES         :串行口允许中断

SETB EA         :开总中断允许位

:以下为定时器/计数器T0中断溢出服务程序  

ORG  000BH: 定时器/计数器T0中断入口地址

T0SERVE:CPL  P3.4 : 定时器/计数器T0定时取反P3.4口进行高频调制

RETI      :中断返回

:以下为串行口中断服务程序,以接收一个字节数据为例,多字节以此类推

ORG  0023H:串行口中断入口地址

SENDSERVE:NOP

NOP                

MOV  A,SBUF  :把接收缓冲器的数据送到A寄存器

              :进行数据处理及其它功能操作

RETI         :中断返回

:以下为串行口发送程序,以发送一个字节数据为例, 多字节以此类推

COMSEND: MOV  A,#DATAH :把数据送到A寄存器

MOV  C,P      根据A中数据产生的偶校验位送到进位标志位

MOV  TB8,C    送偶校验位到发送的第9位数据

MOV  SBUF,A   送数据到发送缓冲器

JNB  TI,$     以查询方式等待发送结束

CLR  TI       清发送中断标志位

            继续发送或其它功能操作

RET           子程序返回

 
版权所有 违者必究 © 2024 深圳市方蓝科技有限公司 support : 巨网时代