.
函数计算代码程序
.................................................................................................................
编写程序代码
#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;
}
................................................................................................................................
.
.
频率计 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: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]