找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3290|回复: 6
打印 上一主题 下一主题
收起左侧

求教Keil软件编译 有四个语法错误

[复制链接]
跳转到指定楼层
楼主
ID:51357 发表于 2013-6-28 21:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Keil软件编译 有四个语法错误  刚刚进入这个领域 求教“前辈”


#include "at89x52.h"
#include "stdio.h"
#include "intrins.h"
#include "ctype.h"

sbit rdy=P3^2;
sbit vpp=P3^3;
sbit p26=P3^4;
sbit p27=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
sbit prog=P2^7;

void init_serial()
{
SCON=0x50; /*mode 1*/
TMOD=0x20;
TH1=0xfd;
PCON=0x80;  /*38400bps*/
TR1=1;   /*load tmr1*/
TI=1;
ES=1;}

void init_pro()
{
p26=0;
p27=0;
p36=0;
p37=0;
vpp=1;
prog=1;
}

void sendbyte(unsigned char da)        /*send a byte*/
{
while(!TI);
TI=0;
SBUF=da;}

unsigned char IntToAscii(unsigned char a)     /*change DEC to ASCII HEX code*/
{
if(a<10) return a+48;
if(a>9) return a+55;}

unsigned int getadr()                        /*get 5 diti  DEC adr*/
{
unsigned char i,a[5];
for(i=0;i<5;i++)
{
  while(!RI);
  RI=0;
  a[i]=SBUF-48;
  }
return a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];}

unsigned char getdata()                     /*get 2 diti  HEX data*/
{
unsigned char d1,d2;
while(!RI);
RI=0;
d1=toint(SBUF);
while(!RI);
RI=0;
d2=toint(SBUF);
return d1*16+d2;}

unsigned int detchip(int adr)
{
P0=0xff;
P1=adr%256;P2=adr/256;
init_pro();
_nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
return P0;}

void read()
{
unsigned int adr,maxadr;
unsigned char h,l;
P0=0xff;
maxadr=getadr();
for(adr=0;adr {
   P1=adr%256;P2=adr/256;
   p26=0;
   p27=0;
   p36=1;
   p37=1;
   vpp=1;
   prog=1;
   h=IntToAscii(P0/16);
   sendbyte(h);
   l=IntToAscii(P0%16);
   sendbyte(l);}
init_pro();}

unsigned int test(unsigned int nn)
{
unsigned int adr,counter=0;
P0=0xff;
for(adr=0;adr {
  P1=adr%256;P2=adr/256;
  p26=0;
  p27=0;
  p36=1;
  p37=1;
  vpp=1;
  prog=1;
  _nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
  _nop_();_nop_();_nop_();_nop_();_nop_();  
  if(P0!=0xff) counter++;}
  init_pro();
  return counter;}

unsigned char erase(unsigned int nn,unsigned int p)
{
unsigned int i;
P0=0xff;
p26=1;
p27=0;
p36=0;
p37=0;
vpp=0;
prog=1;
for(i=0;i<50000;i++) _nop_();
switch(p)
{
  case 0 : prog=0;
           prog=1;
           break;
  case 1 : prog=0;
           _nop_();
           prog=1;
           break;
  case 2 : prog=0;
           _nop_();_nop_();
           prog=1;
           break;
  case 3 : prog=0;
           _nop_();_nop_();_nop_();
           prog=1;
           break;
  case 4 : prog=0;
           _nop_();_nop_();_nop_();_nop_();
           prog=1;
           break;
  case 5 : prog=0;
           _nop_();_nop_();_nop_();_nop_();_nop_();
           prog=1;
           break;
  case 6 : prog=0;
           _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
           prog=1;
           break;
  case 7 : prog=0;
           _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
           prog=1;
           break;
  case 8 : prog=0;
           _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
           prog=1;
           break;
  default: prog=0;
           for(i=0;i           prog=1;
           break;}
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
vpp=1;
for(i=0;i if(test(nn)==0) return 's';
else return 'f';}

unsigned char write()
{
unsigned int adr,d,i;
p26=0;
p27=1;
p36=1;
p37=1;
vpp=0;
prog=1;
for(i=0;i<4000;i++) _nop_();
adr=getadr();
d=getdata();
while(1)
{
  if(adr>50000) break;
  P1=adr%256;P2=(adr/256)|0x80;
  P0=d;
  TI=0;
  SBUF='s';
  prog=0;
  _nop_();_nop_();_nop_();
  prog=1;
  adr=getadr();
  d=getdata();
  while(!rdy);}
  init_pro();
  return 'f';}

unsigned char lock(unsigned char level)
{
unsigned int i;
vpp=0;
if(level==1) {p26=1;p27=1;p36=1;p37=1;}
if(level==2) {p26=1;p27=1;p36=0;p37=0;}
if(level==3) {p26=1;p27=0;p36=1;p37=0;}
for(i=0;i<4000;i++) _nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
while(!rdy);
init_pro();
return 'o';}

void main()
{
unsigned char data c;
unsigned int data adr,l,dx;
init_pro();
init_serial();
while(1)
{
  init_pro();
  scanf("%c",&c);
  switch(c)
  {
   case 'c' : printf("%c",'o');
              break;
   case 'd' : scanf("%x",&adr);
              printf("%x",detchip(adr));
              break;
   case 't' : scanf("%u",&dx);
              printf("%u",test(dx));
              break;
   case 'r' : read();
              break;
   case 'e' : scanf("%u,%u",&adr,&dx);
              printf("%c",erase(adr,dx));
              break;
   case 'w' : printf("%c",write());
              break;
   case 'l' : scanf("%u",&l);
              printf("%c",lock(l));
              break;
   case 'h' : printf("**********Er6y Programmer Help Window***********\n");
              break;
    default : break;}


  }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:51357 发表于 2013-6-29 12:44 | 只看该作者
游客 110.205.64.x 发表于 2013-6-28 22:44
很明显 for(adr=0;adr {  是错的啊 都没有括号收

先感谢一下  请你帮忙改正一下
回复

使用道具 举报

板凳
ID:51381 发表于 2013-6-29 18:19 | 只看该作者
for 循环不对 那里用括号  扩一下!
回复

使用道具 举报

地板
ID:7485 发表于 2013-7-2 07:19 | 只看该作者
本帖最后由 ahshmj 于 2013-7-2 07:31 编辑

for(adr=0;adr****;adr****** )//红字部分前面一个adr是终止循环的条件,后面一个adr是步长,你自己根据需要设置。这是一般形式。
{
  P1=adr%256;P2=adr/256;
  p26=0;
  p27=0;
  p36=1;
  p37=1;
  vpp=1;
  prog=1;
  _nop_();_nop_();_nop_();_nop_();_nop_();  /*delay 10 us*/
  _nop_();_nop_();_nop_();_nop_();_nop_();  
  if(P0!=0xff) counter++;}
  init_pro();
  return counter;}

还是先从基础学起吧。
帮助,是对有一定基础,遇到问题的情况。也是点到即可。像上面告诉你少了一个“括号”,你仍然不能理解,即便像我这样给你改过来,对你有何用呢??
回复

使用道具 举报

5#
ID:51357 发表于 2013-7-3 18:48 | 只看该作者
ahshmj 发表于 2013-7-2 07:19
for(adr=0;adr****;adr****** )//红字部分前面一个adr是终止循环的条件,后面一个adr是步长,你自己根据需 ...

十分感谢
回复

使用道具 举报

6#
ID:153199 发表于 2017-1-7 14:00 | 只看该作者
for(adr=0;adr {  是错的
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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