STC89C51 发表于 2023-10-22 10:32:05

本帖最后由 STC89C51 于 2023-10-29 11:24 编辑

.



函数计算代码程序



.................................................................................................................



编写程序代码




#include "COMM/stc.h"               
#include "COMM/usb.h"

#define MAIN_Fosc 24000000UL

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
            

void sys_init();


int Add( int parm1,int parm2 );

void main()                                       
{
      int a =10;
      
      sys_init();                              
      usb_init();                              
      EA = 1;                                       
      
      while(1)               
      {
                if( DeviceState != DEVSTATE_CONFIGURED )         
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();

                        printf("?????:%d\r\n",Add(1,2));
                        
          }                        
               
      }
}


void sys_init()               
{
    WTST = 0;
    EAXFR = 1;
    CKCON = 0;

      P0M1 = 0x00;   P0M0 = 0x00;   
    P1M1 = 0x00;   P1M0 = 0x00;   
    P2M1 = 0x00;   P2M0 = 0x00;   
    P3M1 = 0x00;   P3M0 = 0x00;   
    P4M1 = 0x00;   P4M0 = 0x00;   
    P5M1 = 0x00;   P5M0 = 0x00;   
    P6M1 = 0x00;   P6M0 = 0x00;   
    P7M1 = 0x00;   P7M0 = 0x00;   
      
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

   
    IRC48MCR = 0x80;   
    while (!(IRC48MCR & 0x01));

    USBCLK = 0x00;      
    USBCON = 0x90;
}

int Add( int parm1,int parm2 )
{
      return parm1 + parm2;
}







.................................................................................................................


编译提示信息

0错误 0警告



Rebuild target 'Target 1'
compiling Demo.c...
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=55 code=7057
creating hex file from ".\Objects\Demo"...
".\Objects\Demo" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:00:00:00





......................................................................................................................






int Add( int parm1,int parm2 );



printf("?????:%d\r\n",Add(1,2));




int Add( int parm1,int parm2 )
{
      return parm1 + parm2;
}






................................................................................................................................












.

STC89C51 发表于 2023-10-29 17:25:50

.





频率计 89C52





.........................................................




/*
P1->address low ADL P2=1,PBYTE
P2->address High ADH P2=2,PBYTE
Pmod P2=4 PBYTE
PROG-> Pmod0
P3.6-> Pmod1
P3.6-> Pmod2
VPP->P3_2
READY->P3_7


*/


#define VPP(x) P3_2=!x




#include <mcs51/at89x52.h>
#include <mcs51/BitMem.h>
typedef union {
    unsigned char c;
    struct {
      unsigned char d0:1;
      unsigned char d1:1;
      unsigned char d2:1;
      unsigned char d3:1;
      unsigned char d4:1;
      unsigned char d5:1;
      unsigned char d6:1;
      unsigned char d7:1;
    };
} BITCH;
BITCH ADL,ADH,Pmod;
//BITCHAR(ADL,13)
//BITCHAR(ADH,14)
//BITCHAR(Pmod,8)
void d10us(){unsigned char c=10;while(--c);}
void d10ms(){unsigned char c=250;while(--c)d10us();c=120;while(--c)d10us();}
void d100ms(){unsigned char c=10;while(--c)d10ms();}
void initsio()
{
    T2CON=0x34;
    RCAP2L=0xfa;
    RCAP2H=0xff;
    SCON=0x5A;
    TR2=1;
    ES=0;
    EA=0;
}




char getch(){
    while(!RI);
    RI=0;
    return SBUF;
}
void putchar(char c){
    TI=0;
    SBUF=c;
    while(!TI);


}
void prog(){
    Pmod.d0=0;
    P2=4;
    PBYTE=Pmod.c;
    d10us();
    Pmod.d0=1;
    PBYTE=Pmod.c;
}


void mode(__bit a,__bit c,__bit d){
    ADH.d6=a;
    P2=2;
    PBYTE=ADH.c;
    Pmod.d1=c;
    Pmod.d2=d;
    P2=4;
    PBYTE=Pmod.c;
}
void enable(__bit c){
    ADH.d7=c;
    P2=2;
    PBYTE=ADH.c;
}
void erase(){
    mode(1,0,0);
    enable(0);
    VPP(1);
    d10us();
    P2=4;
    Pmod.d0=0;
    PBYTE=Pmod.c;
    d10ms();
    Pmod.d0=1;
    PBYTE=Pmod.c;
    d10us();
    VPP(0);
    enable(1);
    mode(0,1,1);
}


void addr(unsigned int a){
    ADL.c=a&0xff;
    ADH.c=ADH.c&0xe0|(a>>8)&0x1f;
    P2=1;
    PBYTE=ADL.c;
    P2=2;
    PBYTE=ADH.c;
}
char read(unsigned int a){
    char c;
    P1=0xff;
    enable(1);
    addr(a);
    enable(0);
    c=P1;
    enable(1);
    Pmod.d5=1; //2051 XTAL1
    P2=4;
    PBYTE=Pmod.c;
    Pmod.d5=0; //2051 XTAL1
    PBYTE=Pmod.c;
    return c;
}
void power(__bit c){
    Pmod.d0=1;
    Pmod.d3=1; //2051 RST
    Pmod.d5=0; //2051 XTAL1
    P2=4;
    PBYTE=Pmod.c;
    d10ms();
    VPP(0);
    P3_3=!c;
    d10ms();
    Pmod.d3=0;
    PBYTE=Pmod.c;
}


/*void readSig(){
    mode(0,0,0);
    printf("%b02XH,%b02XH,%b02XH\n",read(0x30),read(0x31),read(0x32));
    printf("%b02XH,%b02XH,%b02XH\n",read(0xa),read(0xb),read(0xc));
    mode(0,1,1);
}*/


char write(int a,char ch){
    enable(1);


    addr(a);
    P1=ch;
    VPP(1);
    d10us();
    prog();
    d10us();
    VPP(0);
    while(!P3_7);
    return read(a);




}


__code char hexChar[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void putByteHex(char c){
    putchar(hexChar[(c>>4)&0xf]);
    putchar(hexChar);
}
void putWordHex(unsigned int i){
    char c=4,k;
    while(c--){
      k=i>>12;
      putchar(hexChar);
      i<<=4;
    }
}
void putstr(const char *s){
    while(*s){putchar(*s++);}
}
char menu(){
    char c;
    mode(0,0,0);
    while(1){
      power(1);d10ms();
      putstr("\n\n\tAT89C(20)51/52 Programmer\n"
         "\t Chip ID: ");putByteHex(read(0x30));putstr("H,");
         putByteHex(read(0x31));putstr("H,");
         putByteHex(read(0x32));
         putstr("H\n"
         "\t1.Erase chip.\n"
         "\t2.Write 1K data(1051) from 1000H.\n"
         "\t3.Write 2K data(2051) from 1000H.\n"
         "\t4.Write 4K data(51/4051) from 1000H.\n"
         "\t5.Write 8K data(52) from 1000H.\n"
         "\t6.Read 1K data.\n"
         "\t7.Read 2K data.\n"
         "\t8.Read 4K data.\n"
         "\t9.Read 8K data.\n"
         "\n"
         "\tChoice:");
      power(0);
      c=getch();
      putchar(c);
      if(c>='1'&&c<='9'){
            mode(0,1,1);
            return c;
      }
    }
}
void readData(unsigned int len){
    unsigned int i;
    power(1);d10ms();
    for(i=0;i<len;i++){
      if(i%16==0){
            putchar('\n');putWordHex(i);putstr("H:");
      }
      putchar(' ');putByteHex(read(i));


    }
    power(0);
    putstr("\nPress any key to continue.");
    getch();
}
void writeData(int len){
    int i;
    char c,d;
    putstr("\nThe chip will be written, (c)ancel?");
    if(getch()=='c')return;
    putstr("\nWriting...\n");
    power(1);d100ms();
    for(i=0;i<len;i++){
      if(i%16==0){
            putchar('\n');
            putWordHex(i);
            putstr("H: ");
      }
      c=CBYTE;
      d=write(i,c);
      if(c==d){
            putByteHex(d);
            putchar(' ');
      }else{
            putstr("\nError! ");
            putWordHex(i);putstr("H: ");
            putByteHex(c);putstr("->");
            putByteHex(d);
            break;
      }
    }
    d100ms();
    power(0);
    putstr("\nPress any key to continue.");getch();
}


void main(void)
{
    power(0);
    ADH.c=ADL.c=0;
    initsio();
    TI=1;
    while(1){
      switch(menu()){
            case '1':
                putstr("\nThe chip will be erased,are you sure(Y/N)?");
                if(getch()=='Y'){
                  putstr("\nErasing...");
                  power(1);
                  d100ms();
                  erase();


                  power(0);
                  putstr("\nErased.\nPress any key to continue.");
                  getch();
                }
                break;
            case '2':
                writeData(0x400);
                break;
            case '3':
                writeData(0x800);
                break;
            case '4':
                writeData(0x1000);
                break;
            case '5':
                writeData(0x2000);
                break;
            case '6':
                readData(0x400);
                break;
            case '7':
                readData(0x800);
                break;
            case '8':
                readData(0x1000);
                break;
            case '9':
                readData(0x2000);
                break;


      }
    }
}





................................................................................................................





























.

STC89C51 发表于 2023-10-29 17:28:00

本帖最后由 STC89C51 于 2023-10-29 17:30 编辑

.





频率计 89C52





.....................................................................................











/*
P1->address low ADL P2=1,PBYTE
P2->address High ADH P2=2,PBYTE
Pmod P2=4 PBYTE
PROG-> Pmod0
P3.6-> Pmod1
P3.6-> Pmod2
VPP->P3_2
READY->P3_7

*/

#define VPP(x) P3_2=!x


#include <mcs51/at89x52.h>
#include <mcs51/BitMem.h>
typedef union {
    unsigned char c;
    struct {
      unsigned char d0:1;
      unsigned char d1:1;
      unsigned char d2:1;
      unsigned char d3:1;
      unsigned char d4:1;
      unsigned char d5:1;
      unsigned char d6:1;
      unsigned char d7:1;
    };
} BITCH;
BITCH ADL,ADH,Pmod;
//BITCHAR(ADL,13)
//BITCHAR(ADH,14)
//BITCHAR(Pmod,8)
void d10us(){unsigned char c=10;while(--c);}
void d10ms(){unsigned char c=250;while(--c)d10us();c=120;while(--c)d10us();}
void d100ms(){unsigned char c=10;while(--c)d10ms();}
void initsio()
{
    T2CON=0x34;
    RCAP2L=0xfa;
    RCAP2H=0xff;
    SCON=0x5A;
    TR2=1;
    ES=0;
    EA=0;
}


char getch(){
    while(!RI);
    RI=0;
    return SBUF;
}
void putchar(char c){
    TI=0;
    SBUF=c;
    while(!TI);

}
void prog(){
    Pmod.d0=0;
    P2=4;
    PBYTE=Pmod.c;
    d10us();
    Pmod.d0=1;
    PBYTE=Pmod.c;
}

void mode(__bit a,__bit c,__bit d){
    ADH.d6=a;
    P2=2;
    PBYTE=ADH.c;
    Pmod.d1=c;
    Pmod.d2=d;
    P2=4;
    PBYTE=Pmod.c;
}
void enable(__bit c){
    ADH.d7=c;
    P2=2;
    PBYTE=ADH.c;
}
void erase(){
    mode(1,0,0);
    enable(0);
    VPP(1);
    d10us();
    P2=4;
    Pmod.d0=0;
    PBYTE=Pmod.c;
    d10ms();
    Pmod.d0=1;
    PBYTE=Pmod.c;
    d10us();
    VPP(0);
    enable(1);
    mode(0,1,1);
}

void addr(unsigned int a){
    ADL.c=a&0xff;
    ADH.c=ADH.c&0xe0|(a>>8)&0x1f;
    P2=1;
    PBYTE=ADL.c;
    P2=2;
    PBYTE=ADH.c;
}
char read(unsigned int a){
    char c;
    P1=0xff;
    enable(1);
    addr(a);
    enable(0);
    c=P1;
    enable(1);
    Pmod.d5=1; //2051 XTAL1
    P2=4;
    PBYTE=Pmod.c;
    Pmod.d5=0; //2051 XTAL1
    PBYTE=Pmod.c;
    return c;
}
void power(__bit c){
    Pmod.d0=1;
    Pmod.d3=1; //2051 RST
    Pmod.d5=0; //2051 XTAL1
    P2=4;
    PBYTE=Pmod.c;
    d10ms();
    VPP(0);
    P3_3=!c;
    d10ms();
    Pmod.d3=0;
    PBYTE=Pmod.c;
}

/*void readSig(){
    mode(0,0,0);
    printf("%b02XH,%b02XH,%b02XH\n",read(0x30),read(0x31),read(0x32));
    printf("%b02XH,%b02XH,%b02XH\n",read(0xa),read(0xb),read(0xc));
    mode(0,1,1);
}*/

char write(int a,char ch){
    enable(1);

    addr(a);
    P1=ch;
    VPP(1);
    d10us();
    prog();
    d10us();
    VPP(0);
    while(!P3_7);
    return read(a);


}

__code char hexChar[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void putByteHex(char c){
    putchar(hexChar[(c>>4)&0xf]);
    putchar(hexChar);
}
void putWordHex(unsigned int i){
    char c=4,k;
    while(c--){
      k=i>>12;
      putchar(hexChar);
      i<<=4;
    }
}
void putstr(const char *s){
    while(*s){putchar(*s++);}
}
char menu(){
    char c;
    mode(0,0,0);
    while(1){
      power(1);d10ms();
      putstr("\n\n\tAT89C(20)51/52 Programmer\n"
         "\t Chip ID: ");putByteHex(read(0x30));putstr("H,");
         putByteHex(read(0x31));putstr("H,");
         putByteHex(read(0x32));
         putstr("H\n"
         "\t1.Erase chip.\n"
         "\t2.Write 1K data(1051) from 1000H.\n"
         "\t3.Write 2K data(2051) from 1000H.\n"
         "\t4.Write 4K data(51/4051) from 1000H.\n"
         "\t5.Write 8K data(52) from 1000H.\n"
         "\t6.Read 1K data.\n"
         "\t7.Read 2K data.\n"
         "\t8.Read 4K data.\n"
         "\t9.Read 8K data.\n"
         "\n"
         "\tChoice:");
      power(0);
      c=getch();
      putchar(c);
      if(c>='1'&&c<='9'){
            mode(0,1,1);
            return c;
      }
    }
}
void readData(unsigned int len){
    unsigned int i;
    power(1);d10ms();
    for(i=0;i<len;i++){
      if(i%16==0){
            putchar('\n');putWordHex(i);putstr("H:");
      }
      putchar(' ');putByteHex(read(i));

    }
    power(0);
    putstr("\nPress any key to continue.");
    getch();
}
void writeData(int len){
    int i;
    char c,d;
    putstr("\nThe chip will be written, (c)ancel?");
    if(getch()=='c')return;
    putstr("\nWriting...\n");
    power(1);d100ms();
    for(i=0;i<len;i++){
      if(i%16==0){
            putchar('\n');
            putWordHex(i);
            putstr("H: ");
      }
      c=CBYTE;
      d=write(i,c);
      if(c==d){
            putByteHex(d);
            putchar(' ');
      }else{
            putstr("\nError! ");
            putWordHex(i);putstr("H: ");
            putByteHex(c);putstr("->");
            putByteHex(d);
            break;
      }
    }
    d100ms();
    power(0);
    putstr("\nPress any key to continue.");getch();
}

void main(void)
{
    power(0);
    ADH.c=ADL.c=0;
    initsio();
    TI=1;
    while(1){
      switch(menu()){
            case '1':
                putstr("\nThe chip will be erased,are you sure(Y/N)?");
                if(getch()=='Y'){
                  putstr("\nErasing...");
                  power(1);
                  d100ms();
                  erase();

                  power(0);
                  putstr("\nErased.\nPress any key to continue.");
                  getch();
                }
                break;
            case '2':
                writeData(0x400);
                break;
            case '3':
                writeData(0x800);
                break;
            case '4':
                writeData(0x1000);
                break;
            case '5':
                writeData(0x2000);
                break;
            case '6':
                readData(0x400);
                break;
            case '7':
                readData(0x800);
                break;
            case '8':
                readData(0x1000);
                break;
            case '9':
                readData(0x2000);
                break;

      }
    }
}













..............................................................................................................









.
页: 1 [2]
查看完整版本: 【实验箱已收到】2023学习日记 STC 32位 8051 单片机