⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peitao jieshou xitong .asm

📁 遥控接收程序 用51单片机 只要电路正确 焊接好电路直接可用
💻 ASM
字号:
;******************************
;接收控制系统软件程序
;******************************
;
;******************************
;主程序和中断程序入口
;******************************
          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      ;调初始化程序
          NOP
MAIN:     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,返回
           RETI
INT0SERVE1:   CLR    A
              MOV    DPH,A                 ;清DPTR
              MOV    DPL,A
INT0SERVE2:   JB     P3.1,INT0SERVE3       ;用DPTR对第一个低电平计时
              INC    DPTR
              NOP
              NOP
              AJMP   INT0SERVE2            ;循环周期是8μs
INT0SERVE3:   MOV    A,DPH                 ;DPTR的高8位放入A中
              JZ     INT0RET               ;不为0,说明DPL有进位则8μs×255=2ms,
                                           ;即是第一个脉冲。为0,说明内小于2ms是一干扰
              CLR    A
INT0SERVE4:   INC    A                     ;脉冲个数加1
INT0SERVE5:   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,#0EDH
FUNCTION01:   NOP
              NOP
              LJMP   INT0RET               ;返回
FUNCTION1:    JB     50H,FUNCTION11
              MOV    B,#1CH                ;功能操作1档转速
              MOV    P1,#0F9H
FUNCTION11:   NOP
              NOP
              LJMP   INT0RET               ;返回
FUNCTION2:    JB     50H,FUNCTION21
              MOV    B,#12H                ;功能2操作4档转速
              MOV    P1,#0DDH
FUNCTION21:   NOP
              NOP
              LJMP   INT0RET               ;返回
FUNCTION3:    JB     50H,FUNCTION31
              MOV    B,#19H                ;功能3操作3档转速
              MOV    P1,#0F5H
FUNCTION31:   NOP
              NOP
              LJMP   INT0RET               ;返回
FUNCTION4:    JB     50H,FUNCTION41
              MOV    B,#0EH                ;功能4操作5档转速
              MOV    P1,#0BDH
FUNCTION41:   NOP
              LJMP   INT0RET               ;返回
FUNCTION5:    JB     50H,FUNCTION51        ;功能5操作电机启/停操作
              SETB   50H
              MOV    B,#26H
              MOV    P1,#0FEH
              AJMP   FUNCTION52
FUNCTION51:   CLR    50H
              MOV    B,#1CH
              MOV    P1,#0F9H
FUNCTION52:   NOP
              NOP
              LJMP   INT0RET
;
;****************************************
;控制导通角延时程序
;****************************************
DELAYXUS:     MOV    R2,B
DELAYXUS1:    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   T1SERVERET
T1SERVE1:     CPL    P1.0
T1SERVERET:   MOV    TH1,#3CH
              MOV    TL1,#0B0H
              SETB   ET1
              SETB   TR1
              RETI
;
;****************************************
;延时256μs程序
;****************************************
DELAY256US:   MOV    R4,#126
DELAY256US1:  DJNZ   R4,DELAY256US1
              RET
;
;****************************************
;延时513μs程序
;****************************************
DELAY513US:   MOV    R5,#254
DELAY513US1:  DJNZ   R4,DELAY513US1
              RET
              END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -