📄 21-0 红外发射接收程序.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 + -