• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 89C51編程程序

    89C51編程程序

    作者: 時間:2012-12-05 來源:網絡 收藏

    #include at89x52.h
    #include stdio.h
    #include intrins.h
    #include ctype.h

    本文引用地址:http://www.czjhyjcfj.com/article/170668.htm

    sbit rdy=P3^2;
    sbit vpp=P3^3;
    sbit p26=P3^4;
    sbit p27=P3^5;
    sbit p36=P3^6;
    sbit p37=P3^7;
    sbit prog=P2^7;

    void init_serial()
    {
    SCON=0x50; /*mode 1*/
    TMOD=0x20;
    TH1=0xfd;
    PCON=0x80;/*38400bps*/
    TR1=1; /*load tmr1*/
    TI=1;
    ES=1;}

    void init_pro()
    {
    p26=0;
    p27=0;
    p36=0;
    p37=0;
    vpp=1;
    prog=1;
    }

    void sendbyte(unsigned char da) /*send a byte*/
    {
    while(!TI);
    TI=0;
    SBUF=da;}

    unsigned char IntToAscii(unsigned char a) /*change DEC to ASCII HEX code*/
    {
    if(a10) return a+48;
    if(a>9) return a+55;}

    unsigned int getadr() /*get 5 ditiDEC adr*/
    {
    unsigned char i,a[5];
    for(i=0;i5;i++)
    {
    while(!RI);
    RI=0;
    a[i]=SBUF-48;
    }
    return a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];}

    unsigned char getdata() /*get 2 ditiHEX data*/
    {
    unsigned char d1,d2;
    while(!RI);
    RI=0;
    d1=toint(SBUF);
    while(!RI);
    RI=0;
    d2=toint(SBUF);
    return d1*16+d2;}

    unsigned int detchip(int adr)
    {
    P0=0xff;
    P1=adr%256;P2=adr/256;
    init_pro();
    _nop_();_nop_();_nop_();_nop_();_nop_();/*delay 10 us*/
    _nop_();_nop_();_nop_();_nop_();_nop_();
    return P0;}

    void read()
    {
    unsigned int adr,maxadr;
    unsigned char h,l;
    P0=0xff;
    maxadr=getadr();
    for(adr=0;adrmaxadr;adr++)
    {
    P1=adr%256;P2=adr/256;
    p26=0;
    p27=0;
    p36=1;
    p37=1;
    vpp=1;
    prog=1;
    h=IntToAscii(P0/16);
    sendbyte(h);
    l=IntToAscii(P0%16);
    sendbyte(l);}
    init_pro();}

    unsigned int test(unsigned int nn)
    {
    unsigned int adr,counter=0;
    P0=0xff;
    for(adr=0;adrnn;adr++)
    {
    P1=adr%256;P2=adr/256;
    p26=0;
    p27=0;
    p36=1;
    p37=1;
    vpp=1;
    prog=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();/*delay 10 us*/
    _nop_();_nop_();_nop_();_nop_();_nop_();
    if(P0!=0xff) counter++;}
    init_pro();
    return counter;}

    unsigned char erase(unsigned int nn,unsigned int p)
    {
    unsigned int i;
    P0=0xff;
    p26=1;
    p27=0;
    p36=0;
    p37=0;
    vpp=0;
    prog=1;
    for(i=0;i50000;i++) _nop_();
    switch(p)
    {
    case 0 : prog=0;
    prog=1;
    break;
    case 1 : prog=0;
    _nop_();
    prog=1;
    break;
    case 2 : prog=0;
    _nop_();_nop_();
    prog=1;
    break;
    case 3 : prog=0;
    _nop_();_nop_();_nop_();
    prog=1;
    break;
    case 4 : prog=0;
    _nop_();_nop_();_nop_();_nop_();
    prog=1;
    break;
    case 5 : prog=0;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    prog=1;
    break;
    case 6 : prog=0;
    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    prog=1;
    break;
    case 7 : prog=0;
    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    prog=1;
    break;
    case 8 : prog=0;
    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    prog=1;
    break;
    default: prog=0;
    for(i=0;ip;i++) _nop_();
    prog=1;
    break;}
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    vpp=1;
    for(i=0;ip;i++) _nop_();
    if(test(nn)==0) return 's';
    else return 'f';}

    unsigned char write()
    {
    unsigned int adr,d,i;
    p26=0;
    p27=1;
    p36=1;
    p37=1;
    vpp=0;
    prog=1;
    for(i=0;i4000;i++) _nop_();
    adr=getadr();
    d=getdata();
    while(1)
    {
    if(adr>50000) break;
    P1=adr%256;P2=(adr/256)|0x80;
    P0=d;
    TI=0;
    SBUF='s';
    prog=0;
    _nop_();_nop_();_nop_();
    prog=1;
    adr=getadr();
    d=getdata();
    while(!rdy);}
    init_pro();
    return 'f';}

    unsigned char lock(unsigned char level)
    {
    unsigned int i;
    vpp=0;
    if(level==1) {p26=1;p27=1;p36=1;p37=1;}
    if(level==2) {p26=1;p27=1;p36=0;p37=0;}
    if(level==3) {p26=1;p27=0;p36=1;p37=0;}
    for(i=0;i4000;i++) _nop_();
    prog=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();/*delay 10 us*/
    _nop_();_nop_();_nop_();_nop_();_nop_();
    prog=0;
    _nop_();_nop_();_nop_();_nop_();_nop_();/*delay 10 us*/
    _nop_();_nop_();_nop_();_nop_();_nop_();
    prog=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    while(!rdy);
    init_pro();
    return 'o';}

    void main()
    {
    unsigned char data c;
    unsigned int data adr,l,dx;
    init_pro();
    init_serial();
    while(1)
    {
    init_pro();
    scanf(%c,c);
    switch(c)
    {
    case 'c' : printf(%c,'o');
    break;
    case 'd' : scanf(%x,adr);
    printf(%x,detchip(adr));
    break;
    case 't' : scanf(%u,dx);
    printf(%u,test(dx));
    break;
    case 'r' : read();
    break;
    case 'e' : scanf(%u,%u,adr,dx);
    printf(%c,erase(adr,dx));
    break;
    case 'w' : printf(%c,write());
    break;
    case 'l' : scanf(%u,l);
    printf(%c,lock(l));
    break;
    case 'h' : printf(**********Er6y Programmer Help Window***********n);
    break;
    default : break;}


    }
    }



    關鍵詞: 程序 編程 89C51

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 榕江县| 漳州市| 洛阳市| 吴桥县| 泰和县| 泰和县| 庆安县| 遂昌县| 镇远县| 太湖县| 大方县| 利辛县| 新营市| 青浦区| 江北区| 玉田县| 涞水县| 浮山县| 日喀则市| 涿州市| 衡水市| 宣化县| 甘谷县| 彝良县| 甘南县| 泰顺县| 聂拉木县| 郧西县| 托克逊县| 玉山县| 平南县| 米脂县| 扶余县| 巨鹿县| 娱乐| 陇川县| 玉树县| 岳阳市| 社旗县| 磐石市| 巴塘县|