?? sp89com.c
字號:
/*P89CXX 編程器電腦發(fā)送程序*/
#include "stdio.h"
#include "dos.h"
#include "process.h"
#include "string.h"
#include "time.h"
float start_time;
#define b_init 0
#define b_erase 1
#define b_erase_block 2 /*P89C51RC+、P89C51RD+特有*/
#define b_erase_sbyte_bvec 3 /*P89C51RC+、P89C51RD+特有*/
#define b_read 4
#define b_program_byte 5
#define b_program_sbyte 6 /*P89C51RC+、P89C51RD+特有*/
#define b_program_boot_vector 7 /*P89C51RC+、P89C51RD+特有*/
#define b_lock1 8
#define b_lock12 9
#define b_lock123 10
#define b_cpu 12 /*定義需要編程的cpu類型,0:P89C51 1:P89C52 2:P89C54 3:P89C58 4:P89C51RC+ 5:P89C51RD+*/
unsigned char *cpu_d[]={{"P89C51U"},{"P89C52U"},{"P89C54U"},{"P89C58U"},{"P89C51RC+"},{"P89C51RD+"}};
void init_com3(void) {
outportb(0x3eb,0x80);
outportb(0x3e8,1);
outportb(0x3e9,0x0);
outportb(0x3eb,0x3);
}
void sen_com3(unsigned char d) {
long i;
while (!(inportb(0x3ed)&0x20));
outportb(0x3ed,0x0);
outportb(0x3e8,d);
i=clock();
while (1) {
if (clock()>(i+9)) {printf("Time out.\n\7\7");exit(1);}
if ((inp(0x3ed)&0x1)==1) break;
}
if (inp(0x3e8)!=d) {printf("CRC error.\n");exit(1);}
}
unsigned char rec_com3(void) {
long i;
unsigned char d;
i=clock();
while (1) {
if (clock()>(i+9)) {printf("Time out.\n\7\7");exit(1);}
if ((inp(0x3ed)&1)==1) break;
}
d=inp(0x3e8);
while (!(inportb(0x3ed)&0x20));
outportb(0x3ed,0x0);
outportb(0x3e8,d);
return(d);
}
void select_cpu(unsigned char cpu) {
long i;
printf(" Testing CPU ... ");
sen_com3(0x0); /*send start byte*/
sen_com3(b_cpu);
sen_com3(cpu);
if (rec_com3()) {
fcloseall();
printf(" CPU not ready or CPU type error!\n\7\7");
exit(1);
}
printf(" The CPU is %s. \n",cpu_d[cpu]);
}
void init_cpu(void) {
unsigned char temp;
printf(" Initialize CPU ... ");
sen_com3(0x0);/*send start byte*/
sen_com3(b_init);
while (1) {
temp=rec_com3();
if (temp==0) break;
else if (temp==1) {
fcloseall();
printf(" Error!\7\n");
exit(1);
}
}
printf(" Success.\n");
}
void lock_cpu(void) {
unsigned char temp;
printf(" Lock CPU ... ");
sen_com3(0); /*send start byte*/
sen_com3(b_lock123);
while (1) {
temp=rec_com3();
if (temp==0) break;
else if (temp==1) {
fcloseall();
printf(" Error!\7\n");
exit(1);
}
}
printf(" Success.\n Total used %3.2f seconds.\n\7",(clock()-start_time)/18.2);
}
void program(FILE *fp1) {
unsigned char y,d;
unsigned int lenth=0;
long i;
printf(" Programing ... ");
sen_com3(0); /*send start btye*/
sen_com3(b_program_byte);
y=wherey();
while (! (feof(fp1)) ) {
sen_com3(getc(fp1));
if ((lenth%0x100)==0) {
gotoxy(18,y);printf("%4x BYTE ",lenth);
}
lenth++;
}
gotoxy(18,y);printf("%4x BYTE ",lenth-1);
i=clock();while (clock()<(i+9)) {}
gotoxy(28,y);
printf(" Success.\n");
fclose(fp1);
}
void main(char n,char *d[]) {
unsigned char cpu;
FILE *fp1;
unsigned char chip;
switch (n) {
case 1:
printf(" Please select file.\n\7");
exit(1);
break;
case 2:
printf(" Please select CPU type.\n");
exit(1);
break;
case 3:
printf(" Please select pararmeter.\n");
exit(1);
break;
case 4:
if ((fp1=fopen(*(d+1),"rb"))==NULL) {
printf (" File no found.\n\7\7");
exit(1);
}
for (cpu=0;cpu<6;cpu++) {
if (strcmp(*(d+2),*(cpu_d+cpu))==0) break;
}
if (cpu==6) {
printf(" CPU tpye error.\n");
exit(1);
}
init_com3();
start_time=clock();
select_cpu(cpu);
switch (d[3][0]) {
case 'P':
case 'p':
program(fp1);
break;
case 'i':
case 'I':
init_cpu();
break;
case 'l':
case 'L':
lock_cpu();
break;
case 'a':
case 'A':
init_cpu();
program(fp1);
lock_cpu();
break;
}
break;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -