?? 3b20.lst
字號:
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 3B20
OBJECT MODULE PLACED IN 3b20.OBJ
COMPILER INVOKED BY: d:\program files\Keil\C51\BIN\C51.EXE 3b20.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include <reg51.h>
3 #include<absacc.h>
4 #define uchar unsigned char
5
6 sbit TMDAT = P0^1; //根據(jù)實實際情況設(shè)定
7 uchar TMP[2],temp[2],TMP1[2],TMP2[2]; //讀取后的4個溫度值,將其除以2即可得出實際溫度;
8 uchar SN[3][8]; //4個器件的序列號,先讀出單個序列號后填上才可以讀取溫度
9 uchar f[3]; //結(jié)果是否為負溫,“0”為正溫,“1”為負溫。
10
11
12 unsigned int code tab[]={0x88,0xEB,0x4C,0x49,0x2B,0x19,0x18,0x8B,0x08,0x09,0xFF};
13
14 int keyval;
15 sfr key=0xb0;
16 sbit S3=P1^0;
17 sbit S2=P1^1;
18 sbit S1=P1^2;
19
20 //////////////////////////////////////////////////////////////////////////
21
22 ////////////////////////////////按鍵消抖沿時程序//////////////////////////
23 void delay(void)
24 {
25 1 unsigned int i;
26 1 for(i=0;i<600;i++);
27 1 }
28 ////////////////////////////////////////延時部分//////////////////////////
29 void dmsec (unsigned int count) //
30 { //
31 1 unsigned int i; //
32 1 while (count) //
33 1 { //
34 2
35 2 i = 115; //
36 2 while (i>0) i--; //
37 2 count--; //
38 2 } //
39 1 } //
40 //////////////////////////////////////////////////////////////////////////
41
42 /////////////////////////////////////// 發(fā)送復位//////////////////////////
43 void tmreset (void) //
44 { //
45 1 unsigned int i; //
46 1 TMDAT = 0; //
47 1 i = 103; //
48 1 while (i>0) i--; // 延時 900 uS(11.0592Mhz時) //
49 1 TMDAT = 1; //
50 1 i = 4; //
51 1 while (i>0) i--; //
52 1 } //
53 //////////////////////////////////////////////////////////////////////////
54
55 //判斷DS1820是否存在的子程序。最好不要用,因為當器件不存在時將會進入死循環(huán)
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 2
56
57 ////////////////////////////////////// 等待存在脈沖///////////////////////
58 void tmpre (void) //判斷器件是否存在 //
59 { //
60 1 unsigned int i; //
61 1 while (TMDAT); //
62 1 while (~TMDAT); //
63 1 i = 4; while (i>0) i--; //
64 1 } //
65 //////////////////////////////////////////////////////////////////////////
66
67 ///////////////////////////////////// 讀一位//////////////////////////////
68 bit tmrbit (void) //
69 { //
70 1 unsigned int i; //
71 1 bit dat; //
72 1 TMDAT = 0; i++; //
73 1 TMDAT = 1; i++; i++; //微量延時 //
74 1 dat = TMDAT; //
75 1 i = 8; while (i>0) i--; // 延時 //
76 1 return (dat); //
77 1 } //
78 //////////////////////////////////////////////////////////////////////////
79
80 //////////////////////////////////////// 讀一個字節(jié)///////////////////////
81 unsigned char tmrbyte (void) //
82 { //
83 1 unsigned char i,j,dat; //
84 1 dat = 0; //
85 1 for (i=1;i<=8;i++) //
86 1 { //
87 2 j = tmrbit (); //
88 2 dat = (j << 7) | (dat >> 1); //
89 2 } //
90 1 return (dat); //
91 1 } //
92 //////////////////////////////////////////////////////////////////////////
93
94 /////////////////////////////////////// 寫一個字節(jié)////////////////////////
95 void tmwbyte (unsigned char dat) //
96 { //
97 1 unsigned int i; //
98 1 unsigned char j; //
99 1 bit testb; //
100 1 for (j=1;j<=8;j++) //
101 1 { //
102 2 testb = dat & 0x01; //
103 2 dat = dat >> 1; //
104 2 if (testb) //
105 2 { //
106 3 TMDAT = 0; // 寫0 //
107 3 i++; i++; //
108 3 TMDAT = 1; //
109 3 i = 8; while (i>0) i--; //
110 3 } //
111 2 else //
112 2 { //
113 3 TMDAT = 0; // 寫0 //
114 3 i = 8; while (i>0) i--; //
115 3 TMDAT = 1; //
116 3 i++; i++; //
117 3 } //
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 3
118 2 } //
119 1 } //
120 //////////////////////////////////////////////////////////////////////////
121
122 /////////////////////////////////發(fā)送ds1820 開始轉(zhuǎn)換//////////////////////
123 void tmstart (void) //
124 { //
125 1 tmreset (); //復位 //
126 1 tmpre (); //等待存在脈沖 //
127 1 dmsec (1); //延時 //
128 1 tmwbyte (0xcc); //跳過序列號命令,對所有器件有效 //
129 1 tmwbyte (0x44); //發(fā)轉(zhuǎn)換命令 44H, //
130 1 } //
131 //////////////////////////////////////////////////////////////////////////
132
133
134 //////////////////////////////////讀取溫度////////////////////////////////
135 void tmrtemp() //
136 { //
137 1 uchar i,j; //
138 1 uchar a,b; //
139 1 for(j=0;j<1;j++) //
140 1 { //
141 2 tmreset(); //復位 //
142 2 dmsec(1); //延時 //
143 2 tmwbyte(0x55); //發(fā)送ROM匹配命令 // //
144 2 tmwbyte (0xbe); //發(fā)送讀取命令 //
145 2 a = tmrbyte (); //連續(xù)讀取兩位溫度 //
146 2 b = tmrbyte (); // //
147 2 }
148 1 } //
*** WARNING C280 IN LINE 137 OF 3B20.C: 'i': unreferenced local variable
149
150 //////////////////////////////////////////////////////////////////////////
151
152
153 //以下是讀取器件序列號的子程序,需要讀取序列時可在程序中調(diào)用;
154 //調(diào)用時確保總線中只有一只器件,若有多個器件時則讀取出來的號碼無效;
155 //將讀取出來的序列號填到前面的數(shù)組中即可使用;
156 //平時可以將此子程序刪除以節(jié)約空間。
157
158 //////////////////////////讀取器件序列號子程序////////////////////////////
159 void rom() //
160 { //
161 1 //以下是定義8個序列號變量 //
162 1 uchar sn1; //
163 1 uchar sn2; //
164 1 uchar sn3; //
165 1
166 1 //
167 1 tmreset (); //復位 //
168 1 dmsec (1); //延時 //
169 1 tmwbyte(0x33); //發(fā)送讀序列號子程序 //
170 1 sn1=tmrbyte(); //讀取第一個序列號,應(yīng)為16H; //
171 1 sn2=tmrbyte(); //讀取第二個序列號,應(yīng)為10H; //
172 1 sn3=tmrbyte(); //
173 1
174 1 } //
175 //////////////////////////////////////////////////////////////////////////
176 // main()函數(shù)
177 //////////////////////////////////////////////////////////////////////////
178 void main() //
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 4
179 { //
180 1 do{ //
181 2 rom(); //調(diào)用讀序列號子程序 //
182 2 tmstart(); //
183 2 dmsec(100); //如果是不斷地讀取的話可以不延時 //
184 2 tmrtemp(); //讀取溫度,執(zhí)行完畢溫度將存于TMP[]數(shù)組中//
185 2 }while(1);
186 1
187 1 } //
188 //////////////////////////////////////////////////////////////////////////
189
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 328 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 37 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -