<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    89C51編程程序

    發布時間:2012-8-15 23:15    發布者:zbzb12345
    關鍵詞: 89C51 , 編程
    1. #include "at89x52.h"
    2. #include "stdio.h"
    3. #include "intrins.h"
    4. #include "ctype.h"
    5. sbit rdy=P3^2;
    6. sbit vpp=P3^3;
    7. sbit  p26=P3^4;
    8. sbit p27=P3^5;
    9. sbit p36=P3^6;
    10. sbit p37=P3^7;
    11. sbit  prog=P2^7;
    12. void init_serial()
    13. {
    14. SCON=0x50; /*mode  1*/
    15. TMOD=0x20;
    16. TH1=0xfd;
    17. PCON=0x80;  /*38400bps*/
    18. TR1=1;   /*load tmr1*/
    19. TI=1;
    20. ES=1;}
    21. void init_pro()
    22. {
    23. p26=0;
    24. p27=0;
    25. p36=0;
    26. p37=0;
    27. vpp=1;
    28. prog=1;
    29. }
    30. void sendbyte(unsigned char da)        /*send a  byte*/
    31. {
    32. while(!TI);
    33. TI=0;
    34. SBUF=da;}

    35. unsigned char  IntToAscii(unsigned char a)     /*change DEC to ASCII HEX code*/
    36. {
    37. if(a<10) return a+48;
    38. if(a>9) return a+55;}
    39. unsigned int getadr()                        /*get 5 diti  DEC adr*/
    40. {
    41. unsigned char i,a[5];
    42. for(i=0;i<5;i++)
    43. {
    44.   while(!RI);
    45.   RI=0;
    46.   a=SBUF-48;
    47.   }
    48. return  a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];}
    49. unsigned char getdata()                     /*get 2 diti  HEX data*/
    50. {
    51. unsigned char d1,d2;
    52. while(!RI);
    53. RI=0;
    54. d1=toint(SBUF);
    55. while(!RI);
    56. RI=0;
    57. d2=toint(SBUF);
    58. return d1*16+d2;}

    59. unsigned int detchip(int adr)
    60. {
    61. P0=0xff;
    62. P1=adr%256;P2=adr/256;
    63. init_pro();
    64. _nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
    65. _nop_();_nop_();_nop_();_nop_();_nop_();
    66. return P0;}

    67. void read()
    68. {
    69. unsigned int adr,maxadr;
    70. unsigned char h,l;
    71. P0=0xff;
    72. maxadr=getadr();
    73. for(adr=0;adr
    74. {
    75.    P1=adr%256;P2=adr/256;
    76.    p26=0;
    77.    p27=0;
    78.    p36=1;
    79.    p37=1;
    80.    vpp=1;
    81.    prog=1;
    82.    h=IntToAscii(P0/16);
    83.    sendbyte(h);
    84.    l=IntToAscii(P0%16);
    85.    sendbyte(l);}
    86. init_pro();}
    87. unsigned int test(unsigned int nn)
    88. {
    89. unsigned int adr,counter=0;
    90. P0=0xff;
    91. for(adr=0;adr
    92. {
    93.   P1=adr%256;P2=adr/256;
    94.   p26=0;
    95.   p27=0;
    96.   p36=1;
    97.   p37=1;
    98.   vpp=1;
    99.   prog=1;
    100.   _nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
    101.   _nop_();_nop_();_nop_();_nop_();_nop_();   
    102.   if(P0!=0xff) counter++;}
    103.   init_pro();
    104.   return counter;}
    105. unsigned char erase(unsigned int nn,unsigned  int p)
    106. {
    107. unsigned int i;
    108. P0=0xff;
    109. p26=1;
    110. p27=0;
    111. p36=0;
    112. p37=0;
    113. vpp=0;
    114. prog=1;
    115. for(i=0;i<50000;i++) _nop_();
    116. switch(p)
    117. {
    118.   case 0 : prog=0;
    119.            prog=1;
    120.            break;
    121.   case 1 : prog=0;
    122.            _nop_();
    123.            prog=1;
    124.            break;
    125.   case 2 : prog=0;
    126.            _nop_();_nop_();
    127.            prog=1;
    128.            break;
    129.   case 3 : prog=0;
    130.            _nop_();_nop_();_nop_();
    131.            prog=1;
    132.            break;
    133.   case 4 : prog=0;
    134.            _nop_();_nop_();_nop_();_nop_();
    135.            prog=1;
    136.            break;
    137.   case 5 : prog=0;
    138.            _nop_();_nop_();_nop_();_nop_();_nop_();
    139.            prog=1;
    140.            break;
    141.   case 6 : prog=0;
    142.            _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    143.            prog=1;
    144.            break;
    145.   case 7 : prog=0;
    146.            _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    147.            prog=1;
    148.            break;
    149.   case 8 : prog=0;
    150.            _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    151.            prog=1;
    152.            break;
    153.   default: prog=0;
    154.            for(i=0;i
    155.            prog=1;
    156.            break;}
    157. _nop_();_nop_();_nop_();_nop_();
    158. _nop_();_nop_();_nop_();_nop_();
    159. vpp=1;
    160. for(i=0;i
    161. if(test(nn)==0) return 's';
    162. else return 'f';}
    163. unsigned char write()
    164. {
    165. unsigned int  adr,d,i;
    166. p26=0;
    167. p27=1;
    168. p36=1;
    169. p37=1;
    170. vpp=0;
    171. prog=1;
    172. for(i=0;i<4000;i++) _nop_();
    173. adr=getadr();
    174. d=getdata();
    175. while(1)
    176. {
    177.   if(adr>50000) break;
    178.   P1=adr%256;P2=(adr/256)|0x80;
    179.   P0=d;
    180.   TI=0;
    181.   SBUF='s';
    182.   prog=0;
    183.   _nop_();_nop_();_nop_();
    184.   prog=1;
    185.   adr=getadr();
    186.   d=getdata();
    187.   while(!rdy);}
    188.   init_pro();
    189.   return  'f';}
    190. unsigned char lock(unsigned char level)
    191. {
    192. unsigned int i;
    193. vpp=0;
    194. if(level==1) {p26=1;p27=1;p36=1;p37=1;}
    195. if(level==2) {p26=1;p27=1;p36=0;p37=0;}
    196. if(level==3)  {p26=1;p27=0;p36=1;p37=0;}
    197. for(i=0;i<4000;i++) _nop_();
    198. prog=1;
    199. _nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
    200. _nop_();_nop_();_nop_();_nop_();_nop_();
    201. prog=0;
    202. _nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
    203. _nop_();_nop_();_nop_();_nop_();_nop_();
    204. prog=1;
    205. _nop_();_nop_();_nop_();_nop_();_nop_();
    206. while(!rdy);
    207. init_pro();
    208. return 'o';}
    209. void main()
    210. {
    211. unsigned char data c;
    212. unsigned int data adr,l,dx;
    213. init_pro();
    214. init_serial();
    215. while(1)
    216. {
    217.   init_pro();
    218.   scanf("%c",&c);
    219.   switch(c)
    220.   {
    221.    case 'c' : printf("%c",'o');
    222.               break;
    223.    case 'd' :  scanf("%x",&adr);
    224.               printf("%x",detchip(adr));
    225.               break;
    226.    case 't' : scanf("%u",&dx);
    227.               printf("%u",test(dx));
    228.               break;
    229.    case 'r' : read();
    230.               break;
    231.    case 'e' : scanf("%u,%u",&adr,&dx);
    232.               printf("%c",erase(adr,dx));
    233.               break;
    234.    case 'w' : printf("%c",write());
    235.               break;
    236.    case 'l' :  scanf("%u",&l);
    237.               printf("%c",lock(l));
    238.               break;
    239.    case 'h' : printf("**********Er6y Programmer Help  Window***********\n");
    240.               break;
    241.     default : break;}


    242.   }
    243. }
    復制代碼


    文章來源:http://www.originic.hk/bbs/display.asp?id=290
    本文地址:http://www.portaltwn.com/thread-95814-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷