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

📄 21-0 红外发射接收程序.asm

📁 红外通信是利用950nm近红外波段的红外线作为传递信息的媒体
💻 ASM
字号:


;//****************************************************************
;//*文件名:红外发射接受实验程序

;//*创建人:巫升辉 

;//*2005.9.25 


;功能:程序由定时器T0产生1HZ的调制信号由.P1.0产生,T1口对红外接收头
      ;接受的信号进行处理并送显示,注:一般红外线接受模块的解调信号频率
      ;为38KHZ,当它接受到38khz左右的红外信号时将输出低电平,但输出低电
      ;平的时间是有限制的如(100ms),也就是说发送数据的低电平宽度是有限的。

;接线:p1.0接八位逻辑输出电平的任意一个口,同时接到红外发射头的调
      ;制信号输入口将产生的38KHZ信号接如红外发射头的载波输入口,在将红外
      ;接受头的的输出端接到T1, RXD----DIN   TXD----CLK。

;//****************************************************************
    
 ConterSoft   EQU  50H     ;定时计数值
 ;LEDBuf       EQU  30H
 ;TEMP         EQU  40H
 

 DBUF      DATA  030H 
 BIT_COUNT DATA  040H
 TIMER     DATA  041H
 DATA_IN   DATA  020H
 DATA_OUT  DATA  021H
 CLK       BIT   P1.6
 DAT       BIT   P1.7


        ORG   0000H
        ljmp  MAIN
        ORG   000BH
        LJMP  INT_T0       ;T0中段入口
MAIN:  
        MOV  TMOD,#51H     ;T0定时模式1/T1计数模式0
        MOV  TL0,#00H      ;11.0592晶振
        MOV  TH0,#4CH
        mov  TH1, #0       ;根据波特率设置的初值
        mov  TL1, #0       
     
        MOV  ConterSoft,#10;改变立即数则改变调制信号的发生频率观查实验效果

        SETB   ET1
        setb   TR1         ; 开始记数
        SETB   TR0         
        SETB   ET0
        SETB   EA
        
Mloop:
       ACALL  TOBCD
       ACALL  DISPLAY
       ACALL  DELAY
       Ljmp   MLoop

INT_T0:
        CLR   EA
        PUSH  ACC
        MOV   A,ConterSoft
        DEC   A
        MOV   ConterSoft,A
        JNZ    BACK          ;(10次定时)软件计数,次数不到返回,不为零时则转移
        CPL    P1.0
        MOV   ConterSoft,#10 ;改变立即数则改变调制信号的发生频率观查实验效果
       
        

BACK:   MOV   TL0,#00H
        MOV   TH0,#4CH
        SETB  ET0              ;允许T0中断       
        SETB  TR0
        SETB  EA
        POP   ACC
        RETI







;双字节十六进制整数转换三字节BCD码
TOBCD:;===================

        MOV   R7,TL1
        MOV   R6,TH1
HB2:    CLR   A		             ;BCD码初始化
        MOV   R3,A
	MOV   R4,A
	MOV		R5,A
	MOV		R2,#10H	     ;转换双字节十六进制整数
HB3:	MOV		A,R7	     ;从高端移出待转换数的一位到CY中
	RLC			A
	MOV		R7,A
	MOV		A,R6
	RLC			A
	MOV		R6,A
	MOV		A,R5	     ;BCD码带进位自身相加,相当于乘2
	ADDC		A,R5
	DA			A    ;十进制调整
	MOV		R5,A
	MOV		A,R4
	ADDC		A,R4
	DA			A
	MOV		R4,A
	MOV		A,R3
	ADDC		A,R3
	MOV		R3,A         ;双字节十六进制数的万位数不超过6,不用调整
	DJNZ		R2,HB3	     ;处理完16bit
	
;BCD码拆开送缓存	
DisplayResult:
        mov      a, R3
        anl      a,#0fh
        mov      DBUF+4,A               ;R3低四位送缓存0
        mov      a, R4     
        swap     a
        anl      a,#0fh
        mov      DBUF+3,a               ;R4高四位送缓存1
        mov      a, R4 
        anl      a,#0fh
        mov      DBUF+2,a               ;R4低四位送缓存2
        mov      a, R5     
        swap     a
        anl      a,#0fh
        mov      DBUF+1,a               ;R5高四位送缓存3
        mov      a, R5 
        anl      a,#0fh
        mov      DBUF,a                 ;R5低四位送缓存4
        ret

DELAY:  LCALL   DELAY1
        LCALL   DELAY1
        LCALL   DELAY1
        LCALL   DELAY1
        LCALL   DELAY1
        RET
DELAY1:MOV   R1, #0
DLOOP: DJNZ  R1, DLOOP
       DJNZ  R0, DELAY1
       RET
Delay2:
       mov   r5, #2
A0:    mov   r6, #20     
A1:    mov   r7, #50
DelayLoop:
       NOP
       NOP
       djnz  r7, DelayLoop
       djnz  r6, A1
       djnz  r5, A0
       RET
DISPLAY:  	 
	 ANL   P2,#00H              ; CS7279有效
	 MOV   DATA_OUT,#10100100B  ; A4H,复位命令
	 CALL  SEND
         MOV   DATA_OUT,#10000000B  ; 在第一个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF       
	 CALL  SEND	 
         MOV   DATA_OUT,#10000001B  ; 译码方式0,2位显示在第二个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF+1       
	 CALL  SEND
         MOV   DATA_OUT,#10000010B  ; 译码方式0,3位显示在第三个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF+2       
	 CALL  SEND
         MOV   DATA_OUT,#10000011B  ; 译码方式0,4位显示在第四个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF+3       
	 CALL  SEND
         MOV   DATA_OUT,#10000100B  ; 译码方式0,5位显示在第五个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF+4       
	 CALL  SEND
         RET
       
SEND:     MOV  BIT_COUNT,#8         ; 发送字符子程序
          ANL  P2,#00H
          CALL LONG_DELAY
SEND_LOOP:MOV  C,DATA_OUT.7
          MOV  DAT,C
          SETB CLK
          MOV  A,DATA_OUT
          RL   A
          MOV  DATA_OUT,A
          CALL SHORT_DELAY
          CLR  CLK
          CALL SHORT_DELAY
          DJNZ BIT_COUNT,SEND_LOOP
          CLR  DAT
          RET
LONG_DELAY:  MOV TIMER,#80          ;延时约200US
DELAY_LOOP:  DJNZ TIMER,DELAY_LOOP
             RET
SHORT_DELAY: MOV TIMER,#6           ;延时约20US
SHORT_LP:    DJNZ TIMER,SHORT_LP
             RET

 END

⌨️ 快捷键说明

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