1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 | #include char bdata flag; sbit rx_flag=flag^0; sbit tx_flag=flag^1; sbit write_flag=flag^2; sbit write_enable=flag^3; /*sbit reset=P1^0; sbit clock=P1^1; sbit din=P1^2; sbit dout=P1^3;*/ sbit reset=P1^4; sbit clock=P1^7; sbit din=P1^6; sbit dout=P1^5; char data rx_buf[2]; char data write_buf; char data check; char data hex_asc[]="0123456789ABCDEF"; unsigned char data data_buf; void delay_1ms(unsigned int); void set_fun(); void init_rs232(); void program_enable(); // void erase_chip(); // void write_page(char); // void read_page(char); // void write_byte(char); // void tx_byte(char); void read_chip(char); void write(char); // void lock_bit(); main() { delay_1ms(0); init_rs232(); tx_flag=1; P1=0xff; //clock=0; //dout=0; //reset=1; clock=1; dout=1; reset=0; while(1) { set_fun(); } } void delay_1ms(unsigned int k) { unsigned int i,j; for (i=0;i<=k;i++) for (j=0;j<=110;j++); } void set_fun() { if(rx_flag==1) { rx_flag=0; switch (rx_buf[0]) { case 1 : read_chip(rx_buf[1]); break; case 2 : erase_chip(); break; case 3 : write(rx_buf[1]); break; case 4 : lock_bit(); break; default : break; } } } void read_chip(char page) { char i; program_enable(); if(check==0x69) { while(tx_flag!=1); tx_flag=0; SBUF=0x01; delay_1ms(300); for(i=0;i<=page;i++) { /*while(tx_flag!=1); tx_flag=0; SBUF='A'; while(tx_flag!=1); tx_flag=0; SBUF=' ; while(tx_flag!=1); tx_flag=0; SBUF=hex_asc[i/16]; while(tx_flag!=1); tx_flag=0; SBUF=hex_asc[i%16]; while(tx_flag!=1); tx_flag=0; SBUF='0'; while(tx_flag!=1); tx_flag=0; SBUF='0'; while(tx_flag!=1); tx_flag=0; SBUF=0x0d; while(tx_flag!=1); tx_flag=0; SBUF=0x0a;*/ read_page(i); } reset=0; clock=1; //be=1; while(tx_flag!=1); delay_1ms(3); tx_flag=0; SBUF=0x03; } else { while(tx_flag!=1); tx_flag=0; SBUF=0x02; reset=0; clock=1; //be=1; } } void program_enable() { char i,temp; clock=0; reset=1; //be=0; reset=1; delay_1ms(50); write_byte(0xAC); write_byte(0x53); write_byte(0x00); for(i=0;i<8;i++) { if(din==1) temp = temp * 2 + 1; else temp = temp * 2; clock=1; clock=0; } check=temp; //tx_byte(temp); /*while(tx_flag!=1); tx_flag=0; SBUF=0x0d; while(tx_flag!=1); tx_flag=0; SBUF=0x0a;*/ } void erase_chip() { program_enable(); if(check==0x69) { delay_1ms(500); write_byte(0xAC); write_byte(0x80); write_byte(0x00); write_byte(0x00); delay_1ms(500); reset=0; clock=1; //be=1; while(tx_flag!=1); tx_flag=0; SBUF=0x01; } else { while(tx_flag!=1); tx_flag=0; SBUF=0x02; reset=0; clock=1; //be=1; } } void write(char write_len) { unsigned char i; write_flag=1; erase_chip(); delay_1ms(300); program_enable(); if(check==0x69) { delay_1ms(300); while(tx_flag!=1); tx_flag=0; SBUF=0x30; for(i=0;i<=write_len;i++) write_page(i); reset=0; clock=1; //be=1; delay_1ms(100); //read_chip(1); write_flag=0; } else { while(tx_flag!=1); tx_flag=0; SBUF=0x02; reset=0; clock=1; //be=1; } } void write_page(char page) { unsigned int i; write_byte(0x50); write_byte(page); for(i=0;i<256;i++) { while(write_enable!=1); write_enable=0; if(page==rx_buf[1] & i==255); else { while(tx_flag!=1); tx_flag=0; SBUF=0x30; } write_byte(write_buf); delay_1ms(0); } } void read_page(char page) { char i,temp; //int count; unsigned int j; write_byte(0x30); write_byte(page); for(j=0;j<256;j++) { for(i=0;i<8;i++) { if(din==1) temp = temp * 2 + 1; else temp = temp * 2; clock=1; clock=0; } delay_1ms(1); tx_byte(temp); /*count++; if(count%16==0) { while(tx_flag!=1); tx_flag=0; SBUF=0x0d; while(tx_flag!=1); tx_flag=0; SBUF=0x0a; }*/ temp=0; } } void lock_bit() { program_enable(); if(check==0x69) { delay_1ms(500); write_byte(0xAC); write_byte(0xe0); write_byte(0x00); write_byte(0x00); delay_1ms(500); reset=0; clock=1; delay_1ms(500); program_enable(); write_byte(0xAC); write_byte(0xe1); write_byte(0x00); write_byte(0x00); delay_1ms(500); reset=0; clock=1; delay_1ms(500); program_enable(); write_byte(0xAC); write_byte(0xe2); write_byte(0x00); write_byte(0x00); delay_1ms(500); reset=0; clock=1; delay_1ms(500); program_enable(); write_byte(0xAC); write_byte(0xe3); write_byte(0x00); write_byte(0x00); delay_1ms(500); reset=0; clock=1; //be=1; while(tx_flag!=1); tx_flag=0; SBUF=0x01; } else { while(tx_flag!=1); tx_flag=0; SBUF=0x02; reset=0; clock=1; //be=1; } } void write_byte(char temp) { char i; for(i=0;i<8;i++) { if(temp&128) dout=1; else dout=0; clock=1; clock=0; temp=temp*2; } delay_1ms(0); } void SCON_int(void) interrupt 4 { static char count; if(RI==1) { RI=0; if(write_flag==1) { write_buf=SBUF; write_enable=1; } else { rx_buf[count]=SBUF; //P0=rx_buf[count]; count++; if(count==2) { rx_flag=1; count=0; } } } else { TI=0; tx_flag=1; } } void tx_byte(char temp) { while(tx_flag!=1); tx_flag=0; SBUF=hex_asc[(temp>>4)&0x0f]; while(tx_flag!=1); tx_flag=0; SBUF=hex_asc[temp&0x0f]; //while(tx_flag!=1); //tx_flag=0; //SBUF=0x20; } void init_rs232() { TMOD=0x20; //timer1 set mode 2 PCON=PCON | 0x80; //SMOD=1 TH1=0xfd; //19200/s TR1=1; //start timer1 SCON=0x50; //set mode 1 IE=0x90; //enable int } |
Page: 1 2
View Comments
線路中的 2n2222 能用2n3904代替嗎? 2n2222在香港不好買呀~
用usb to serial 要用多少 速率?
@ivan : 只要是NPN的電晶體都可以。如果不行,那我再幫你問問。
((這個東西很久沒動了XD
請問VCC 從哪裡取得?
我沒記錯的話是5V,從電路或者是自己接一個輸入點
你好~請問要用哪幾種軟體才有89C2051?
這是我轉貼來的,假如軟體本身沒有寫到,就無法燒錄喔
請問 大大 你有燒錄成功嗎 我完全按照電路圖去做 做完依樣無法燒錄
都沒反應
是有人成功過,我自己是沒有測試...
想請問一下,那89S51的燒錄腳一樣是6、7、8、9跟Vcc、Gnd嗎?
這樣的話是接AT89C2051的哪幾隻腳?
把電路圖上的 P1.5 P1.6 P1.7 RESET 對應到 89S51/52 的同名腳位就行了。
至於是第幾腳...我就沒記了,89S51已經開始被我遺忘了...XD
有辦法用兩個89S51實現嗎?
理論上是可以,不過原始碼可能需要修改。
不過這樣還有意義嗎 XD?
我們是用rs232 跟 兩個8951
用一個8951當MASTER
用另外一個當SLAVE
我們現在卡在 燒進去只能燒到256 byte
然後每筆資料中間都會有FF
我們是byte mode byte3 的地方是要寫入資料位置 可以從0000開始嗎
還是要造hex檔裡面的第一筆的起始位置
嗯...不了解這狀況是怎麼回事,小的能力也可能沒辦法幫你解,因為我很久沒摸這東西了...