📄 readromcode.lst
字号:
C51 COMPILER V7.06 READROMCODE 02/25/2005 10:55:03 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE READROMCODE
OBJECT MODULE PLACED IN readromcode.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE readromcode.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <absacc.h>
3 #include <intrins.h>
4
5 #define nop _nop_()
6 void write_bits(unsigned char,unsigned char);
7 void write_byte(unsigned char,unsigned char);
8 unsigned char read_bit(unsigned char);
9 unsigned char read_byte(void);
10 unsigned char reset_18b20(void);
11 unsigned char correct(unsigned char*,unsigned char,unsigned char);
12 void dly(void);
13 unsigned char SearchRom(unsigned char *);
14
15 sbit sline=P3^4;
16 unsigned char LastDiscrepancy;
17 unsigned char LastDeviceFlag;
18 void main(void)
19
20 {
21 1 unsigned char Romnum[8];
22 1 unsigned char result;
23 1 unsigned char i;
24 1 bit first;
25 1 for(i=0;i<8;i++)
26 1 {
27 2 Romnum[i]=0;
28 2 }
29 1
30 1 first=1;
31 1 do
32 1 {
33 2 if(first)
34 2 {
35 3 LastDiscrepancy=0;
36 3 LastDeviceFlag=0;
37 3 }
38 2 result=SearchRom(Romnum);
39 2 if(first)
40 2 first=0;
41 2 }while(result);
42 1 }
43 unsigned char SearchRom(unsigned char *Romnum)
44 {
45 1 unsigned char mask,rom_byte_num,last_zero;
46 1 unsigned char id_bit,cmp_id_bit,id_bit_number;
47 1 unsigned char SearchDirection;
48 1 mask=0x01;
49 1 rom_byte_num=0;
50 1 id_bit_number=1;
51 1 last_zero=0;
52 1 if(!LastDeviceFlag)
53 1 {
54 2 if(reset_18b20())
55 2 {
C51 COMPILER V7.06 READROMCODE 02/25/2005 10:55:03 PAGE 2
56 3 write_byte(0xfe,0xf0);
57 3 do
58 3 {
59 4 id_bit=read_bit(0xfe);
60 4 cmp_id_bit=read_bit(0xfe);
61 4 if(id_bit==1&&cmp_id_bit==1)
62 4 {
63 5 return(0);
64 5 }
65 4 if(id_bit!=cmp_id_bit)
66 4 {
67 5 SearchDirection=id_bit;
68 5 }
69 4 else
70 4 {
71 5 if(id_bit_number<LastDiscrepancy)
72 5 {
73 6 SearchDirection=((Romnum[rom_byte_num]&mask)>0);
74 6 }
75 5 else
76 5 {
77 6 SearchDirection=(id_bit_number==LastDiscrepancy);
78 6 }
79 5 if(SearchDirection==0)
80 5 {
81 6 last_zero=id_bit_number;
82 6 }
83 5 }
84 4 if(SearchDirection==1)
85 4 Romnum[rom_byte_num]|=mask;
86 4 else
87 4 Romnum[rom_byte_num]&=~mask;
88 4
89 4 write_bits(0xfe,SearchDirection);
90 4 id_bit_number++;
91 4 mask<<=1;
92 4 if(mask==0)
93 4 {
94 5 rom_byte_num++;
95 5 mask=0x01;
96 5 }
97 4
98 4 }while(rom_byte_num<8);
99 3 if(id_bit_number==65)
100 3 {
101 4 LastDiscrepancy=last_zero;
102 4 if(LastDiscrepancy==0)
103 4 LastDeviceFlag=1;
104 4 }
105 3 if(!correct(Romnum,8,0))
106 3 {
107 4 return(1);
108 4 }
109 3
110 3 }
111 2 }
112 1 return(0);
113 1 }
114
115 void write_bits(unsigned char bitsite,unsigned char bitval)
116 {
117 1 unsigned char i;
C51 COMPILER V7.06 READROMCODE 02/25/2005 10:55:03 PAGE 3
118 1 _nop_();
119 1 P1=bitsite;
120 1 for(i=0;i<3;i++);
121 1 if(bitval)
122 1 P1=0xff;
123 1 for(i=0;i<7;i++);
124 1 P1=0xff;
125 1 for(i=0;i<3;i++);
126 1 }
127 unsigned char read_bit(unsigned char bitsite)
128 {
129 1 unsigned char i,temp;
130 1 _nop_();
131 1 P1=bitsite;
132 1 _nop_();
133 1 _nop_();
134 1 _nop_();
135 1 _nop_();
136 1 _nop_();
137 1 P1=0xff;
138 1 for(i=0;i<3;i++);
139 1 temp=P1;
140 1 for(i=0;i<7;i++);
141 1 P1=0xff;
142 1 for(i=0;i<5;i++);
143 1 return(temp&(~bitsite));
144 1 }
145
146
147 void write_byte(unsigned char cablesite,unsigned char val)
148 {
149 1 unsigned char i,temp;
150 1 for(i=0;i<8;i++)
151 1 {
152 2 temp=val&0x01;
153 2 val>>=1;
154 2 write_bits(cablesite,temp);
155 2 dly();
156 2 }
157 1 }
158
159 unsigned char reset_18b20(void)
160 {
161 1 unsigned char j;
162 1 bit tmp;
163 1 _nop_();
164 1 sline=0;
165 1 for(j=0;j<167;j++);
166 1 sline=1;
167 1 for(j=0;j<20;j++);
168 1 _nop_();
169 1 for(j=0;j<255;j++)
170 1 {
171 2 tmp=sline;
172 2 if(!tmp)
173 2 {
174 3 for(j=0;j<167;j++);
175 3 return(1);
176 3 }
177 2 }
178 1 return(0);
179 1 }
C51 COMPILER V7.06 READROMCODE 02/25/2005 10:55:03 PAGE 4
180 void dly(void)
181 {
182 1 _nop_();
183 1 _nop_();
184 1 _nop_();
185 1 _nop_();
186 1 _nop_();
187 1 _nop_();
188 1 _nop_();
189 1 }
190 unsigned char correct(unsigned char*p,unsigned char length,unsigned char creatcode)
191 {
192 1 unsigned char i=0;
193 1 while(length--)
194 1 {
195 2 for(i=0;i<8;i++)
196 2 {
197 3 if((creatcode^*p)&0x01)
198 3 creatcode=(creatcode>>1)^0x8c;
199 3
200 3 else
201 3 creatcode=creatcode>>1;
202 3 *p=_cror_(*p,1);
203 3
204 3 }
205 2 p++;
206 2 }
207 1 return(creatcode);
208 1 }
209
210
211
212
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 513 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 27
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -