📄 ir.asm
字号:
//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
//文件名: IR.ASM
//
//编写人: LC
//
//编写时间:2005/03/10
//
//目标器件: C8051F02x
//
//编译工具: Silicon Laboratories IDE
//
//程序说明: 此程序接收红外发射过来的数据,接收解码后由CPU读取
//------------------------------------------------------------------------------------
// 头文件包含
//------------------------------------------------------------------------------------
$include (c8051f020.inc) // SFR declarations
//------------------------------------------------------------------------------------
// Global CONSTANTS
//------------------------------------------------------------------------------------
DataPort EQU 0x8400 ;红外数据接收口
BUZ EQU P3.5
ORG 0
AJMP main
ORG 93H
AJMP INT6_ISR
ORG 100H
;延时子程序
Delay:
mov R7, #01h
Delay1:
mov R6, #80h
Delay0:
mov R5, #00h
djnz R5, $
djnz R6, Delay0
djnz R7, Delay1
ret
;始化外部中断6
INITEXINT67:
ORL EIE2,#10H ;允许外部中断6
RET
;外部中断6的中断服务程序
INT6_ISR:
ANL P3IF,#NOT(40H) ;清外部中断6标志
MOV R1,#01H ;置允许读标志
RETI
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
main:
;无效看门狗
MOV WDTCN,#0deH
MOV WDTCN,#0adH
LCALL PORT_Init ;输入/输出口初始化
LCALL INITEXINT67 ;初始化外部中断6
SETB EA ;开总中断
MOV R1,#00H
LOOP:
CJNE R1,#01H,LOOP ;是否允许读红外数据
MOV DPTR,#DataPort
MOVX A,@DPTR ;读红外数据
RLC A
JNC LOOP ;是否接到红外数据
MOVX A,@DPTR
ANL A,#0FH
MOV R0,A ;保存收到的红外数据 ;
CLR BUZ ;蜂鸣器响
LCALL Delay
LCALL Delay
LCALL Delay
SETB BUZ ;蜂鸣器灭
NOP
Re_RD:
MOVX A,@DPTR ;上次红外中断是否结束
RLC A
JC Re_RD
NOP
LJMP LOOP
NOP
RET
;配置交叉开关和输入/输出口
PORT_Init:
MOV XBR2,#40H ;使能交叉开关和弱上拉
ORL P74OUT,#0fH ;使能P4~P7推挽输出
ORL EMI0CF,#2cH ;EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期
ORL EMI0TC,#6cH ;地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期
ORL P3MDOUT,#20H ;使能P3.5推挽输出
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -