📄 at89c51.lst
字号:
C51 COMPILER V7.50 AT89C51 04/10/2008 22:19:34 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE AT89C51
OBJECT MODULE PLACED IN .\obj\AT89C51.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE src\AT89C51.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\AT89C51.lst) OBJECT(.\o
-bj\AT89C51.obj)
line level source
1 #include <reg51.h>
2
3 #include "AT89C51.h"
4
5 float dis_data=555;
6 //uint n_data=0;//////用于调试//////
7 //uchar code array1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb9,0xbf};
8 /////不带小数点///////0/////1////2///3////4/////5////6////7///8/////9////+////-/////////
-
9 //uchar code array2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
10 /////带小数点/////////0/////1////2///3////4/////5////6////7///8/////9/////////////////
-
11 uchar n=0;
12 uchar a=0;
13 uchar temp=0;
14 uchar temp1=0;
15 uchar temp2=0;
16 uchar temp3=0;
17 uchar temp4=0;
18 ///////////////////////////////////////////////////////////////////////////////
19 void AT89C51_initialize(void)
20 {
21 1 EA =1;////打开中断总开关///////
22 1 EX0=1;////打开中断0////
23 1 // PX0=1;
24 1 IT0=1;/////设置下降沿触发/////
25 1 /////////////////////////////////////////////
26 1 ET0=1;/////允许T0中断/////
27 1 // PT0=1;
28 1 ET1=1;/////允许T1中断/////
29 1 // PT1=1;
30 1 TMOD=0x11;////T0、T1都工作在模式1,16位/////
31 1 TH0=0; TL0=0; TR0=0;/////设置初值为0,暂时不要启动T0//////
32 1 // TH1=0xc5; TL1=0x68; TR1=0;////定时15ms,暂时不要启动T1//////
33 1 // TH1=0xe4; TL1=0xa8; TR1=0;////定时7ms,暂时不要启动T1//////
34 1 }
35
36 ////////////////////引导码核对函数///////////////////////////////////////////////////////////////
37 bit Check_leader(void)
38 {
39 1 uint lead_time;
40 1 while(P31==0);////引导码的脉冲还没有结束,等待/////
41 1 TR0=0; /////脉冲结束,关闭T0///////////////
42 1 lead_time=TH0*256+TL0;///////计算脉冲的宽度///////
43 1 if((lead_time>2500)&&(lead_time<3200)) return(1); /////判断是否是引导码////
44 1 else {
45 2 //dis_data=111;////用于调试//////
46 2 return(0);
47 2 }
48 1 }
49 /////////////////////////////////////////////////////////////////////////////////
50 /////////////////////接收位数据函数//////////////////////////////////////////////////////////////
51 bit Receive_bitdata(void)
52 {
C51 COMPILER V7.50 AT89C51 04/10/2008 22:19:34 PAGE 2
53 1 uint data_time;
54 1 while(P31==0);////位信息脉冲还没有结束,等待/////
55 1 TR0=0; /////脉冲结束,关闭T0///////////////
56 1 data_time=TH0*256+TL0;///////计算脉冲的宽度///////
57 1 if((data_time>250)&&(data_time<650))
58 1 {
59 2 Jizai_data(0);
60 2 return(1);
61 2 } ///如果为逻辑0信息,并记录/////
62 1 // else return(0);
63 1 if((data_time>1200)&&(data_time<1650))
64 1 {
65 2 Jizai_data(1);
66 2 return(1);
67 2 }///如果为逻辑1信息,并记录/////
68 1 // else return(0);
69 1 if((data_time<250)||(data_time>1650)) return(0); ///如果为非位信息数据,放弃,/////
70 1 }
71 /////////////////////////////////////////////////////////////////////////////////
72 /////////////////////记录接收的位数据函数//////////////////////////////////////////////////////////////
73 bit Jizai_data(bit bitdata)
74 {
75 1 temp=temp<<1;////左移////
76 1 if(bitdata==1) temp=temp|0x01;/////先发送的是数据的最高位,发送和接收要对应//////////
77 1 else temp=temp&0xfe;
78 1 a++;////接收一位信息,m的值加1,m代表接收了几个位信息/////////
79 1 //dis_data=temp;
80 1 //if(bitdata==1) dis_data=1;/////先发送的是数据的最高位,发送和接收要对应//////////
81 1 // else dis_data=0;
82 1 if(a==8) {temp1=temp;temp=0;}/////接收到一个字节信息,将数据转给temp1///////
83 1 if(a==16) {temp2=temp;temp=0;}/////接收到第2个字节信息,将数据转给temp2///////
84 1 if(a==24) {temp3=temp;temp=0;}/////接收到第3个字节信息,将数据转给temp3///////
85 1 if(a==32) {temp4=temp;temp=0;a=0;}/////接收到第4个字节信息,将数据转给temp4,////////////
86 1 //////////一次完整的数据传输结束,m的值归0///////
87 1 return(1);
88 1 }
89 /////////////////////////////////////////////////////////////////////////////////
90 /////////////////////核对接收的数据是否正确函数///////////////////////////////////////////////////////////
-///
91 bit Check_Receive_data(void)
92 {
93 1
94 1 if((temp1==~temp2)&&
95 1 (temp3==~temp4))//&&(temp1==0xaa)
96 1 return(1); /////注意temp3是传送过来的有效、需要取用的数据值///////
97 1 else return(0);
98 1 }
99 /////////////////////////////////////////////////////////////////////////////////
100
101 ////////////////////////////////红外线接收处理函数////////////////////////////////////////////////////////
-///////////////////////////
102 void Receive_Infrared_Process(void)
103 {
104 1 if(n==33) //////如果接收完1侦数据(1个字节数据)////////
105 1 {
106 2 if(Check_Receive_data())
107 2 {
108 3 P_data1=temp1; P_data2=temp3;//////经过校验正确,取用//////
109 3 if (P_data1 >= 0x80) {dis_data=-((~P_data1)*256+(~P_data2)+1)*0.0625;}
110 3 else{dis_data=(P_data1*256+P_data2)*0.0625; }
111 3 }
112 2 }
C51 COMPILER V7.50 AT89C51 04/10/2008 22:19:34 PAGE 3
113 1 }
114 //////////////////////////////////////////////////////////////////////////////////////////////////////////
115
116
117
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 331 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 2
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 + -