多路红外遥控灯(6)

2019-03-22 17:52

(2)接收程序

ORG 0000H ;程序开始地址 LJMP START ;跳至START执行 ORG 0003H ;外中断0中断入口 LJMP INTEX0 ;跳至INTEX0执行中断服务程序 ORG 000BH ;定时器T0中断入口地址 RETI ;中断返回(不开中断) ORG 0013H ;外中断1中断入口地址 RETI ;中断返回(不开中断) ORG 001BH ;定时器T1中断入口地址 RETI ;中断返回(不开中断) ORG 0023H ;串行口中断入口地址 RETI ;中断返回(不开中断) ORG 002BH ;定时器T2中断入口地址

RETI ;中断返回(不开中断) CLEARMEMIO: CLR A ; DEC A ; A为#0FFH MOV P0,A ;P1--P3口置1 MOV P1,A ; MOV P2,A ; MOV P3,A ; CLEARMEM: MOV IE,#00H ;关所有中断 SETB EX0 ;开外中断 SETB EA ;总中断允许 RET ;子程序返回 START: LCALL CLEARMEMIO ;上电初始化 MAIN: JB P3.0,MAIN ; 50HZ交流电未过零转MAIN CLR P2.7 ; 发调光脉冲 LCALL DELAY ; 持续512微秒 SETB P2.7 ; 关调光脉冲 LJMP MAIN ; 转MAIN循环 NOP ; PC值出错处理 NOP ;

LJMP START ; 出错时重新初始 INTEX0: CLR EX0 ; 关外中断

25

JNB P3.1,READ1 ; P3.1口为低电平转READ1 READOUTT0: SETB EX0 ; P3.1口为高电平开中断(系干扰) RETI ; 退出中断 READ1: CLR A ; 清A MOV DPH,A ; 清DPTR MOV DPL,A ;

HARD1: JB P3.1,HARD11 ;P3.1变为高电平转HARD11 HARD11: READ11: READ12: READ13: INC DPTR ; 用DPTR对低电平记数 NOP ; 1微秒延时 NOP ;

AJMP HARD1 ; 转HARD1循环(循环周期为8微秒) MOV A,DPH ; DPTR高8位放入A JZ READOUTT0 ; 为0(脉宽小于8微秒*255=2毫秒)退出 CLR A ; 不为0,说明是第一个宽脉冲(3毫秒) INC A ; 脉冲个数计1 JNB P3.1,READ12 ; 低电平是等待 MOV R1,#06H ; 高电平宽度判断定时值 JNB P3.1,READ11 ; 变低电平是转READ11脉冲计数 LCALL DELAY ; 延时(512微秒)

DJNZ R1,READ13 ; 6次延时不到转READ13再延时 DEC A ; 超过3毫秒判为结束,减1 DEC A ; 减1

JZ FUN0 ; 为0执行FUN0(2个脉冲) DEC A ; 减1

JZ FUN1 ; 为0执行FUN1(3个脉冲) DEC A ; JZ FUN2 ; 为0执行FUN2(4个脉冲) DEC A ; JZ FUN3 ; 为0执行FUN3(5个脉冲) DEC A ; JZ FUN4 ; 为0执行FUN4(6个脉冲) DEC A ; JZ FUN5 ; 为0执行FUN5(7个脉冲) DEC A ; JZ FUN6 ; 为0执行FUN6(8个脉冲)

26

DEC A ; JZ FUN7 ; 为0执行FUN7(9个脉冲) DEC A ;

JZ FUN8 ; 为0执行FUN8(10个脉冲) DEC A ;

JZ FUN9 ; 为0执行FUN9(11个脉冲) DEC A ;

JZ FUN10 ; 为0执行FUN10(12个脉冲) DEC A ; JZ FUN11 ; 为0执行FUN11(13个脉冲) DEC A ; JZ FUN12 ; 为0执行FUN12(14个脉冲) DEC A ;

JZ FUN13 ; 为0执行FUN13(15个脉冲) DEC A ;

JZ FUN14 ; 为0执行FUN14(16个脉冲) NOP ; NOP ; LJMP READOUTT0 ; 出错退出 FUN0: CPL P0.0 ; P0口各端口开关输出控制 LJMP READOUTT0 ; 转中断退出 FUN1: CPL P0.1 ; LJMP READOUTT0 ; FUN2: CPL P0.2 ; LJMP READOUTT0 ; FUN3: CPL P0.3 ; LJMP READOUTT0 ; FUN4: CPL P0.4 ; LJMP READOUTT0 ; FUN5: CPL P0.5 ; LJMP READOUTT0 ; FUN6: CPL P0.6 ; LJMP READOUTT0 ; FUN7: CPL P0.7 ; LJMP READOUTT0 ;

27

FUN8: CPL P2.6 ; P2口各端口开关输出控制 LJMP READOUTT0 ; 转出中断退出 FUN9: CPL P2.5 ; LJMP READOUTT0 ; FUN10: CPL P2.4 ; LJMP READOUTT0 ; FUN11: CPL P2.3 ; LJMP READOUTT0 ; FUN12: CPL P2.2 ; LJMP READOUTT0 ; FUN13: CPL P2.1 ; LJMP READOUTT0 ; FUN14: CPL P2.0 ; P2.0开关控制 LJMP READOUTT0 ; 转出中断退出 OUTT0:

LJMP READOUTT0 ; 中断退出 DELAY: MOV R0,#0FFH ; DELAY1: DJNZ R0,DELAY1 ; RET

DL10MS: MOV R1,#14H ; DL10MS1: LCALL DELAY ; DJNZ R1,DL10MS1 ; RET

通过本次实验让我对汇编有了进一步的了解,并用其编写了红外发射和接收程序。也对模块化设计有了一定的印象,能用它做一些简单的设计。还让我学会了PWM调制的原理,熟悉了AT89C51单片机,这对以后的设计都打下了坚实的基础。

28

第4部分 电路仿真及修改

一、实验目的

1.掌握巩固PROTEUS,KEIL的使用方法及原理 2.验证程序和电路的正确性是否能达到预期的结果

3.学会在PROTEUS中调试原理图和在KEIL中对程序排错;用其仿真并对电路及程序进行验证和修改

二、实验内容

利用Proteus软件进行系统仿真,并且使用Proteus中自带的调试工具,修改设计过程中的错误。

利用KEIL软件对编写的程序进行排错,并在Proteus中运行进行仿真。

三、实验原理与方法

用Proteus软件画出红外发射仿真图,如图4.1。

图4.1 红外发射仿真图

用Proteus软件画出红外接收仿真图,如下图:

图4.2 红外接收仿真图

29


多路红外遥控灯(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级历史下册第2课导学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: