📄 saa3010.lst
字号:
C51 COMPILER V7.06 SAA3010 12/31/2007 20:21:52 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SAA3010
OBJECT MODULE PLACED IN saa3010.OBJ
COMPILER INVOKED BY: D:\keil评估版\keil C51完全破解版\anzhuang\C51\BIN\C51.EXE saa3010.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg51.h"
2 #include " intrins.h "
3 #define uchar unsigned char
4 uchar ykcode; //遥控码(14位的最后8位)
5 bit ykok; //遥控数据有效标志
6 uchar ykbnum; //遥控已接收位数
7 uchar ykbtc; //遥控中断时 ykbtc=TH1
8 uchar ykdelay; //遥控延时接收
9 bdata uchar ykcodetemp; //遥控临时码
10 sbit ykcodetemp0=ykcodetemp^0;
11 unsigned char temp;
12 void YkInit(void); //遥控接收初始化
13 unsigned char YkGetcode(void); //返回遥控码
14 //bit YkTest(void); //检查有无遥控信号
15
16 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, //0,1,2,3,4,5,6,7
17 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};//8,9,A,B,C,D,E,F,-
18
19 void delay1(int ms)
20 {
21 1 unsigned char y;
22 1 while(ms--)
23 1 {
24 2 for(y = 0; y<250; y++)
25 2 {
26 3 _nop_();
27 3 _nop_();
28 3 _nop_();
29 3 _nop_();
30 3 }
31 2 }
32 1 }
33 void main(void)
34 {
35 1 unsigned char k2,k3;
36 1 YkInit();
37 1 P2=0xff;
38 1 P1=255-table[1];
39 1
40 1 while(1)
41 1 {
42 2
43 2 k2=ykcode/16;
44 2 k3=ykcode%16;
45 2
46 2 if (ykok)
47 2 {
48 3 //for(i=0;i<2;i++)
49 3 //temp=ykcode;
50 3 //{
51 3 P2=0xf2;
52 3 P1=255-table[k3];
53 3
54 3 delay1(1);
55 3 P2=0xf1;
C51 COMPILER V7.06 SAA3010 12/31/2007 20:21:52 PAGE 2
56 3 P1=255-table[k2];
57 3 delay1(1);
58 3 P2=0x00;
59 3 delay1(1);
60 3 // P2=ykcode;
61 3 }
62 2 }
63 1 }
64
65 void YkInit(void) //遥控接收初始化
66 {
67 1 EA=1; //开总中断
68 1
69 1 TMOD=0x11; //TMOD T0,T1均选用方式1(16位定时)
70 1 SCON=0x00;
71 1 TH1=0;
72 1 TL1=0;
73 1 IE|=0x89; //EA=1;ET1=1;EX0=1;
74 1 IP|=0x01; //PX0=1;
75 1 TCON |= 0x41; //TR1=1;IT0=1;
76 1 ykbnum=0;
77 1 ykcodetemp=0;
78 1 ykdelay=0;
79 1 }
80
81
82 //bit YkTest(void) //检查有无遥控信号
83 //{
84 // return(ykok);
85 //}
86
87 void intx0() interrupt 0 using 2 //遥控使用外部中断0,接P3.2口
88 {
89 1 ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
90 1 switch(ykbnum)
91 1 {
92 2 case(0):
93 2 ykbnum=1;
94 2 break;
95 2 case(1):
96 2 if(ykbtc==6)
97 2 ykbnum=2;
98 2 else
99 2 ykbnum=0;
100 2 break;
101 2 case(2):
102 2 if(ykbtc==6||ykbtc==9)
103 2 ykbnum=3;
104 2 else
105 2 ykbnum=0;
106 2 break;
107 2 case(3):
108 2 if(ykbtc==9||ykbtc==6)
109 2 ykbnum=4;
110 2 else
111 2 ykbnum=0;
112 2 break;
113 2
114 2 default:
115 2 if(ykbnum<7)
116 2 {
117 3 if(ykbtc==6)
C51 COMPILER V7.06 SAA3010 12/31/2007 20:21:52 PAGE 3
118 3 ykbnum++;
119 3 else
120 3 ykbnum=0;
121 3 }
122 2 else
123 2 {
124 3 if(ykbtc==6)
125 3 {
126 4 if(ykcodetemp0)
127 4 ykcodetemp=ykcodetemp*2+1;
128 4 else
129 4 ykcodetemp=ykcodetemp*2;
130 4 ykbnum++;
131 4 }
132 3 else if(ykbtc==9)
133 3 {
134 4 if(ykcodetemp0)
135 4 {
136 5 ykbnum++;
137 5 ykcodetemp=ykcodetemp*2;
138 5 }
139 4 else
140 4 {
141 5 ykbnum+=2;
142 5 ykcodetemp=ykcodetemp*2;
143 5 ykcodetemp=ykcodetemp*2+1;
144 5 }
145 4 }
146 3 else if(ykbtc>11&&ykbtc<15)
147 3 {
148 4 ykbnum+=2;
149 4 ykcodetemp=ykcodetemp*2;
150 4 ykcodetemp=ykcodetemp*2+1;
151 4 }
152 3 else if(ykbtc>30)
153 3 EX0=1;
154 3 else
155 3 ykbnum=0;
156 3 }
157 2 }
158 1 }
159
160 void intt1() interrupt 3 using 3 //遥控使用定时计数器1
161 {
162 1 if(ykdelay)
163 1 {
164 2 ykdelay--;
165 2 EX0=0;
166 2 } //ykdelay不为0暂停接收
167 1 else
168 1 {
169 2 if(ykbnum==13) //遥控码最后一位为0,补0
170 2 {
171 3 ykcode=ykcodetemp*=2;
172 3 ykdelay=3;
173 3 EX0=0; //暂停接收
174 3 ykok=1; //遥控数据有效
175 3 }
176 2 else if(ykbnum==14) //遥控码最后一位为1,不用补
177 2 {
178 3 ykcode=ykcodetemp;
179 3 ykdelay=3;
C51 COMPILER V7.06 SAA3010 12/31/2007 20:21:52 PAGE 4
180 3 EX0=0; //暂停接收
181 3 ykok=1; //遥控数据有效
182 3 }
183 2 else
184 2 EX0=1; //ykbnum不为13,14接收无效,继续接收
185 2 ykbnum=0;
186 2 ykcodetemp=0;
187 2 }
188 1 }
189
190
191
192
193
194
195
196
197
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 386 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -