89c2051c语言头文件,at89c2051程序能读出来么

/*

Easy-Downloader V1.1 for ATMEL 89C2051/4051

Copyright(c) 1998 By W.Sirichote

Code for writer board was written by W.Sirichote

PC code for downloading HEX file was written By Zong

*/

#include c:mc518051io.h

#include c:mc518051reg.h

#define xon 0x11

#define xoff 0x13

extern register char cputick;

register int i;

unsigned register char ACC,temp;

register char command;

char *title[] = " Easy-Downloader V1.1 for ATMEL 89C2051/4051"

char *prompt[] = " >"

char *ok[] = " ok"

register int count;

main()

{

/* define ASM EQU for assembly interfacing */

asm"LM317 EQU $b5";

asm"LE    EQU $b7";

asm"prog  EQU $b2";

asm"rdy   EQU $b3";

asm"xtal  EQU $b4";

asm"p10  EQU $90";

asm"p11  EQU $91";

asm"p12  EQU $92";

asm"p13  EQU $93";

asm"p14  EQU $94";

cputick = 0;

i = 0;

count = 0;

serinit(9600);

getch();

putstr(*title);

asm " clr LE";

initpowerup();

sendprompt();

while(1)

{

while ( cputick < 1)

;

cputick = 0;

/* run the following tasks every 10 ms */

getcommand();

prompting();

erase();

write();

read();

lock();

setcounter();

}

}

getnum()

{

char s[6]; /*  put to global variables instead five characters plus terminator */

char c;

int i;

c = 0;

for (i = 0; c != 10; i++)

{

putch(xon);

c = getch();

s[i] = c;

}

s[i] = '';

if (i==0)

return (-1);

else

return (_atoi(s));

}

getcommand()

{

if ((SCON & 0x01) != 0)

command = getch();

else command = -1;             /* no cammand has entered */

}

char getconsole()

{

if ((SCON & 0x01) != 0)

return(getchr());           /* use getchr() instead,ie. no echo */

else return(-1);

}

putok()

{

putstr(*ok);

sendprompt();

}

sendprompt()

{

putstr(*prompt);

}

prompting()

{

if (command == '')

{

putstr(*title);

sendprompt();

}

}

pulseLE()

{

delay(1);

asm" setb LE";

delay(1);

asm" clr LE";

delay(1);

}

erase()

{

if (command == 'e')

{

asm {

setb p12     /* set erase mode */

clr  p11

clr  p10

}

pulseLE();

asm {

clr p14

clr LM317

}

pulseLE();

delay(100);    /* raise program supply up to 12V */

for (i=0; i < 10; i++) /* erase entire PEROM array (2kB) */

{

asm " clr prog";

delay(10);           /* 10 ms prog pulse */

asm " setb prog";

delay(1);

}

initpowerup();    /* reset internal address counter to 000h */

putok();

}

}

write()

{

if (command == 'w')

{

asm {

clr  p12          /* set program mode */

setb p11

setb p10

}

pulseLE();

asm {

clr p14

clr LM317

}

pulseLE();

delay(100);       /* rise supply up 12V */

asm" clr IE.7";

for (i = 0; i < count; i++)

{                 /* use XON & XOFF flow control */

putch(xon);       /* send XON */

P1 = getchr();

putch(xoff);       /* send XOFF */

pulseProg();

/*

asm " clr prog";

asm " nop";

asm " nop";

asm " nop";

asm " nop";           /* pulse prog ~4 microsecond */

asm " setb prog"; */

asm " nop";

asm " jnb rdy,*";

asm " nop";

asm " setb xtal";

delay (1);

asm " clr xtal";

}

asm" setb IE.7";

asm " setb LM317";

asm " setb p14";

pulseLE();

putok();

}

}

read()    /* read code with the number of bytes set by 's' command */

{

if (command=='r')

{

initpowerup();

/*  delay(100);   */

asm{

clr  prog

clr  p12

clr  p11

setb p10

}

pulseLE();

for(i = 0; i < count; i++)

{

asm" setb prog";

asm" mov P1,#$FF";   /* put FF before read back */

delay(1);

printA();        /* read in HEX */

asm" setb xtal";  /* next address */

delay(1);

asm" clr xtal";

/*  chkXOFF();  */      /* flow controlled by XON/XOFF */

}

putok();

}

}

printA()

{

ACC = P1;

ACC >>= 4;  /* shift right 4 bits */

putHEX();

ACC = P1&15;

putHEX();

}

putHEX()

{

if (ACC > 9)

putch(ACC+55);

else putch(ACC+48);

}

/*

chkXOFF()     /* use XON and XOFF for controlling flow with host */

{

if(getconsole() == xoff)

{

do;

while(getconsole() != xon);

}

}

*/

lock()  /* only protection mode 3,i.e., disabled further

program and verify, can be programmed */

{

if (command == 'l')

{

P1 = 0x07;

pulseLE();

asm " clr LM317";

delay(100);

pulseProg();

P1 = 0x06;

pulseLE();

pulseProg();

asm " setb p14";

asm " setb LM317";

pulseLE();

putok();

}

}

setcounter()

{

if (command == 's')

{

count = getnum();

putok();

}

}

/*

printhelp()

{

if (command == '?')

{

putstr(" e  erase");

putstr(" rb read BIN");

putstr(" rh read HEX");

putstr(" w  write");

putstr(" l  lock");

}

putok();

}

*/

pulseProg()

{

asm " clr prog";

asm " nop";

asm " nop";

asm " nop";

asm " setb prog";

}

initpowerup()

{

asm{

clr  prog

clr  xtal

setb LM317

setb p14

setb rdy

}

pulseLE();

delay(100);

asm{

setb prog

clr p14

setb LM317

}

pulseLE();

delay(100);

}

time1ms()    /* 1 ms delay with XTAL 11.0592MHz */

{

int i;

for (i = 0; i < 8 ; i++)

;

}

delay(n)      /* do nothing n*1ms */

int n;

{

int i;

for (i=0; i< n ; i++)

time1ms();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值