51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
十五路遥控接收(汇编)
发布时间:2009/6/2  阅读次数:338  字体大小: 【】 【】【

作者:未知       来源:89s52.cn

;*************************************
;*               (INCEPT3.ASM)                           *                     *
;*                                                                     *
;*************************************
;
;**********************************************************************
;*                                                                                                                                       *
;*                   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:                   MOV         B,#0DH                   ;设置延时值#0DH(最暗)
                               RET                         ;返回
;
    END                         ;程序结束

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号