📄 ir.asm
字号:
;参考程序A:IR.ASM:
;此程序接收红外发射过来的数据,解码后由CPU读取并显示在LED数码管上.
;红外遥控器 IR.ASM 2005.9.21
$include (c8051f020.inc) // SFR declarations
PPA EQU 8000H ;8255的端口地址,8255驱动数码管显示温度值
PPB EQU 8001H ;8255驱动数码管显示LM74测量出的温度值
PPC EQU 8002H ;LM74是高精度数字式温度传感器
CWR EQU 8003H
DataPort EQU 8400H ;红外数据接收口
BUZ EQU P3.5 ;P3.5驱动蜂鸣器
ORG 0
AJMP main
ORG 93H ; INT6中断入口
AJMP INT6_ISR
ORG 100H
INITEXINT67: ;初始化外部中断INT6
ORL EIE2,#10H ;允许外部中断6
RET
;外部中断6的中断服务程序
INT6_ISR:
ANL P3IF,#NOT(40H) ;清外部中断6标志
MOV R1,#01H ;置允许读标志
RETI
MAIN:MOV WDTCN,#0deH ;无效看门狗
MOV WDTCN,#0adH
LCALL PORT_Init ;输入/输出口初始化
LCALL INITEXINT67 ;初始化外部中断INT6
SETB EA ;开总中断
MOV R1,#00H
LOOP:
CJNE R1,#01H,LOOP ;是否允许读红外数据
MOV DPTR,#DataPort
MOVX A,@DPTR ;读红外数据
CPL A
ANL A,#0FH
MOV 79H,A ;保存收到的红外数据 CLR BUZ ;蜂鸣器响
LCALL Del0
LCALL Del0
SETB BUZ ;蜂鸣器灭
MOV R1,#0
LCALL DISPLED
AJMP LOOP
;配置交叉开关和输入/输出口
PORT_Init:
MOV XBR2,#40H ;使能交叉开关和弱上拉
ORL P74OUT,#0ffH ;使能P4,P5,P6,
ORL EMI0CF,#2cH ;EMIF工作在地址/数据复用方式,只用外部存储器,
;ALE高/低脉宽占1个SYSCLK周期
ORL EMI0TC,#6cH ;地址建立/保持时间占0个SYSCLK周期,
;/WR和/RD占12个SYSCLK周期
RET
;显示功能子程序:被显示的数据在79H中.
DISPLED: ACALL C8255 ;8255初始化
MOV R2,#01H
MOV R5,#1
MOV R0,#79H ;显示一位,其值在79H中
DSP1: MOV DPTR,#PPB
MOV A,R2
MOVX @DPTR,A
MOV A,@R0
ANL A,#0FH
DSP2: MOV DPTR,#BCD
MOVC A,@A+DPTR
MOV B,A
MOV DPTR,#PPC
MOV A,R5
CJNE A,#3,SS0
MOV A,B
ADD A,#80H
AJMP SS1
SS0: MOV A,B
SS1: MOVX @DPTR,A
ACALL DEL0
MOV A,R2
RL A
MOV R2,A
INC R0
DJNZ R5,DSP1
RET
BCD: DB 3FH,06H,5BH,4FH ;显示数值,0,1,2,3
DB 66H,6DH,7DH,07H ;4,5,6,7
DB 7FH,6FH,77H,7CH ;8,9,A,B
DB 39H,5EH,79H,71H ;C,D,E,F
DB 73H,3EH,31H,6EH ;P,U,Z,Y
DB 0FFH,00H ;8,灭
C8255: MOV A,#80H ; 设置PC口,PB口为输出,PA口为输入
MOV DPTR,#CWR ;#8003H为8255的控制寄存器地址
MOVX @DPTR,A
RET
DEL0: MOV R6,#3FH ;延时子程序
TM: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,TM
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -