📄 jiemama.lst
字号:
C51 COMPILER V7.50 JIEMAMA 04/14/2008 21:47:27 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE JIEMAMA
OBJECT MODULE PLACED IN jiemama.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE jiemama.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //这个解码方式是针对目前最常用的宽度调剂方式编的.
2 //注意:1.遥控器中红外信号是反相输出的。
3 #include<STC89C51RC.H>
4
5 sbit T2 = P2^0;
6
7
8
9 void dely(int time) //定义延时函数
10 {
11 1 while(time--)
12 1 {
13 2 }
14 1 }
15
16
17 unsigned char bianma(void)
18 {
19 1 char wei,pm,ma;
20 1 int gdp;
21 1 pm=0xff;
22 1 for (wei=0;wei<8;wei++)
23 1 {
24 2 while(T2==0);//SBUF=5; //低电平时停住
25 2 TH0=0; //进入高电平后开始计时
26 2 TL0=0;
27 2 TR0=1;
28 2 while(T2==1); // SBUF=6;
29 2 TR0=0; //进入低电平后计时结束
30 2 gdp=TH0*256+TL0; //高电平的时间长度
31 2 if ((gdp<2000)&&(gdp>100)) //属于编码长度范围
32 2 { //SBUF=7;
33 3 if (gdp>1000) ma=1;
34 3 else ma=0;
35 3
36 3 pm<<=1;
37 3 pm+=ma;
38 3 }
39 2 }
40 1 return pm;
41 1 }
42
43
44 void fasong(void) interrupt 4 using 2
45 { char j;
46 1 if(RI)
47 1 {
48 2 RI=0;
49 2 j=SBUF;
50 2 dely(300);
51 2 SBUF=j;
52 2 }
53 1
54 1 if(TI)
55 1 {
C51 COMPILER V7.50 JIEMAMA 04/14/2008 21:47:27 PAGE 2
56 2 TI=0;
57 2 }
58 1 }
59
60
61
62 main()
63 {
64 1 char thh,tll;
65 1 unsigned char jiema1,jiema2,jiema3,jiema4;
66 1 int low,high;
67 1 TMOD=0X21; // 12M晶体,不能用11.0592
68 1 SCON=0X50; //SM1=1,工作方式为1,REN=1,接收允许;其他为0
69 1 PCON=0X80; //不加倍
70 1 TH1=0XF3; //定时器初值,用于设定波特率
71 1 TL1=0XF3; //同上
72 1 EA=1; //中断总允许
73 1 ES=1; //串行口的中断允许位
74 1 ET0=1; //定时器T0中断允许位
75 1 PS=1; //串行中断优先值
76 1 ET1=1;
77 1 TR1=1; //启动定时器1
78 1
79 1 //unsigned char bianma(void); //函数原型说明
80 1
81 1 while(1) //解码程序
82 1 {
83 2 while(T2==1); //SBUF=0Xff; //最开始没信号时为高电平,停住不动
84 2 TH0=0; TL0=0; TR0=1; //来信号,进入引导码低电平后开始计时
85 2 while(T2==0); //SBUF=4;//停住,计时引导码的低电平
86 2 TR0=0; //进入高电平后计时结束
87 2 thh=TH0;
88 2 tll=TL0;
89 2 TH0=0; TL0=0; TR0=1; //进入高电平后开始计时
90 2 low=thh*256+tll;
91 2 //低电平的时间长度
92 2 while(T2==1); // SBUF=8;//停住,计时引导码的高电平
93 2 TR0=0; //进入低电平后计时结束
94 2 high=TH0*256+TL0; //高电平的时间长度
95 2 if ((high>3000)&&(high<6000)&&(low>8000)&&(low<10000))
96 2 { //引导码高低电平符合范围
97 3 jiema1=bianma(); //用户码
98 3 jiema2=bianma(); //用户反码
99 3 jiema3=bianma(); //键码
100 3 jiema4=bianma(); //键反码
101 3
102 3 //向串口输出数据
103 3 if((jiema1==~jiema2)&&(jiema3==~jiema4)) SBUF=jiema3;
104 3 //else SBUF=0x00;
105 3
106 3 dely(255);
107 3 //j1为0x00,j2为0xff,这里我只输出了键码
108 3
109 3 //本程序经调试可行!!!!!
110 3 }
111 2 }
112 1
113 1 }
114
115
116
117
C51 COMPILER V7.50 JIEMAMA 04/14/2008 21:47:27 PAGE 3
118
119
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 311 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -