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

📄 g d f s.asm

📁 AT89S52的一个红外发射程序
💻 ASM
字号:
;****************************************
;编码 发射程序
        MOV SP,#30H
ZXY:    MOV TMOD,#00H
        MOV TL0,#19H    ;8ms   p2.0 38K载波
        MOV TH0,#19H
        SETB P2.0
        SETB TR0    ;启动定时器0 
NEXT_01:MOV TMOD,#20H
        MOV TL1,#0F4H     ;38K载波
        MOV TH1,#0F4H
        SETB TR1      ;启动定时器1
HERE_03:JBC TF1,NEXT_03
       SJMP HERE_03
NEXT_03:MOV TL1,#0F4H
       MOV TH1,#0F4H
       CPL P2.0
HERE_01:JNB TF0,NEXT_01  ;if T0 count  time not over,   next
       CLR TR1         ;TR1 -- T1 运行控制 1---则终止定时

       LJMP KAISHI
                       ;if T0  count time over,then off 38k载波
       SJMP HERE_03
    

;****************************************
;****************************************
     
       COUNT DATA  09H ; 计数^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KAISHI: MOV   0AH,#30;发送数据最大个数
      ; MOV SP,#30H
ZHXY:  CLR A
       MOV COUNT,A
       MOV R0,  #50H

 
START:       MOV 50H,#01010101B
;**********************************************




      MOV R2,#2   ;计数反码正码一共 发射2次
MAIN: MOV A,@R0
           ; INC R0
      MOV R6,A    ;暂存数据---------在R7中
     
LOOP:MOV R5,#8     ; 一个数据有8为
      CLR C
LOOP1: RRC A
      JNC  BM_0     ;判断是0还是1,为编码准备
      LJMP BM_1
LOOP2:MOV A,R6   ;发射数据 反码
      CPL A

      DJNZ R2, LOOP
      LJMP SPEAK
;*******************************
BM_0:LCALL BM_bitO   ;编码0
     DJNZ R5,LOOP1
     JMP LOOP2

BM_1:LCALL BM_bit1   ;编码1
     DJNZ R5,LOOP1
     JMP LOOP2
;********************************


;**********发射提示OK ***********
SPEAK: NOP

;*********************************



ZHXY0: POP B
       MOV R0,B
       INC R0
       DJNZ 0AH,START
       ;LJMP  START
;**************************
;**************************************************************
;如果一直为低电平就认为发射结束
;**************************************************************
      MOV R3,#3
ZHXY_216:   MOV TMOD,#00H
        MOV TL0,#19H    ;8ms   p2.0 38K载波
        MOV TH0,#19H
        SETB P2.0
        SETB TR0    ;启动定时器
NEXT_010:MOV TMOD,#20H
        MOV TL1,#0F4H     ;38K载波
        MOV TH1,#0F4H
        SETB TR1      ;启动定时器1
HERE_030:JBC TF1,NEXT_030
       SJMP HERE_030
NEXT_030:MOV TL1,#0F4H
       MOV TH1,#0F4H
       CPL P2.0
HERE_010:JNB TF0,NEXT_010  ;if T0 count  time not over,   next
       CLR TR1         ;TR1 -- T1 运行控制 1---则终止定时

       LJMP BBB
                    ;if T0  count time over,then off 38k载波
       SJMP HERE_030
;*******************************************************************       
BBB: DJNZ R3,ZHXY_216
     LJMP OVER
OVER:LJMP ZXY
;**************************************
;**************************************        
 





















;  子程序......
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

BM_bitO:SETB P2.0
        MOV TMOD,#00H   ;bian ma 0
        MOV TL0,#1CH    ;0.56ms  p2.0 高电平
        MOV TH0,#0EFH
        SETB TR0   ;启动定时器0

HERE00: JBC TF0,NEXT_00      ; if TF0 is 1,then next,else wait!!!
        SJMP HERE00

NEXT_00:MOV TMOD,#00H
        MOV TL0,#17H    ;0.565ms   p2.0 38K载波
        MOV TH0,#0EFH
        CLR P2.0
        SETB TR0    ;启动定时器0

NEXT01:MOV TMOD,#20H
       MOV TL1,#0F4H     ;38K载波
       MOV TH1,#0F4H
       SETB TR1      ;启动定时器1
HERE03:JBC TF1,NEXT03
       SJMP HERE03
NEXT03:MOV TL1,#0F4H
       MOV TH1,#0F4H
       CPL P2.0
HERE01:JNB TF0,NEXT01  ;if T0 count  time not over,   next
       CLR TR1      ;TR1 -- T1 运行控制 1---则终止定时

       RET           ;if T0  count time over,then off 38k载波
       SJMP HERE03

       RET
;************************************
BM_bit1:MOV TMOD,#00H      ;编码 1
        MOV TL0,#1CH       ;0.56ms high lever
        MOV TH0,#0EFH
        SETB TR0
        SETB P2.0


HERE10:JBC TF0,NEXT1
       SJMP HERE10

NEXT1:MOV TMOD,#00H  ;tipe 00 of T0   1.685ms-----6639
      MOV TL0,#0FH
      MOV TH0,#0CFH
      SETB TR0
      CLR P2.0


NEXT2:MOV TMOD,#20H
      MOV TL1,#0F4H
      MOV TH1,#0F4H
      SETB TR1
HERE3:JBC TF1,NEXT3
      SJMP HERE3
NEXT3:MOV TL1,#0F4H
      MOV TH1,#0F4H
      CPL P2.0

HERE02:JNB TF0,NEXT2
       CLR TR1
        RET
      SJMP HERE3


;************************************
;延时程序
DELAY2400: ;1.085x ((245x9)+5)=2397.85
     MOV R7,#245
    DELAY2400_A:
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    DJNZ   R7,DELAY2400_A

    RET
;*************************************
END

⌨️ 快捷键说明

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