新闻  |   论坛  |   博客  |   在线研讨会
十五路遥控接收板
tvb2058 | 2007-09-10 14:06:42    阅读:1820   发布文章

;                 *************************************
;                 *        (INCEPT3.ASM)              *
;                 *       十五路遥控接收板            *
;                 *         2001.7.18                 *
;                 *                                   *
;                 *************************************
;
;**********************************************************************
;*                                                                    *
;*          A       P1.0    1             40    VCC                   *
;*          B       P1.1    2             39    P0.0  LED0            *
;*          C       P1.2    3             38    P0.1  LED1            *
;*                  P1.3    4             37    P0.2  LED2            *
;*                  P1.4    5             36    P0.3  LED3            *
;*                  P1.5    6             35    P0.4  LED4            *
;*                  P1.6    7             34    P0.5  LED5            *
;*                  P1.7    8             33    P0.6  LED6            *
;*      100HZ       RST     9             32    P0.7  LED7            *
;*                  P3.0    10   MCS-51   31    EA    VDD             *
;*                  P3.1    11            30    ALE                   *
;*   REMOTEIN       P3.2    12            29    PSEN                  *
;*                  P3.3    13            28    P2.7         调光脉冲 *
;*                  P3.4    14            27    P2.6  LED8            *
;*                  P3.5    15            26    P2.5  LED9            *
;*                  P3.6    16            25    P2.4  LED10           *
;*                  P3.7    17            24    P2.3  LED11           *
;*                 XTAL2    18            23    P2.2  LED12           *
;*                 XTAL1    19            22    P2.1  LED13           *
;*                   VSS    20            21    P2.0  DEV14(灯泡)     *
;*                                                                    *
;*                                                                    *
;**********************************************************************
;注:P3.0为100HZ的交流电源过零点相位参考输入
;
;
;*************************************
;*                                   *
;*      主程序和中断程序入口         *
;*                                   *
;*************************************
                 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      ;上电初始化
                LCALL   LOOP                    ;调用调光控制程序
;
MAIN:           JB      P3.0,MAIN              ;50HZ交流电未过零转MAIN
                LCALL   DLX             ;过零点时调用延时子程序(延时可变)
                CLR     P2.7            ;发调光脉冲
                LCALL   DELAY          ;持续512微秒
                SETB    P2.7            ;关调光脉冲
                 LJMP     MAIN               ;转MAIN循环
                NOP                     ;PC值出错处理
                 NOP
                 LJMP     START              ;出错时重新初始化
;******************************
;     遥控接收程序
;******************************
;采用中断接收
INTEX0:         CLR     EX0                             ;关外中断
                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
                INC     DPTR                    ;用DPTR对低电平计数
                NOP                                              ;1微秒延时
                NOP
                AJMP    HARD1                   ;转HARD1循环(循环周期为8微秒)
HARD11:         MOV     A,DPH                  ;DPTR高8位放入A
                JZ      READOUTT0               ;为0(脉宽小于8*255=2毫秒)退出
                CLR     A                  ;不为0,说明是第一个宽脉冲(3毫秒)
READ11:         INC     A                      ;脉冲个数计1
READ12:         JNB     P3.1,READ12            ;低电平时等待
                MOV     R1,#06H                 ;高电平宽度判断定时值
READ13:         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个脉冲)
                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个脉冲)
                DEC     A                       ;
                JZ      FUN15                   ;为0执行FUN15(17个脉冲)
                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
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               ;转中断退出
FUN15:          DEC     P1                     ;P1口值减1
                MOV     A,P1                    ;移入A
                CJNE    A,#0F7H,OUTT0          ;不等转OUTT0(显示值小于7)
                CLR     A                                ;相等清A
                DEC     A                                ;A为#0FFH
                MOV     P1,A                    ;放回P1(显示值为7)
OUTT0:             LCALL    LOOP                        ;亮度调整
                LJMP    READOUTT0               ;中断退出
;
;*************************************
;*      延时 255 X 2 = 512 us       *
;*************************************
;
DELAY:          MOV     R0,#0FFH
DELAY1:         DJNZ    R0,DELAY1
                                   RET
;
;*************************************
;*             延时10 ms             *
;*************************************
;
DL10MS:         MOV     R1,#14H
DL10MS1:        LCALL   DELAY
                DJNZ    R1,DL10MS1
                                   RET
;
;*************************************
;*             调光延时时间控制      *
;*************************************
;
DLX:            MOV     R2,B           ;置延时初值
DLX1:           LCALL   DELAY                  ;调512微秒延时子程序
                DJNZ    R2,DLX1                 ;循环控制
                RET                            ;返回
;
;*************************************
;*        调光控制程序               *
;*************************************
;根据数码管指示值设置调光脉冲延时值
LOOP:           MOV     A,P1           ;读入P1口值
                SUBB    A,#0FFH                 ;比较
                JZ      LOOP7           ;值为#0FFH(显示7)时转LOOP7
                MOV     A,P1           ;
                SUBB    A,#0FEH                 ;
                JZ     LOOP6           ;值为#0FEH(显示6)时转LOOP6
                MOV     A,P1           ;
                SUBB    A,#0FDH                 ;
                JZ     LOOP5           ;值为#0FDH(显示5)时转LOOP5
                MOV     A,P1           ;
                SUBB    A,#0FCH                 ;
                JZ     LOOP4           ;值为#0FCH(显示4)时转LOOP4
                MOV     A,P1           ;
                SUBB    A,#0FBH                 ;
                JZ     LOOP3           ;值为#0FBH(显示3)时转LOOP3
                MOV     A,P1           ;
                SUBB    A,#0FAH                 ;
                JZ     LOOP2           ;值为#0FAH(显示2)时转LOOP2
                MOV     A,P1           ;
                SUBB    A,#0F9H                 ;
                JZ     LOOP1           ;值为#0F9H(显示1)时转LOOP1
                MOV     A,P1           ;
                SUBB    A,#0F8H                 ;
                JZ     LOOP0           ;值为#0F8H(显示0)时转LOOP0
                RET                            ;返回
;
LOOP7:          MOV     B,#01H                 ;设置延时值#01H(最亮)
                RET                            ;返回
LOOP6:          MOV     B,#02H                 ;设置延时值#02H(次亮)
                RET                            ;返回
LOOP5:          MOV     B,#04H          ;
                                   RET
LOOP4:          MOV     B,#06H          ;
                RET
LOOP3:          MOV     B,#08H          ;
                RET
LOOP2:          MOV     B,#0AH          ;
                RET
LOOP1:          MOV     B,#0CH                 ;设置延时值#0CH(次暗)
                RET                            ;返回
LOOP0:  &a        	

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客