


所以高频调制反转的周期TC=T/2=26/2=13μs 即定时器/计数器T0的初值TL0=TH0=28-(TC×f1)/12=256-(13×10-6×11.0592×106)/12=256-11.9808≈244=0F4H
在定时器/计数器T0的中断服务程序中只用两条指令即可实现高频调制,即 CPL P3.4和RETI。 3.2 串行口和定时器/计数器T1波特率发生器设置 串行口采用模式3为9位异步通信方式,波特率为1200bps。由串行口控制寄存器SCON的操作模式选择位SM0、SM1都置1设置为模式3,当定时器/计数器T1模式控制器TMOD中C/T=0和M1M0=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 ;SMOD为0不倍增模式
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 子程序返回 4 结束语 本设计的最大特点在于省略了脉冲振荡器,而仅仅利用多费率电能表上所带单片机的串行口和2个定时器/计数器,这不仅使多费率电能表在硬件设计上更加简单、成本更加低廉,而且在软件上也更加方便、可靠。同时这种红外通信方式也可以应用在带串行口和定时器/计数器的单片机应用领域。