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

📄 2051yaokong.asm

📁 遥控发射程序 用2051单片机 只要电路正确 焊接好电路直接可用
💻 ASM
字号:
;遥控系统软件程序
;
;*****************************
;主程序和中断程序入口
;*****************************
;
org     0000H           ;复位地址
ljmp    start
org     0003h           ;外中断0中断入口地址
reti
org     000BH           ;定时器T0中断入口地址
reti
org     0013h           ;外中断1中断入口地址
ljmp    int1serve
org     001Bh           ;定时器T1中断入口地址    ;
ljmp    T1SERVE
org     0023h           ;串行中断入口地址
reti
org     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,A
KEY2:            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+DPTR
KEYWORDKTAB2:      LJMP    FUNCATION0
                 LJMP    FUNCATION1
                 LJMP    FUNCATION2
                 LJMP    FUNCATION3
                 LJMP    FUNCATION4
                 LJMP    FUNCATION5
                 RET
KEYWORDKTAB1:    DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7EH
                 RET
;
;*************************
;发脉冲程序
;*************************
FUNCATION0:      MOV     A,#02H         ;脉冲个数装载
                 LJMP    SEND           ;转发射程序
                 RET
FUNCATION1:      MOV     A,#03H
                 LJMP    SEND
                 RET
FUNCATION2:      MOV     A,#04H
                 LJMP    SEND
                 RET
FUNCATION3:      MOV     A,#05H
                 LJMP    SEND
                 RET
FUNCATION4:      MOV     A,#06H
                 LJMP    SEND
                 RET
FUNCATION5:      MOV     A,#07H
                 LJMP    SEND
                 RET
                 NOP
                 NOP
                 NOP
                 LJMP    START
;
;************************
;编码发射程序
;************************
SEND:            MOV     R1,A           ;装入发射脉冲个数
SEND0:           MOV     R0,#0ffH       ;第一个码250×0.012ms=3ms
                 AJMP    SEND2
SEND1:           MOV     R0,#50H        ;中间码83×0.012ms=1ms
SEND2:           SETB    ET1            ;开高频定时中断调制
                 SETB    TR1
                 ;setb    p3.5
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 DJNZ    R0,SEND2
                 MOV     R0,#64H        ;码距100×0.010ms=1ms
SENDOUT:         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,#45
DELAY5MS1:       MOV     R6,#554
DELAY5MS2:       DJNZ    R6,DELAY5MS2
                 DJNZ    R7,DELAY5MS1
                 RET
                 NOP                    ;设置软件陷阱
                 NOP
                 NOP
                 LJMP    START
;
;************************
;延时10ms程序
;************************
DELAY10MS:       MOV     R4,#90
DELAY10MS1:      MOV     R3,#54
DELAY10MS2:      DJNZ    R3,DELAY10MS2
                 DJNZ    R4,DELAY10MS1
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 RET
                 NOP                    ;设置软件陷阱
                 NOP
                 NOP
                 LJMP    START
;
;************************
;延时500ms程序
;************************
DELAY500MS:      MOV     R5,#50
DELAY500MS1:     LCALL   DELAY10MS
                 DJNZ    R5,DELAY500MS1
                 RET
                 NOP                    ;设置软件陷阱
                 NOP
                 NOP
                 LJMP    START
                 END



⌨️ 快捷键说明

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