大家给个红外的简易电路
发布网友
发布时间:2022-05-01 06:46
我来回答
共2个回答
热心网友
时间:2022-06-25 17:23
下面是我曾经做过的一个电路设计,看你用得上不? 用红外线遥控电机转速哦,对了,还给把发射电路给忘掉了,这次补上,再把单片机程序也送上!
单片机程序:接收程序:;******************************;接收控制系统软件程序;******************************;;******************************;主程序和中断程序入口;****************************** ORG 0000H ;复位地址 LJMP START ORG 0003H ;外中断0中断入口地址 LJMP INT0SERVE ORG 000BH ;定时器T0中断入口地址 RETI ORG 0013H ;外中断1中断入口地址 RETI ORG 001BH ;定时器T1中断入口地址 LJMP T1SERVE ORG 0023H ;串行口中断入口地址 RETI ORG 002BH ;定时器T2中断入口地址 RETI; `;******************************;主程序;******************************START: MOV SP,#60H ;设堆栈 LCALL CLEAR ;调初始化程序 NOPMAIN: JB P2.0,MAIN ;50Hz交流电过零检测等待 LCALL DELAYXUS ;调用延时子程序即控制导通角 CLR P2.7 ;发开导通角脉冲 LCALL DELAY256US ;延时256μs SETB P2.7 ;关脉冲 LJMP MAIN NOP NOP LJMP START ;设置软件陷阱;;******************************;初始化程序;******************************CLEAR: MOV A,#0FFH MOV P0,A ;P1~P3口置位 MOV P1,A MOV P2,A MOV P3,A MOV B,#26H ;设置导通角为零的延时值 MOV P1,#0FEH SETB 50H ;默认设置电机为停标志位 SETB P2.7 MOV IE,#00H ;关总中断 CLR RS0 ;设当前工作区为0区 CLR RS1 MOV IP,#01H ;设优先级 SETB EX0 ;开外中断0 SETB IT0 MOV TMOD,#10H MOV TH1,#3CH ;开定时器1 MOV TL1,#0B0H SETB ET1 SETB TR1 MOV R7,#0AH SETB EA ;开总中断 RET;;******************************;外部中断0服务程序;******************************INT0SERVE: CLR EX0 ;关外中断0 JNB P3.1,INT0SERVE1 ;确认中断INT0RET: SETB EX0 ;开外中断0,返回 RETIINT0SERVE1: CLR A MOV DPH,A ;清DPTR MOV DPL,AINT0SERVE2: JB P3.1,INT0SERVE3 ;用DPTR对第一个低电平计时 INC DPTR NOP NOP AJMP INT0SERVE2 ;循环周期是8μsINT0SERVE3: MOV A,DPH ;DPTR的高8位放入A中 JZ INT0RET ;不为0,说明DPL有进位则8μs×255=2ms, ;即是第一个脉冲。为0,说明内小于2ms是一干扰 CLR AINT0SERVE4: INC A ;脉冲个数加1INT0SERVE5: JNB P3.1,INT0SERVE5 ;等待低电平 MOV R1,#06H ;帧间高电平宽度判断定时值,即一帧结束的判断INT0SERVE6: JNB P3.1,INT0SERVE4 ;低电平时转脉冲个数加1 LCALL DELAY513US ;延时513μs DJNZ R1,INT0SERVE6 DEC A ;超过3ms判定为一帧结束 DEC A JZ FUNCTION0 ;为0则转功能0 DEC A JZ FUNCTION1 ;为0则转功能1 DEC A JZ FUNCTION2 ;为0则转功能2 DEC A JZ FUNCTION3 ;为0则转功能3 DEC A JZ FUNCTION4 ;为0则转功能4 DEC A JZ FUNCTION5 ;为0则转功能5 NOP NOP LJMP INT0RET ;返回FUNCTION0: JB 50H,FUNCTION01 MOV B,#16H ;功能0操作3档转速 MOV P1,#0EDHFUNCTION01: NOP NOP LJMP INT0RET ;返回FUNCTION1: JB 50H,FUNCTION11 MOV B,#1CH ;功能操作1档转速 MOV P1,#0F9HFUNCTION11: NOP NOP LJMP INT0RET ;返回FUNCTION2: JB 50H,FUNCTION21 MOV B,#12H ;功能2操作4档转速 MOV P1,#0DDHFUNCTION21: NOP NOP LJMP INT0RET ;返回FUNCTION3: JB 50H,FUNCTION31 MOV B,#19H ;功能3操作3档转速 MOV P1,#0F5HFUNCTION31: NOP NOP LJMP INT0RET ;返回FUNCTION4: JB 50H,FUNCTION41 MOV B,#0EH ;功能4操作5档转速 MOV P1,#0BDHFUNCTION41: NOP LJMP INT0RET ;返回FUNCTION5: JB 50H,FUNCTION51 ;功能5操作电机启/停操作 SETB 50H MOV B,#26H MOV P1,#0FEH AJMP FUNCTION52FUNCTION51: CLR 50H MOV B,#1CH MOV P1,#0F9HFUNCTION52: NOP NOP LJMP INT0RET;;****************************************;控制导通角延时程序;****************************************DELAYXUS: MOV R2,BDELAYXUS1: LCALL DELAY256US DJNZ R2,DELAYXUS1 RET;;****************************************;闪烁调节,定计1中断服务程序;****************************************T1SERVE: CLR TR1 CLR ET1 DJNZ R7,T1SERVERET MOV R7,#0AH JB 50H,T1SERVE1 CPL P1.1 AJMP T1SERVERETT1SERVE1: CPL P1.0T1SERVERET: MOV TH1,#3CH MOV TL1,#0B0H SETB ET1 SETB TR1 RETI;;****************************************;延时256μs程序;****************************************DELAY256US: MOV R4,#126DELAY256US1: DJNZ R4,DELAY256US1 RET;;****************************************;延时513μs程序;****************************************DELAY513US: MOV R5,#254DELAY513US1: DJNZ R4,DELAY513US1 RET END发射程序:;遥控系统软件程序;;*****************************;主程序和中断程序入口;*****************************;org 0000H ;复位地址ljmp startorg 0003h ;外中断0中断入口地址reti org 000BH ;定时器T0中断入口地址retiorg 0013h ;外中断1中断入口地址ljmp int1serve org 001Bh ;定时器T1中断入口地址ljmp T1SERVEorg 0023h ;串行中断入口地址retiorg 002Bh ;定时器T2中断入口地址reti;;*****************************;初始化程序;*****************************clear: MOV P1,#0FFH ;P1,P3口置位 MOV P3,#0FFH CLR P3.5 ;关遥控输出 MOV SP,#70H ;设堆栈 MOV IE,#00H ;关总中断 MOV IP,#04H ;设优先级 MOV TMOD,#20H ;设定时器2自动重装模式 MOV TH1,#0F3H ;定时13μs MOV TL1,#0F3H SETB EX1 ;开外中断1 SETB IT1 SETB EA ;开总中断 RET;;*****************************;主程序;*****************************START: LCALL CLEAR ;调试初始化程序MAIN: LCALL KEYWORDK ;调键盘程序 ORL PCON,#01H ;进入低功耗待机状态 LJMP MAIN NOP NOP ;设置软件陷阱 NOP LJMP START;;*****************************;外部中断1服务程序;*****************************INT1SERVE: CLR IE1 ANL PCON,#00H ;触发待机状态苏醒 RETI;;*****************************;定时/计数1溢出中断服务程序;*****************************T1SERVE: CPL P3.5 ;高频调制 RETI NOP ;设置软件陷阱 NOP NOP LJMP START;;*****************************;键盘程序;*****************************KEYWORDK: MOV P1,#0FFH ;置列线 CLR P3.7 ;清行线 MOV A,P1 MOV B,A CJNE A,#0FFH,KEY1 ;有键按下则不转移KEYWORDKOUT: NOP NOP RET ;键盘程序返回KEY1: LCALL DELAY5MS ;延时消抖 MOV A,P1 CJNE A,B,KEYWORDKOUT ;确认键按下 MOV DPTR,#KEYWORDKTAB1 MOV B,A ;查列号 CLR A MOV R0,AKEY2: MOV A,R0 SUBB A,#80H JNC KEYWORDKOUT MOV A,R0 MOVC A,@A+DPTR INC R0 CJNE A,B,KEY2 DEC R0 MOV A,R0 ;键号放入A MOV B,A ;键号乘3处理LJMP散转指令 ADD A,B ADD A,B MOV DPTR,#KEYWORDKTAB2 JMP @A+DPTRKEYWORDKTAB2: LJMP FUNCATION0 LJMP FUNCATION1 LJMP FUNCATION2 LJMP FUNCATION3 LJMP FUNCATION4 LJMP FUNCATION5 RETKEYWORDKTAB1: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7EH RET;;*************************;发脉冲程序;*************************FUNCATION0: MOV A,#02H ;脉冲个数装载 LJMP SEND ;转发射程序 RETFUNCATION1: MOV A,#03H LJMP SEND RETFUNCATION2: MOV A,#04H LJMP SEND RETFUNCATION3: MOV A,#05H LJMP SEND RETFUNCATION4: MOV A,#06H LJMP SEND RETFUNCATION5: MOV A,#07H LJMP SEND RET NOP NOP NOP LJMP START;;************************;编码发射程序;************************SEND: MOV R1,A ;装入发射脉冲个数SEND0: MOV R0,#0FAH ;第一个码250×0.012ms=3ms AJMP SEND2SEND1: MOV R0,#53H ;中间码83×0.012ms=1msSEND2: SETB ET1 ;开高频定时中断调制 SETB TR1 NOP NOP NOP NOP NOP NOP NOP NOP DJNZ R0,SEND2 MOV R0,#64H ;码距100×0.002ms=1msSENDOUT: CLR TR1 ;关高频定时调制 CLR ET1 CLR P3.5 NOP NOP NOP NOP NOP DJNZ R0,SENDOUT DJNZ R1,SEND1 ;脉冲数还有则再循环再发 CLR P3.0 ;开工作指示灯 LCALL DELAY500MS ;帧距 SETB P3.0 ;关工作指示灯 RET NOP ;设置软件陷阱 NOP NOP LJMP START;;************************;延时5ms程序;************************DELAY5MS: MOV R7,#45DELAY5MS1: MOV R6,#554DELAY5MS2: DJNZ R6,DELAY5MS2 DJNZ R7,DELAY5MS1 RET NOP ;设置软件陷阱 NOP NOP LJMP START;;************************;延时10ms程序;************************DELAY10MS: MOV R4,#90DELAY10MS1: MOV R3,#54DELAY10MS2: DJNZ R3,DELAY10MS2 DJNZ R4,DELAY10MS1 NOP NOP NOP NOP NOP RET NOP ;设置软件陷阱 NOP NOP LJMP START;;************************;延时500ms程序;************************DELAY500MS: MOV R5,#50DELAY500MS1: LCALL DELAY10MS DJNZ R5,DELAY500MS1 RET NOP ;设置软件陷阱 NOP NOP LJMP START END
参考资料:http://hiphotos.baidu.com/olpc2008/pic/item/3bd91df262be47dc0b46e000.jpg
热心网友
时间:2022-06-25 17:24
http://827028918.qzone.qq.com