?? yj.lst
字號(hào):
C51 COMPILER V8.02 YJ 06/20/2007 13:39:50 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE YJ
OBJECT MODULE PLACED IN yj.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yj.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define uchar unsigned char
2 #define uint unsigned int
3
4 #include "reg52.h"
5 #include "intrins.h"
6 #include "string.h"
7 #include "AD0831.h"
8 #include "diceng1602.h"
9 #include "DS18B20qudong.h"
10
11
12 sbit LED=P2^0;
13
14
15 sbit key1 = P2^4;
16 uchar counter = 0;
17
18
19
20 struct SRspGetData //21h:數(shù)據(jù)采集命令響應(yīng)
21 {
22 uchar lHead[4]; //4
23 uchar iStart[2]; //2
24 uchar cLength[2]; //2
25 uchar iDestNum[2]; //目的站編號(hào), 2
26 uchar iSourceNum[2]; //源站編號(hào) 2
27 uchar cPackageType; //包類(lèi)型=2Bh 1
28 uchar cPackageCtrl; //包控制要求 1
29 uchar iCmdSequenceNum[2]; //應(yīng)答序列編號(hào) 2
30 uchar cTData[2]; //溫度數(shù)據(jù),2個(gè)字節(jié)
31 uchar cHData; //濕度數(shù)據(jù),1個(gè)字節(jié)
32 uchar iFcs[2];
33 uchar iEnd[2];
34 }DataPack;
35
36
37 uchar command = 0;
38 uchar i=0;
39 uchar cRcv_Stat1=0;
40 uchar iRcv_Nmb1;
41 uchar iRcv_Nmb_Max;
42 union zhongjian2
43 {
44 uint i;
45 uchar ii[2];
46 }exchange_data2;
47
48 void InitT0()
49 {
50 1
51 1 //TMOD = 0x21;//定時(shí)器0工作于方式1. 16位 TMOD在串行中斷初始化中已經(jīng)設(shè)置過(guò)
52 1 TH0 = 0x3C;
53 1 TL0 = 0xB0;
54 1 TR0 = 1;//定時(shí)器啟動(dòng)
55 1
C51 COMPILER V8.02 YJ 06/20/2007 13:39:50 PAGE 2
56 1 //EA = 1;//開(kāi)總中斷 在串行中斷初始化中已經(jīng)設(shè)置過(guò)
57 1 ET0 = 1;//允許定時(shí)器0中斷
58 1
59 1 LED = 1;
60 1 }
61
62 void timer() interrupt 1
63 {
64 1 counter++;
65 1 if( counter == 14)
66 1 {
67 2 counter = 0;
68 2 LED = ~LED;//脈沖取反
69 2 TH0 = 0x3C;//重裝
70 2 TL0 = 0xB0;
71 2 }
72 1 }
73
74
75 void SendDat(uchar c)
76 {
77 1 key1 = 1;//要發(fā)送數(shù)據(jù)前,把485DIP角置高。因?yàn)榇宋粸楦邥r(shí)485為發(fā)送狀態(tài)
78 1 SBUF=c;
79 1 while(TI==0);//等待TI變高
80 1 TI=0;
81 1 key1 = 0;//發(fā)送完了以后,此位置0.為接收狀態(tài)
82 1
83 1
84 1 }
85
86 void InitRXD(void)
87 {
88 1 TMOD=0x21; //確定定時(shí)器工作模式
89 1 TH1=0xFD;
90 1 TL1=0xFD; //定時(shí)初值
91 1 PCON&=0x80; //SMOD=1
92 1 TR1=1; //開(kāi)啟定時(shí)器1
93 1 SCON=0x50; //串口工作方式1
94 1 RI = 0;
95 1 TI = 0;
96 1 key1 = 0;//////////////////////////////////接收狀態(tài)
97 1
98 1 EA = 1;//開(kāi)總中斷
99 1 ES = 1;//允許串行口中斷
100 1 PS = 1;//串行口中斷優(yōu)先級(jí)高
101 1 }
102
103
104
105
106 void Rxd() interrupt 4
107 {
108 1
109 1 //uchar k;
110 1 uchar new_data,last_data,last_last_data;
111 1 uchar cRcv_Data1[50];
112 1 {
113 2 switch(cRcv_Stat1)
114 2 {
115 3 case 0:
116 3 if(RI);//接收數(shù)據(jù);
117 3 new_data=SBUF;
C51 COMPILER V8.02 YJ 06/20/2007 13:39:50 PAGE 3
118 3 //
119 3 if(last_last_data==0x00 && last_data==0x02 && new_data==0xa6)
120 3 {
121 4
122 4 cRcv_Data1[5]=new_data;
123 4 cRcv_Data1[4]=last_data;
124 4 cRcv_Data1[3]=last_last_data;
125 4 cRcv_Data1[2]=0x00;
126 4 cRcv_Data1[1]=0x00;
127 4 cRcv_Data1[0]=0x00;
128 4
129 4 iRcv_Nmb1=6;
130 4 cRcv_Stat1=1; //是幀頭
131 4
132 4 }
133 3 else //
134 3 {
135 4 last_last_data=last_data;
136 4 last_data=new_data;
137 4 cRcv_Stat1=0;
138 4 }
139 3
140 3
141 3 break;
142 3 case 1:
143 3 if(RI);//接收數(shù)據(jù);
144 3 cRcv_Data1[iRcv_Nmb1]=SBUF; //幀數(shù)據(jù)
145 3 if(iRcv_Nmb1==6)
146 3 exchange_data2.ii[0]=cRcv_Data1[iRcv_Nmb1];
147 3 if(iRcv_Nmb1==7)
148 3 exchange_data2.ii[1]=cRcv_Data1[iRcv_Nmb1];//計(jì)算有效數(shù)據(jù)長(zhǎng)度,以此作為幀判斷的第一步
149 3
150 3 if(iRcv_Nmb1==exchange_data2.i+11) //判長(zhǎng)度---1
151 3 {
152 4 iRcv_Nmb_Max=iRcv_Nmb1; //接收完一幀
153 4 cRcv_Stat1=0; //準(zhǔn)備下一幀的接收
154 4 iRcv_Nmb1=0;
155 4
156 4 if((cRcv_Data1[iRcv_Nmb_Max]==0x0a)&&(cRcv_Data1[iRcv_Nmb_Max-1]==0x0d))//判結(jié)束字---2
157 4 {
158 5 for(i=0;i<=iRcv_Nmb_Max;i++) //接收數(shù)據(jù)回送,以便調(diào)試
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -