📄 irda.src
字号:
; .\Irda.SRC generated from: Irda.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE Irda.c BROWSE DEBUG OBJECTEXTEND SRC(.\Irda.SRC)
$NOMOD51
NAME IRDA
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
AC BIT 0D0H.6
T0 BIT 0B0H.4
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
P0_0 BIT 080H.0
P1_0 BIT 090H.0
P0_1 BIT 080H.1
FL BIT 0D0H.1
P2_0 BIT 0A0H.0
P1_1 BIT 090H.1
P0_2 BIT 080H.2
P3_0 BIT 0B0H.0
P2_1 BIT 0A0H.1
P1_2 BIT 090H.2
P0_3 BIT 080H.3
P3_1 BIT 0B0H.1
P2_2 BIT 0A0H.2
P1_3 BIT 090H.3
P0_4 BIT 080H.4
P3_2 BIT 0B0H.2
P2_3 BIT 0A0H.3
P1_4 BIT 090H.4
P0_5 BIT 080H.5
RD BIT 0B0H.7
P3_3 BIT 0B0H.3
P2_4 BIT 0A0H.4
P1_5 BIT 090H.5
P0_6 BIT 080H.6
P3_4 BIT 0B0H.4
P2_5 BIT 0A0H.5
P1_6 BIT 090H.6
P0_7 BIT 080H.7
P3_5 BIT 0B0H.5
ES BIT 0A8H.4
P2_6 BIT 0A0H.6
P1_7 BIT 090H.7
P3_6 BIT 0B0H.6
P2_7 BIT 0A0H.7
IP DATA 0B8H
P3_7 BIT 0B0H.7
RI BIT 098H.0
CY BIT 0D0H.7
INT0 BIT 0B0H.2
INT1 BIT 0B0H.3
TI BIT 098H.1
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
ET2 BIT 0A8H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
EX1 BIT 0A8H.2
TB8 BIT 098H.3
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
RS0 BIT 0D0H.3
PT1 BIT 0B8H.3
RS1 BIT 0D0H.4
PT2 BIT 0B8H.5
TR0 BIT 088H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?main?IRDA SEGMENT CODE
?DT?main?IRDA SEGMENT DATA OVERLAYABLE
?PR?Irda?IRDA SEGMENT CODE
?PR?int0_int?IRDA SEGMENT CODE
?DT?int0_int?IRDA SEGMENT DATA OVERLAYABLE
?PR?beep?IRDA SEGMENT CODE
?PR?_delay1ms?IRDA SEGMENT CODE
?PR?_dispaly?IRDA SEGMENT CODE
?C_INITSEG SEGMENT CODE
?DT?IRDA SEGMENT DATA
EXTRN CODE (?C_STARTUP)
PUBLIC LEDdata
PUBLIC keynumber
PUBLIC w2
PUBLIC w1
PUBLIC e2
PUBLIC e1
PUBLIC Irda_data
PUBLIC _dispaly
PUBLIC _delay1ms
PUBLIC beep
PUBLIC int0_int
PUBLIC Irda
PUBLIC main
DSEG AT 01AH
e1: DS 1
DSEG AT 01CH
e2: DS 1
DSEG AT 01BH
w1: DS 1
DSEG AT 01DH
w2: DS 1
RSEG ?DT?main?IRDA
?main?BYTE:
i?040: DS 1
RSEG ?DT?int0_int?IRDA
?int0_int?BYTE:
i?241: DS 1
RSEG ?DT?IRDA
Irda_data: DS 28
keynumber: DS 1
LEDdata: DS 10
RSEG ?C_INITSEG
DB 001H
DB keynumber
DB 0FFH
DB 00AH
DB LEDdata
DB 028H
DB 07EH
DB 0A2H
DB 062H
DB 074H
DB 061H
DB 021H
DB 07AH
DB 020H
DB 060H
DB 01CH
DB Irda_data
DB 05FH
DB 050H
DB 05DH
DB 044H
DB 041H
DB 00AH
DB 042H
DB 046H
DB 047H
DB 049H
DB 005H
DB 006H
DB 007H
DB 009H
DB 045H
DB 003H
DB 05CH
DB 01EH
DB 05EH
DB 002H
DB 058H
DB 01AH
DB 05BH
DB 001H
DB 01BH
DB 059H
DB 05AH
DB 018H
; /********************************************************************
; * *
; * 程序名:红外线遥控解码程序(芯片 HT6221) *
; * *
; * 设 计 人:牛余朋 *
; * *
; * 日 期:2005年11月24日 *
; * *
; * 版本:1.0 *
; *********************************************************************/
; #include <REGX51.H>
; unsigned char keynumber=0xff;//定义按键值变量
; void Delay(void);
; void Irda(void);
; void beep(void);
; dispaly(unsigned char keynum);
; void delay1ms(unsigned int count);
; /*分别存放红外线译码后的数据*/
; unsigned char data e1 _at_ 0x1A; /*存放低8位地址码*/
; unsigned char data w1 _at_ 0x1B; /*存放高8位地址码*/
; unsigned char data e2 _at_ 0x1C; /*存放8位数据码*/
; unsigned char data w2 _at_ 0x1D; /*存放8位数据反码*/
; //sbit IrInput=P3^2; //红外线输入引脚,可自定义
; unsigned char LEDdata[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};//0-9段码
; /*代表遥控器上的1--28按键红外码值*/
; unsigned char Irda_data[]={0x5f,0x50,0x5d,0x44,0x41,0x0a,0x42,0x46,0x47,0x49,
; 0x05,0x06,0x07,0x09,0x45,0x03,0x5c,0x1e,0x5e,0x02,
; 0x58,0x1a,0x5b,0x01,0x1b,0x59,0x5a,0x18};//1--28
; /*********************主程序***************************/
;
; void main(void)
RSEG ?PR?main?IRDA
main:
USING 0
; SOURCE LINE # 31
; {
; SOURCE LINE # 32
; unsigned char i;
; IT0 = 1; //INT0下降沿有效
; SOURCE LINE # 34
SETB IT0
; EX0 = 1; //开INT0中断;
; SOURCE LINE # 35
SETB EX0
; P0=0xff;
; SOURCE LINE # 36
MOV P0,#0FFH
; P1=0xff;
; SOURCE LINE # 37
MOV P1,#0FFH
; P2=0xff;
; SOURCE LINE # 38
MOV P2,#0FFH
; P3=0xff;
; SOURCE LINE # 39
MOV P3,#0FFH
; EA = 1; //允许CPU中断
; SOURCE LINE # 40
SETB EA
?C0001:
; while(1)
; SOURCE LINE # 41
; {
; SOURCE LINE # 42
; if(keynumber!=0xff)
; SOURCE LINE # 43
MOV A,keynumber
CPL A
JZ ?C0001
; {
; SOURCE LINE # 44
; for(i=0;i<10;i++)
; SOURCE LINE # 45
CLR A
MOV i?040,A
?C0004:
; dispaly(keynumber);
; SOURCE LINE # 46
MOV R7,keynumber
LCALL _dispaly
INC i?040
MOV A,i?040
CLR C
SUBB A,#0AH
JC ?C0004
?C0005:
; keynumber=0XFF;
; SOURCE LINE # 47
MOV keynumber,#0FFH
; }
; SOURCE LINE # 48
;
; }
; SOURCE LINE # 50
SJMP ?C0001
; END OF main
;
; }
;
; /*******************红外线解码子程序*******************/
; void Irda(void)
RSEG ?PR?Irda?IRDA
Irda:
; SOURCE LINE # 55
; {
; SOURCE LINE # 56
; #pragma asm
; SB:
SB:
; MOV R4,#8 ;8毫秒为高电平错误
MOV R4,#8 ;8毫秒为高电平错误
; SBA:
SBA:
; MOV R5,#250
MOV R5,#250
; SBB:
SBB:
; JB P3.2,SXB1
JB P3.2,SXB1
; DJNZ R5,SBB
DJNZ R5,SBB
; DJNZ R4,SBA
DJNZ R4,SBA
; MOV R4,#2
MOV R4,#2
; JMP SBC
JMP SBC
; SXB1:
SXB1:
; MOV R5,#5
MOV R5,#5
; SXB2: ;去掉20US的尖峰干扰信号
SXB2: ;去掉20US的尖峰干扰信号
; JNB P3.2,SBB
JNB P3.2,SBB
; DJNZ R5,SXB2
DJNZ R5,SXB2
; RET
RET
; SBC:
SBC:
; MOV R5,#250
MOV R5,#250
; SB1:
SB1:
; JB P3.2,SB2 ;2MS内不为高电平错误(监测9MS的低电平引导码)
JB P3.2,SB2 ;2MS内不为高电平错误(监测9MS的低电平引导码)
; DJNZ R5,SB1
DJNZ R5,SB1
; DJNZ R4,SBC
DJNZ R4,SBC
; RET
RET
; SB2: ;去掉20US的尖峰干扰信号
SB2: ;去掉20US的尖峰干扰信号
; MOV R5,#5
MOV R5,#5
; SB2_A:
SB2_A:
; JNB P3.2,SB1
JNB P3.2,SB1
; DJNZ R5,SB2_A
DJNZ R5,SB2_A
; MOV R4,#3
MOV R4,#3
; SB2_1:
SB2_1:
; MOV R5,#250
MOV R5,#250
; SB3: ;监测4.5MS高电平,如3MS内出现低电平错误
SB3: ;监测4.5MS高电平,如3MS内出现低电平错误
; JNB P3.2,SXC
JNB P3.2,SXC
; DJNZ R5,SB3
DJNZ R5,SB3
; DJNZ R4,SB2_1
DJNZ R4,SB2_1
; MOV R4,#2
MOV R4,#2
; JMP SB3_1
JMP SB3_1
; SXC: ;去掉20US的尖峰干扰信号
SXC: ;去掉20US的尖峰干扰信号
; MOV R5,#5
MOV R5,#5
; SXC1:
SXC1:
; JB P3.2,SB3
JB P3.2,SB3
; DJNZ R5,SXC1
DJNZ R5,SXC1
; RET
RET
; SB3_1: ;监测4.5MS高电平,如5MS内不为低电平错误
SB3_1: ;监测4.5MS高电平,如5MS内不为低电平错误
; MOV R5,#250
MOV R5,#250
; SB3_2:
SB3_2:
; JNB P3.2,SB4
JNB P3.2,SB4
; DJNZ R5,SB3_2
DJNZ R5,SB3_2
; DJNZ R4,SB3_1
DJNZ R4,SB3_1
; RET
RET
; SB4: ;去掉20US的尖峰干扰信号
SB4: ;去掉20US的尖峰干扰信号
; MOV R5,#5
MOV R5,#5
; SB4_1:
SB4_1:
; JB P3.2,SB3_2
JB P3.2,SB3_2
; DJNZ R5,SB4_1
DJNZ R5,SB4_1
; MOV R1,#1AH ;设定1AH为起始RAM区
MOV R1,#1AH ;设定1AH为起始RAM区
; MOV R2,#4
MOV R2,#4
; PP: MOV R3,#8
PP: MOV R3,#8
; JJJJ:
JJJJ:
; MOV R5,#250
MOV R5,#250
; JJJJ2: ;1MS内不为低电平错误
JJJJ2: ;1MS内不为低电平错误
; JB P3.2,JJJJ3
JB P3.2,JJJJ3
; DJNZ R5,JJJJ2
DJNZ R5,JJJJ2
; RET
RET
; JJJJ3:
JJJJ3:
; LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
; MOV C,P3.2 ;将P3.7引脚此时的电平状态0或1存入C中
MOV C,P3.2 ;将P3.7医糯耸钡牡缙阶刺
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -