?? ht1621.lst
字號:
C51 COMPILER V9.00 HT1621 07/23/2011 16:32:29 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE HT1621
OBJECT MODULE PLACED IN HT1621.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HT1621.c BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 // STC 12T系列單片機(jī)紅外接收NEC解碼程序。適用于市場上用量最大的HT6121/6122及其兼容的IC編碼。
2 // 使用外部中斷0接收P3.2
3 //
4 #include <REGX52.H>
5 #include <intrins.h>
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 uchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0xFF};
10
11 sbit IR = P3^2;
12
13 uchar N[4]; //識別碼,操作碼存放
14 uchar X1,X2,X3,X4;
15
16 void XSQ(void);
17 void YS(uchar time);
18
19 /****************** 主函數(shù) *******************/
20 void main(void)
21 {
22 1 X1=X2=X3=X4 = 0;
23 1
24 1 IT0 = 1;
25 1 EX0 = 1;
26 1 EA = 1;
27 1
28 1 while(1)
29 1 {
30 2 XSQ();
31 2 }
32 1 }
33
34 /**********************數(shù)碼管顯示函數(shù)************************/
35 void XSQ(void)
36 {
37 1 P2_7=1;P0=tab[X1];P2_0=0;YS(1); //識別碼
38 1 P2_0=1;P0=tab[X2];P2_1=0;YS(1);
39 1 P2_1=1;P0=tab[16];P2_2=0;YS(1);
40 1 P2_2=1;P0=tab[16];P2_3=0;YS(1);
41 1 P2_3=1;P0=tab[16];P2_4=0;YS(1);
42 1 P2_4=1;P0=tab[16];P2_5=0;YS(1);
43 1 P2_5=1;P0=tab[X3];P2_6=0;YS(1); //操作碼
44 1 P2_6=1;P0=tab[X4];P2_7=0;YS(1);
45 1 }
46
47 /********************** 外部中斷函數(shù)************************/
48 void exint0() interrupt 0
49 {
50 1 uint cnt;
51 1 uchar i;
52 1
53 1 EX0 = 0;
54 1 cnt = 0;
55 1
C51 COMPILER V9.00 HT1621 07/23/2011 16:32:29 PAGE 2
56 1 while(!IR) cnt++; //記錄引導(dǎo)碼時間
57 1 if(cnt < 1000){EX0=1;return;} //9ms的計數(shù)值(12MHz:1000< cnt <1500)
58 1
59 1 cnt = 0;
60 1 while(IR) if(cnt++ > 400){EX0=1;return;} //防卡死,超時保護(hù)(12MHz: > 300)
61 1 if(cnt < 200){EX0=1;return;} //(12MHz不分頻: <260)
62 1
63 1 for(i=0; i<32; i++) //讀取32位位碼
64 1 {
65 2 cnt = 0;
66 2 while(!IR);
67 2 while(IR) if(cnt++ > 200){EX0=1;return;} //超時保護(hù)(12MHz:>=200)
68 2 N[i/8] >>= 1;
69 2 if(cnt>60) N[i/8] |= 0x80; //0和1的計數(shù)界線(12MHz:< 109)
70 2 }
71 1
72 1 if(N[0] == ~N[1] && N[2] == ~N[3]) //校驗識別碼,操作碼
73 1 {
74 2 X1 = N[0]/16;
75 2 X2 = N[0]%16;
76 2 X3 = N[2]/16;
77 2 X4 = N[2]%16;
78 2 }
79 1
80 1 EX0 = 1;
81 1 }
82
83 /***************************************************************
84 函數(shù)功能:按鍵消抖 延時程序
85 入口參數(shù):1ms×time (晶振=12MHz)
86 ***************************************************************/
87 void YS(uchar time)
88 {
89 1 uchar i,j;
90 1 for(i=0; i<time; i++)
91 1 for(j=0; j<247; j++)_nop_();
92 1 }
C51 COMPILER V9.00 HT1621 07/23/2011 16:32:29 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN)
; SOURCE LINE # 20
; SOURCE LINE # 21
; SOURCE LINE # 22
0000 E4 CLR A
0001 F500 R MOV X4,A
0003 F500 R MOV X3,A
0005 F500 R MOV X2,A
0007 F500 R MOV X1,A
; SOURCE LINE # 24
0009 D288 SETB IT0
; SOURCE LINE # 25
000B D2A8 SETB EX0
; SOURCE LINE # 26
000D D2AF SETB EA
000F ?C0001:
; SOURCE LINE # 28
; SOURCE LINE # 29
; SOURCE LINE # 30
000F 120000 R LCALL XSQ
; SOURCE LINE # 31
0012 80FB SJMP ?C0001
; FUNCTION main (END)
; FUNCTION XSQ (BEGIN)
; SOURCE LINE # 35
; SOURCE LINE # 36
; SOURCE LINE # 37
0000 D2A7 SETB P2_7
0002 E500 R MOV A,X1
0004 900000 R MOV DPTR,#tab
0007 93 MOVC A,@A+DPTR
0008 F580 MOV P0,A
000A C2A0 CLR P2_0
000C 7F01 MOV R7,#01H
000E 120000 R LCALL _YS
; SOURCE LINE # 38
0011 D2A0 SETB P2_0
0013 E500 R MOV A,X2
0015 900000 R MOV DPTR,#tab
0018 93 MOVC A,@A+DPTR
0019 F580 MOV P0,A
001B C2A1 CLR P2_1
001D 7F01 MOV R7,#01H
001F 120000 R LCALL _YS
; SOURCE LINE # 39
0022 D2A1 SETB P2_1
0024 900000 R MOV DPTR,#tab+010H
0027 E4 CLR A
0028 93 MOVC A,@A+DPTR
0029 F580 MOV P0,A
002B C2A2 CLR P2_2
002D 7F01 MOV R7,#01H
002F 120000 R LCALL _YS
; SOURCE LINE # 40
0032 D2A2 SETB P2_2
0034 900000 R MOV DPTR,#tab+010H
0037 E4 CLR A
0038 93 MOVC A,@A+DPTR
C51 COMPILER V9.00 HT1621 07/23/2011 16:32:29 PAGE 4
0039 F580 MOV P0,A
003B C2A3 CLR P2_3
003D 7F01 MOV R7,#01H
003F 120000 R LCALL _YS
; SOURCE LINE # 41
0042 D2A3 SETB P2_3
0044 900000 R MOV DPTR,#tab+010H
0047 E4 CLR A
0048 93 MOVC A,@A+DPTR
0049 F580 MOV P0,A
004B C2A4 CLR P2_4
004D 7F01 MOV R7,#01H
004F 120000 R LCALL _YS
; SOURCE LINE # 42
0052 D2A4 SETB P2_4
0054 900000 R MOV DPTR,#tab+010H
0057 E4 CLR A
0058 93 MOVC A,@A+DPTR
0059 F580 MOV P0,A
005B C2A5 CLR P2_5
005D 7F01 MOV R7,#01H
005F 120000 R LCALL _YS
; SOURCE LINE # 43
0062 D2A5 SETB P2_5
0064 E500 R MOV A,X3
0066 900000 R MOV DPTR,#tab
0069 93 MOVC A,@A+DPTR
006A F580 MOV P0,A
006C C2A6 CLR P2_6
006E 7F01 MOV R7,#01H
0070 120000 R LCALL _YS
; SOURCE LINE # 44
0073 D2A6 SETB P2_6
0075 E500 R MOV A,X4
0077 900000 R MOV DPTR,#tab
007A 93 MOVC A,@A+DPTR
007B F580 MOV P0,A
007D C2A7 CLR P2_7
007F 7F01 MOV R7,#01H
0081 020000 R LJMP _YS
; FUNCTION XSQ (END)
; FUNCTION exint0 (BEGIN)
0000 C0E0 PUSH ACC
0002 C0D0 PUSH PSW
0004 75D000 MOV PSW,#00H
0007 C000 PUSH AR0
0009 C004 PUSH AR4
000B C005 PUSH AR5
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -