找回密码
 立即注册
楼主: STC89C51

【实验箱已收到】2023学习日记 STC 32位 8051 单片机

[复制链接]

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 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;
}






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












.

Printf.rar

89.25 KB, 下载次数: 82

回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-29 17:25:50 | 显示全部楼层
.





频率计 89C52





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




/*
P1->address low ADL P2=1,PBYTE[0]
P2->address High ADH P2=2,PBYTE[0]
Pmod P2=4 PBYTE[0]
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[0]=Pmod.c;
    d10us();
    Pmod.d0=1;
    PBYTE[0]=Pmod.c;
}


void mode(__bit a,  __bit c,__bit d){
    ADH.d6=a;
    P2=2;
    PBYTE[0]=ADH.c;
    Pmod.d1=c;
    Pmod.d2=d;
    P2=4;
    PBYTE[0]=Pmod.c;
}
void enable(__bit c){
    ADH.d7=c;
    P2=2;
    PBYTE[0]=ADH.c;
}
void erase(){
    mode(1,0,0);
    enable(0);
    VPP(1);
    d10us();
    P2=4;
    Pmod.d0=0;
    PBYTE[0]=Pmod.c;
    d10ms();
    Pmod.d0=1;
    PBYTE[0]=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[0]=ADL.c;
    P2=2;
    PBYTE[0]=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[0]=Pmod.c;
    Pmod.d5=0; //2051 XTAL1
    PBYTE[0]=Pmod.c;
    return c;
}
void power(__bit c){
    Pmod.d0=1;
    Pmod.d3=1; //2051 RST
    Pmod.d5=0; //2051 XTAL1
    P2=4;
    PBYTE[0]=Pmod.c;
    d10ms();
    VPP(0);
    P3_3=!c;
    d10ms();
    Pmod.d3=0;
    PBYTE[0]=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[c&0xf]);
}
void putWordHex(unsigned int i){
    char c=4,k;
    while(c--){
        k=i>>12;
        putchar(hexChar[k]);
        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"
           "\t  Choice[1-9]:");
        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[0x1000+i];
        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;


        }
    }
}





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





























.

回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-29 17:28:00 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-29 17:30 编辑

.





频率计 89C52





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











  1. /*
  2. P1->address low ADL P2=1,PBYTE[0]
  3. P2->address High ADH P2=2,PBYTE[0]
  4. Pmod P2=4 PBYTE[0]
  5. PROG-> Pmod0
  6. P3.6-> Pmod1
  7. P3.6-> Pmod2
  8. VPP->P3_2
  9. READY->P3_7
  10. */
  11. #define VPP(x) P3_2=!x
  12. #include <mcs51/at89x52.h>
  13. #include <mcs51/BitMem.h>
  14. typedef union {
  15.     unsigned char c;
  16.     struct {
  17.         unsigned char d0:1;
  18.         unsigned char d1:1;
  19.         unsigned char d2:1;
  20.         unsigned char d3:1;
  21.         unsigned char d4:1;
  22.         unsigned char d5:1;
  23.         unsigned char d6:1;
  24.         unsigned char d7:1;
  25.     };
  26. } BITCH;
  27. BITCH ADL,ADH,Pmod;
  28. //BITCHAR(ADL,13)
  29. //BITCHAR(ADH,14)
  30. //BITCHAR(Pmod,8)
  31. void d10us(){unsigned char c=10;while(--c);}
  32. void d10ms(){unsigned char c=250;while(--c)d10us();c=120;while(--c)d10us();}
  33. void d100ms(){unsigned char c=10;while(--c)d10ms();}
  34. void initsio()
  35. {
  36.     T2CON=0x34;
  37.     RCAP2L=0xfa;
  38.     RCAP2H=0xff;
  39.     SCON=0x5A;
  40.     TR2=1;
  41.     ES=0;
  42.     EA=0;
  43. }
  44. char getch(){
  45.     while(!RI);
  46.     RI=0;
  47.     return SBUF;
  48. }
  49. void putchar(char c){
  50.     TI=0;
  51.     SBUF=c;
  52.     while(!TI);
  53. }
  54. void prog(){
  55.     Pmod.d0=0;
  56.     P2=4;
  57.     PBYTE[0]=Pmod.c;
  58.     d10us();
  59.     Pmod.d0=1;
  60.     PBYTE[0]=Pmod.c;
  61. }
  62. void mode(__bit a,  __bit c,__bit d){
  63.     ADH.d6=a;
  64.     P2=2;
  65.     PBYTE[0]=ADH.c;
  66.     Pmod.d1=c;
  67.     Pmod.d2=d;
  68.     P2=4;
  69.     PBYTE[0]=Pmod.c;
  70. }
  71. void enable(__bit c){
  72.     ADH.d7=c;
  73.     P2=2;
  74.     PBYTE[0]=ADH.c;
  75. }
  76. void erase(){
  77.     mode(1,0,0);
  78.     enable(0);
  79.     VPP(1);
  80.     d10us();
  81.     P2=4;
  82.     Pmod.d0=0;
  83.     PBYTE[0]=Pmod.c;
  84.     d10ms();
  85.     Pmod.d0=1;
  86.     PBYTE[0]=Pmod.c;
  87.     d10us();
  88.     VPP(0);
  89.     enable(1);
  90.     mode(0,1,1);
  91. }
  92. void addr(unsigned int a){
  93.     ADL.c=a&0xff;
  94.     ADH.c=ADH.c&0xe0|(a>>8)&0x1f;
  95.     P2=1;
  96.     PBYTE[0]=ADL.c;
  97.     P2=2;
  98.     PBYTE[0]=ADH.c;
  99. }
  100. char read(unsigned int a){
  101.     char c;
  102.     P1=0xff;
  103.     enable(1);
  104.     addr(a);
  105.     enable(0);
  106.     c=P1;
  107.     enable(1);
  108.     Pmod.d5=1; //2051 XTAL1
  109.     P2=4;
  110.     PBYTE[0]=Pmod.c;
  111.     Pmod.d5=0; //2051 XTAL1
  112.     PBYTE[0]=Pmod.c;
  113.     return c;
  114. }
  115. void power(__bit c){
  116.     Pmod.d0=1;
  117.     Pmod.d3=1; //2051 RST
  118.     Pmod.d5=0; //2051 XTAL1
  119.     P2=4;
  120.     PBYTE[0]=Pmod.c;
  121.     d10ms();
  122.     VPP(0);
  123.     P3_3=!c;
  124.     d10ms();
  125.     Pmod.d3=0;
  126.     PBYTE[0]=Pmod.c;
  127. }
  128. /*void readSig(){
  129.     mode(0,0,0);
  130.     printf("%b02XH,%b02XH,%b02XH\n",read(0x30),read(0x31),read(0x32));
  131.     printf("%b02XH,%b02XH,%b02XH\n",read(0xa),read(0xb),read(0xc));
  132.     mode(0,1,1);
  133. }*/
  134. char write(int a,char ch){
  135.     enable(1);
  136.     addr(a);
  137.     P1=ch;
  138.     VPP(1);
  139.     d10us();
  140.     prog();
  141.     d10us();
  142.     VPP(0);
  143.     while(!P3_7);
  144.     return read(a);
  145. }
  146. __code char hexChar[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  147. void putByteHex(char c){
  148.     putchar(hexChar[(c>>4)&0xf]);
  149.     putchar(hexChar[c&0xf]);
  150. }
  151. void putWordHex(unsigned int i){
  152.     char c=4,k;
  153.     while(c--){
  154.         k=i>>12;
  155.         putchar(hexChar[k]);
  156.         i<<=4;
  157.     }
  158. }
  159. void putstr(const char *s){
  160.     while(*s){putchar(*s++);}
  161. }
  162. char menu(){
  163.     char c;
  164.     mode(0,0,0);
  165.     while(1){
  166.         power(1);d10ms();
  167.         putstr("\n\n\tAT89C(20)51/52 Programmer\n"
  168.            "\t Chip ID: ");putByteHex(read(0x30));putstr("H,");
  169.            putByteHex(read(0x31));putstr("H,");
  170.            putByteHex(read(0x32));
  171.            putstr("H\n"
  172.            "\t1.Erase chip.\n"
  173.            "\t2.Write 1K data(1051) from 1000H.\n"
  174.            "\t3.Write 2K data(2051) from 1000H.\n"
  175.            "\t4.Write 4K data(51/4051) from 1000H.\n"
  176.            "\t5.Write 8K data(52) from 1000H.\n"
  177.            "\t6.Read 1K data.\n"
  178.            "\t7.Read 2K data.\n"
  179.            "\t8.Read 4K data.\n"
  180.            "\t9.Read 8K data.\n"
  181.            "\n"
  182.            "\t  Choice[1-9]:");
  183.         power(0);
  184.         c=getch();
  185.         putchar(c);
  186.         if(c>='1'&&c<='9'){
  187.             mode(0,1,1);
  188.             return c;
  189.         }
  190.     }
  191. }
  192. void readData(unsigned int len){
  193.     unsigned int i;
  194.     power(1);d10ms();
  195.     for(i=0;i<len;i++){
  196.         if(i%16==0){
  197.             putchar('\n');putWordHex(i);putstr("H:");
  198.         }
  199.         putchar(' ');putByteHex(read(i));
  200.     }
  201.     power(0);
  202.     putstr("\nPress any key to continue.");
  203.     getch();
  204. }
  205. void writeData(int len){
  206.     int i;
  207.     char c,d;
  208.     putstr("\nThe chip will be written, (c)ancel?");
  209.     if(getch()=='c')return;
  210.     putstr("\nWriting...\n");
  211.     power(1);d100ms();
  212.     for(i=0;i<len;i++){
  213.         if(i%16==0){
  214.             putchar('\n');
  215.             putWordHex(i);
  216.             putstr("H: ");
  217.         }
  218.         c=CBYTE[0x1000+i];
  219.         d=write(i,c);
  220.         if(c==d){
  221.             putByteHex(d);
  222.             putchar(' ');
  223.         }else{
  224.             putstr("\nError! ");
  225.             putWordHex(i);putstr("H: ");
  226.             putByteHex(c);putstr("->");
  227.             putByteHex(d);
  228.             break;
  229.         }
  230.     }
  231.     d100ms();
  232.     power(0);
  233.     putstr("\nPress any key to continue.");getch();
  234. }
  235. void main(void)
  236. {
  237.     power(0);
  238.     ADH.c=ADL.c=0;
  239.     initsio();
  240.     TI=1;
  241.     while(1){
  242.         switch(menu()){
  243.             case '1':
  244.                 putstr("\nThe chip will be erased,are you sure(Y/N)?");
  245.                 if(getch()=='Y'){
  246.                     putstr("\nErasing...");
  247.                     power(1);
  248.                     d100ms();
  249.                     erase();
  250.                     power(0);
  251.                     putstr("\nErased.\nPress any key to continue.");
  252.                     getch();
  253.                 }
  254.                 break;
  255.             case '2':
  256.                 writeData(0x400);
  257.                 break;
  258.             case '3':
  259.                 writeData(0x800);
  260.                 break;
  261.             case '4':
  262.                 writeData(0x1000);
  263.                 break;
  264.             case '5':
  265.                 writeData(0x2000);
  266.                 break;
  267.             case '6':
  268.                 readData(0x400);
  269.                 break;
  270.             case '7':
  271.                 readData(0x800);
  272.                 break;
  273.             case '8':
  274.                 readData(0x1000);
  275.                 break;
  276.             case '9':
  277.                 readData(0x2000);
  278.                 break;
  279.         }
  280.     }
  281. }
复制代码













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









.
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 04:03 , Processed in 0.165182 second(s), 58 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表