红外线发射器的原理是什么?

红外线发射器的原理是什么?,第1张

摘 要:BL9148是目前市场上颇为流行的红外线遥控发射芯片,它具有功能强、电压低、功耗小等特点。因此在音响、空调、玩具等领域获得广泛的应用。本文主要介绍其原理、特点和实际应用电路。

关键词:红外线; CMOS; 遥控发射器; BL91481. 概述

BL9148是一种CMOS大规模集成电路,它利用红外线进行发射,从而能远距离控制,是目前市场上广泛应用的典型发射芯片。

BL9148能与接收芯片BL9149联合使用,可完成10个控制功能;如果与另一种接收芯片BL9150联合使用,则能完成18种功能控制。在实际应用中,该芯片能发射75个指令,其中63个是连续指令,利用它可组成多键 *** 作;另外12个是单发指令,利用它可组成单键 *** 作。

2. 芯片简介

2.1 引脚图和引脚功能

BL9148引脚图如图1所示。

BL9148引脚功能如表1所列。2.2 推荐参数

●电源电压:3.0V

●工作电流:1.0mA(max)

●静态电流:10μA(max)

●振荡频率:455kHz

●振荡器反馈电阻:500kΩ

使用芯片时,要求使用推荐参数,否则易损坏或使芯片性能遭到破坏。3. 工作原理

BL9148内部功能结构图如图2所示。从图中看出,它由多种电路和模块组成,现将主要功能说明如下:

3.1 发送指令

该芯片的发送指令由12位码组成,如表2所列。其中C1~C3是用户码,可用来确定不同的模式。C1和C2组合,可与接收电路芯片BL9148/BL9150相匹配,C2和C3组合,可与接收芯BL9148/BL9149相匹配。上述每种组合均有三种状态:00、01和11,其中00状态不用。

用户码设定是以列线内接入二极管为界线,当T1~T3与CODE之间分别接入二极管时,用户码(C1~C3)为“1”;当T1~T3引脚不接二极管时,用户码为“0”。如果该芯片与BL9150相结合,则C3引脚必须接入二极管;如果该芯片与BL9149相结合,则C2必须接二极管,H、S1和S2是代表连续发送或单次发送的码,且分别与T1、T2和T3列的键对应。D4~D6是发送的数据码(也是键输入码)

键与码的关系如表3所列。

3.2 发送波形

a. “0”与“1”码的识别

当正脉冲的占空比为1/4时,脉冲的码位为“0”;当正脉冲的占空比为3/4时,脉冲的码位为“1”。“0”与“1”码位识别的波形图如图3所示。

b. 载波信号

无论是“0”还是“1”码位的脉冲,它们均要被发送。发送时,正脉冲是被调制在38kHz的载波上,而载波的占空比为1/3,这样有利于减少电路中的功耗。发送波形如图4所示。c.发送的基本波形

每个发送码的周期均按C1、C2、C3、H、S1、S3、D1、D2、D3、D4、D5、D6的次序串行发送,总长度为48a,其中a等于每个码周期的1/4,即a=(1/fosc)×192秒。基本波形如图5所示。

d. 单发和连续信号

当按下单发键时,输出码只发送两个周期,当按下连续键时,输出码将连续发送。每两组信号之间停顿时间为208a。发送波形如图6所示。

BL9148是一种性能较好的大规模集成芯片,功能强,应用电路多,这里主要介绍以BL9148设计红外线遥控器的典型应用电路。

由BL9148和少量外围元件组成的红外遥控发射电路如图7所示。图中3V电源电压一方面为芯片提供推荐工作电压并加到引脚16,另一方面作为信号输出指示复合管的工作电压。为了使振荡频率为455kHz,特采用外接晶振CSB455E,并外接两个电容100pF旁路到地。图7中三列T1、T2、T3和CODE分别接一个二极管,目的是为了使用户码(C1、C2、C3)为“1”。

BL194通常是CO凭证更新不成功时报的错。

检查一下收货工厂所对应的成本中心的设置是否有误。

另外检查一下是否有增强程序被调用了。

Debug跟踪一下函数'FI_DOCUMENT_PROJECT'是否出错。

另外,output设置里是否涉及到IDoc或接口?如果有,把output去掉试试。

用DS1302+单片机比较简单 DS1302程序(51汇编)

推荐

1.每次上电,必须把秒寄存器高位(第7位)设置为0,时钟才能走时。

2.如果需要写入数据和时钟日历信息,必须把“写保护”寄存器设置成为0

内存数据定义

BitCnt data 3Ch 数据位计数器

ByteCnt data 3Dh 数据字节计数器

Command data 3Eh 命令字节地址

RcvDat DATA 40H 接收数据缓冲区

XmtDat DATA 50H 发送数据缓冲区

端口位定义

IO_DATA bit P1.6 数据传送总线

SCLK bit P1.5时钟控制总线

RST bit P1.7 复位总线

RS BIT P3.5

RW BIT P3.6

EN BIT P3.7

ORG 0000H

ORG 0013H

LCALL JKS

AJMP KS

**************************** main program

ORG0030H

KS: CLR RST

MOV SP,#2AH

----LCD初始化----

CLR EN 使能端为0,液晶执行命令

INIT_LCD:

MOV A,#38H 双列显示,字形5*7点阵

ACALL WCOM

ACALL DELAY1

MOV A,#38H 双列显示,字形5*7点阵

ACALL WCOM

ACALL DELAY1

MOV A,#38H 双列显示,字形5*7点阵

ACALL WCOM

ACALL DELAY1

MOV A,#0CH 开显示,关光标

ACALL WCOM

ACALL DELAY1

MOV A,#01H 清除 LCD 显示屏

ACALL WCOM

ACALL DELAY1

MOV A,#06H 地址加1

ACALL WCOM

ACALL DELAY1

------------------------------------初始化1302-------------------------

SET1302:

LCALL Write_Enable写允许

LCALL Osc_Disable

LCALL Write_Multiplebyte初始化1302,将我们要设定的数据写入

LCALL Read_Multiplebyte将我们设定的数据读出来

LCALL Osc_Enable

START:

ACALL LCD

LCALL Read_Multiplebyte

AJMP START

---------------------LCD显示-------------------------

LCD:

MOV A,#11001000B

LCALL WCOM

MOV A,#0显示时间

MOV A,42H

LCALL SSH2

MOV A,#00111010B

LCALL WDATA

MOV A,41H

LCALL SSH2

MOV A,#00111010B

LCALL WDATA

MOV A,40H

LCALL SSH2

MOV A,#11000000B

LCALL WCOM

MOV A,#0显示日期字符

MOV A,46H

LCALL SSH2

MOV A,#00101101B

LCALL WDATA

MOV A,44H

LCALL SSH2

MOV A,#00101101B

LCALL WDATA

MOV A,43H

LCALL SSH2

RET

SSH2:

MOV B,#16

DIV AB

MOV 58H,B

MOV 59H,A

MOV A,59H

MOV DPTR,#TAB

MOVC A,@A+DPTR

ACALL WDATA

MOV A,58H

MOV DPTR,#TAB

MOVC A,@A+DPTR

ACALL WDATA

RET

-----------------------------------------------------

写指令、数据使能子程序

-----------------------------------------------------

WCOM: 写指令使能

ACALL DELAY0

MOV P0,A

CLR RS

CLR RW

CLR EN

CLR EN

CLR EN

SETB EN

RET

WDATA: 写数据使能

ACALL DELAY0

MOV P0,A

SETB RS RS=H,RW=L,D0-D7=数据,E=高脉冲

CLR RW

CLR EN

CLR EN

CLR EN

SETB EN

RET

****判忙音****

DELAY0:

MOV P0,#0FFH

CLR RS

SETB RW

CLR EN

NOP

SETB EN

JB P0.7,DELAY0

RET

TAB:DB 00110000B,00110001B,00110010B,00110011B

DB 00110100B,00110101B,00110110B,00110111B

DB 00111000B,00111001B

********************************************************************************************

发送数据程序

名称:Send_Byte

描述:发送ByteCnt 个字节给被控器DS1302

命令字节地址在Command 中

所发送数据的字节数在ByteCnt 中发送的数据在XmtDat 缓冲区中

********************************************************************************************

Send_Byte:

CLR RST 复位引脚为低电平所有数据传送终止

NOP

CLR SCLK清时钟总线

NOP

SETB RST 复位引脚为高电平逻辑控制有效

NOP

MOV A,Command准备发送命令字节

MOV BitCnt,#08h 传送位数为8

S_Byte0:

RRC A 将最低位传送给进位位C

MOV IO_DATA,C 位传送至数据总线

NOP

SETB SCLK 时钟上升沿发送数据有效

NOP

CLR SCLK 清时钟总线

DJNZ BitCnt,S_Byte0 位传送未完毕则继续

NOP

S_Byte1: 准备发送数据

MOV A,@R0 传送数据过程与传送命令相同

MOV BitCnt,#08h

S_Byte2:

RRC A

MOV IO_DATA,C

NOP

SETB SCLK

NOP

CLR SCLK

DJNZ BitCnt,S_Byte2

INC R0 发送数据的内存地址加1

DJNZ ByteCnt,S_Byte1 字节传送未完毕则继续

NOP

CLR RST 逻辑 *** 作完毕清RST

RET

***************************************************************************************

接收数据程序

名称:Receive_Byte

描述:从被控器DS1302 接收ByteCnt 个字节数据

命令字节地址在Command 中

所接收数据的字节数在ByteCnt 中接收的数据在RcvDat 缓冲区中

***********************************************************************************

Receive_Byte:

CLR RST 复位引脚为低电平所有数据传送终止

NOP

CLR SCLK 清时钟总线

NOP

SETB RST 复位引脚为高电平逻辑控制有效

MOV A,Command 准备发送命令字节

MOV BitCnt,#08h 传送位数为8

R_Byte0:

RRC A 将最低位传送给进位位C

MOV IO_DATA,C 位传送至数据总线

NOP

SETB SCLK 时钟上升沿发送数据有效

NOP

CLR SCLK 清时钟总线

DJNZ BitCnt,R_Byte0 位传送未完毕则继续

NOP

R_Byte1: 准备接收数据

CLR A 清类加器

CLR C 清进位位C

MOV BitCnt,#08h 接收位数为8

R_Byte2:

NOP

MOV C,IO_DATA 数据总线上的数据传送给C

RRC A 从最低位接收数据

SETB SCLK 时钟总线置高

NOP

CLR SCLK 时钟下降沿接收数据有效

DJNZ BitCnt,R_Byte2 位接收未完毕则继续

MOV @R1,A 接收到的完整数据字节放入接收内存缓冲区

INC R1 接收数据的内存地址加1

DJNZ ByteCnt,R_Byte1 字节接收未完毕则继续

NOP

CLR RST 逻辑 *** 作完毕清RST

RET

--写保护寄存器 *** 作------------------------------------------

Write_Enable:

MOV Command,#8Eh 命令字节为8E

MOV ByteCnt,#1 单字节传送模式

MOV R0,#XmtDat 数据地址覆给R0

MOV XmtDat,#00h 数据内容为0 写入允许

ACALL Send_Byte 调用写入数据子程序

RET

当写保护寄存器的最高位为1 时禁止数据写入寄存器---------------

Write_Disable:

MOV Command,#8Eh 命令字节为8E

MOV ByteCnt,#1 单字节传送模式

MOV R0,#XmtDat 数据地址覆给R0

MOV XmtDat,#80h 数据内容为80h 禁止写入

ACALL Send_Byte 调用写入数据子程序

RET 返回调用本子程序处

当把秒寄存器的第7 位时钟停止位设置为0 时起动时钟开始---------

Osc_Enable:

MOV Command,#80h 命令字节为80

MOV ByteCnt,#1 单字节传送模式

MOV R0,#XmtDat 数据地址覆给R0

MOV XmtDat,#00h 数据内容为0 振荡器工作允许

ACALL Send_Byte 调用写入数据子程序

RET 返回调用本子程序处

当把秒寄存器的第7 位时钟停止位设置为1 时时钟振荡器停止HT1380 进入低功耗方式---------------

Osc_Disable:

MOV Command,#80h 命令字节为80

MOV ByteCnt,#1 单字节传送模式

MOV R0,#XmtDat 数据地址覆给R0

MOV XmtDat,#80h 数据内容为80h 振荡器停止

ACALL Send_Byte 调用写入数据子程序

RET 返回调用本子程序处

写入00 年6 月21 日星期三13 时59 分59---------------------

Write_Multiplebyte:

MOV Command,#0BEh 命令字节为BEh

MOV ByteCnt,#8 多字节写入模式此模块为8 个

MOV R0,#XmtDat 数据地址覆给R0

MOV XmtDat,#59h 秒单元内容为59h

MOV XmtDat+1,#59h 分单元内容为59h

MOV XmtDat+2,#13h 时单元内容为13h

MOV XmtDat+3,#21h 日期单元内容为21h

MOV XmtDat+4,#06h 月单元内容为06h

MOV XmtDat+5,#03h 星期单元内容为03h

MOV XmtDat+6,#0 年单元内容为00h

MOV XmtDat+7,#0 写保护单元内容为00h

ACALL Send_Byte 调用写入数据子程序

RET 返回调用本子程序处

读出寄存器0-7 的内容程序设置如下

Read_Multiplebyte:

MOV Command,#0BFh 命令字节为BFh

MOV ByteCnt,#8 多字节读出模式此模块为8 个

MOV R1,#RcvDat 数据地址覆给R1

ACALL Receive_Byte调用读出数据子程序

RET返回调用本子程序处

DELAY1: 延时10MS

MOV 21H,#75

D2:MOV 22H,#100

DJNZ 22H,$

DJNZ 21H,D2

RET

=============================================================================================

END


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12125208.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存