打印
[51单片机]

初学者请教一个程序报错的问题

[复制链接]
1721|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fasm|  楼主 | 2015-12-20 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST, code, rc, se, ni
本帖最后由 fasm 于 2015-12-20 16:05 编辑

#include <reg52.h>
#define uchar unsigned char
signed char Up_Flag,Uc_Flag;
uchar code Adr_Str1[]=":ADR01;";
uchar code Up_Str1[]=":VOL10.00;";
uchar code Up_Str2[]=":VOL13.50;";
uchar code Up_Str3[]=":VOL16.00;";
uchar code Out_Str[]=":OUT1;";
uchar code Adr_Str2[]=":ADR02;";
uchar code Uc1_Str1[]=":VOL02.00;";
uchar code Uc1_Str2[]=":VOL03.00;";
uchar code Uc1_Str3[]=":VOL04.00;";
uchar code Uc1_Str4[]=":VOL05.00;";
uchar code Uc1_Str5[]=":VOL06.00;";
uchar code Uc1_Str6[]=":VOL07.00;";
uchar code Uc1_Str7[]=":VOL08.00;";
uchar code Uc2_Str1[]=":VOL02.70;";
uchar code Uc2_Str2[]=":VOL04.05;";
uchar code Uc2_Str3[]=":VOL05.40;";
uchar code Uc2_Str4[]=":VOL06.75;";
uchar code Uc2_Str5[]=":VOL08.10;";
uchar code Uc2_Str6[]=":VOL09.45;";
uchar code Uc2_Str7[]=":VOL10.80;";
uchar code Uc3_Str1[]=":VOL03.20;";
uchar code Uc3_Str2[]=":VOL04.80;";
uchar code Uc3_Str3[]=":VOL06.40;";
uchar code Uc3_Str4[]=":VOL08.00;";
uchar code Uc3_Str5[]=":VOL09.60;";
uchar code Uc3_Str6[]=":VOL11.20;";
uchar code Uc3_Str7[]=":VOL12.80;";
sbit UpFirst=P1^4;
sbit UpPrior=P1^5;
sbit UpNext=P1^6;
sbit UpLast=P1^7;
sbit UcFirst=P3^2;
sbit UcPrior=P3^3;
sbit UcNext=P3^4;
sbit UcLast=P3^5;

extern void delay(uchar i);
void Uc_Up_Init();
void SerialPort_Init();
void System_Init();
void Uc_Send();
void Up_Send();

void Uc_Up_Init(void)
{
UpFirst=1;
UpPrior=1;
UpNext=1;
UpLast=1;
UcFirst=1;
UcPrior=1;
UcNext=1;
UcLast=1;
}

void SerialPort_Init(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x40;
PCON=0;
TR1=1;
}

void System_Init(void)
{
uchar *VOL_Init[6]={Adr_Str1,Up_Str2,Out_Str,Adr_Str2,Uc2_Str1,Out_Str};
uchar i=6;
uchar **p;
p=VOL_Init;
while(i)
{
while(**p!='\0')
{
SBUF=**p;
while(!TI)
{
;
}
TI=0;
(*p)++;
}
delay(25);
p++;
i--;
}
Up_Flag=2;
Uc_Flag=1;
}

void Uc_Send(void)
{
signed char i=Uc_Flag;
uchar j=3;
uchar **p;
if(Up_Flag==1)
{
uchar *Uc_Str[7]={Uc1_Str1,Uc1_Str2,Uc1_Str3,Uc1_Str4,Uc1_Str5,Uc1_Str6,Uc1_Str7};
}
else if(Up_Flag==2)
{
uchar *Uc_Str[7]={Uc2_Str1,Uc2_Str2,Uc2_Str3,Uc2_Str4,Uc2_Str5,Uc2_Str6,Uc2_Str7};
}
else if(Up_Flag==3)
{
uchar *Uc_Str[7]={Uc3_Str1,Uc3_Str2,Uc3_Str3,Uc3_Str4,Uc3_Str5,Uc3_Str6,Uc3_Str7};
}
uchar *VOL_Uc[3]={Adr_Str2,Uc_Str[i-1],Out_Str};
p=VOL_Uc;
while(j)
{
while(**p!='\0')
{
SBUF=**p;
while(!TI)
{
;
}
TI=0;
(*p)++;
}
delay(25);
p++;
j--;
}
}

void Up_Send(void)
{
signed char i=Up_Flag;
uchar j=3;
uchar **p;
uchar *Up_Str[3]={Up_Str1,Up_Str2,Up_Str3};
uchar *VOL_Up[3]={Adr_Str1,Up_Str[i-1],Out_Str};
p=VOL_Up;
while(j)
{
while(**p!='\0')
{
SBUF=**p;
while(!TI)
{
;
}
TI=0;
(*p)++;
}
delay(25);
p++;
j--;
}
Uc_Send();
}

void main(void)
{
Uc_Up_Init();
SerialPort_Init();
System_Init();
while(1)
{
if(UcNext==0)
{
delay(10);
if(UcNext==0)
{
Uc_Flag++;
if(Uc_Flag>=7)
Uc_Flag=7;
Uc_Send();
}
}
else if(UcPrior==0)
{
delay(10);
if(UcPrior==0)
{
Uc_Flag--;
if(Uc_Flag<=1)
Uc_Flag=1;
Uc_Send();
}
}
else if(UcLast==0)
{
delay(10);
if(UcLast==0)
{
Uc_Flag=7;
Uc_Send();
}
}
else if(UcFirst==0)
{
delay(10);
if(UcFirst==0)
{
Uc_Flag=1;
Uc_Send();
}
}
else if(UpNext==0)
{
delay(10);
if(UpNext==0)
{
Up_Flag++;
if(Uc_Flag>=3)
Up_Flag=3;
Up_Send();
}
}
else if(UpPrior==0)
{
delay(10);
if(UpPrior==0)
{
Up_Flag--;
if(Up_Flag<=1)
Up_Flag=1;
Up_Send();
}
}
else if(UpLast==0)
{
delay(10);
if(UpLast==0)
{
Up_Flag=3;
Up_Send();
}
}
else if(UpFirst==0)
{
delay(10);
if(UpFirst==0)
{
Up_Flag=1;
Up_Send();
}
}
}
}

keil C U3报错如下
compiling Test1.c...
TEST1.C(112): error C141: syntax error near 'unsigned'
TEST1.C(112): error C202: 'VOL_Uc': undefined identifier
TEST1.C(112): error C141: syntax error near '{'
TEST1.C(112): error C141: syntax error near '}'
Test1.c - 4 Error(s), 0 Warning(s).
找不出来错误啊!还是不可以这样做?

Test1.rar (10.79 KB)

相关帖子

沙发
JY-DX-JY| | 2015-12-20 14:45 | 只看该作者
文件不对。

使用特权

评论回复
板凳
fasm|  楼主 | 2015-12-20 16:02 | 只看该作者
我把文件都考上来吧!

Test1.rar

10.79 KB

使用特权

评论回复
地板
JY-DX-JY| | 2015-12-20 16:12 | 只看该作者
uchar *VOL_Uc[3]={Adr_Str2,Uc_Str[i-1],Out_Str};
这一句定义有问题,好好看看

使用特权

评论回复
5
JY-DX-JY| | 2015-12-20 16:13 | 只看该作者
Uc_Str[i-1]这个元素不对。

使用特权

评论回复
6
玄德| | 2015-12-20 21:38 | 只看该作者

语法问题,很容易找。

使用特权

评论回复
7
hyl1615| | 2015-12-21 09:19 | 只看该作者
建议楼主自己另建一个过程,一点点添加功能,初学者最好不要一步到位

使用特权

评论回复
8
strong161| | 2015-12-21 10:50 | 只看该作者
Uc_Str[i-1] 这个放在定义里是不对的!

使用特权

评论回复
9
qq4988| | 2015-12-21 16:48 | 只看该作者
Uc_Str[i-1] 这个不能这么定义

使用特权

评论回复
10
fasm|  楼主 | 2015-12-21 18:15 | 只看该作者
应该怎么改啊,我有点迷糊了,总觉得没错啊,指针数组的元素不应该是指针么?

使用特权

评论回复
11
JY-DX-JY| | 2015-12-21 18:58 | 只看该作者
uchar *VOL_Uc[3]={Adr_Str2,Uc_Str[i-1],Out_Str};
第二个元素到底是干嘛的?i是不确定的值,是不行的。

使用特权

评论回复
12
fasm|  楼主 | 2015-12-21 19:30 | 只看该作者
第一句代码我已经赋值了啊,signed char i=Uc_Flag,且每次调用之前Uc_Flag我都赋值的啊

使用特权

评论回复
13
fasm|  楼主 | 2015-12-22 08:41 | 只看该作者
JY-DX-JY 发表于 2015-12-21 18:58
uchar *VOL_Uc[3]={Adr_Str2,Uc_Str,Out_Str};
第二个元素到底是干嘛的?i是不确定的值,是不行的。 ...

第一句代码我已经赋值了啊,signed char i=Uc_Flag,且每次调用之前Uc_Flag我都赋值的啊

使用特权

评论回复
14
JY-DX-JY| | 2015-12-22 08:58 | 只看该作者
fasm 发表于 2015-12-22 08:41
第一句代码我已经赋值了啊,signed char i=Uc_Flag,且每次调用之前Uc_Flag我都赋值的啊 ...

运行时可以这样写,定义则不行。你好好看看C语言书吧

使用特权

评论回复
15
fasm|  楼主 | 2015-12-22 09:52 | 只看该作者
JY-DX-JY 发表于 2015-12-22 08:58
运行时可以这样写,定义则不行。你好好看看C语言书吧

Uc_Flag是全局变量啊,不可以这么用么?

使用特权

评论回复
16
JY-DX-JY| | 2015-12-22 10:03 | 只看该作者
uchar *VOL_Uc[3]={Adr_Str2,Uc_Str[i-1],Out_Str};
我是说这个,第二个元素。你为什么要这样定义?说说你的意图。

使用特权

评论回复
17
JY-DX-JY| | 2015-12-22 10:04 | 只看该作者
本帖最后由 JY-DX-JY 于 2015-12-22 10:06 编辑

说的详细点

使用特权

评论回复
18
fasm|  楼主 | 2015-12-22 10:25 | 只看该作者

是这样的。
目的:
与两台可编程电源通信,第一台名为Up,地址为01,第二台为Uc,地址为02,两台可编程电源之间通过以太口相连,单片机与第一台可编程电源通过RS232-RJ45相连。Up我需要输出3个电压,10V,13.5V,16V;每个Up对应的Uc有7个,分为3组;在单片机上有8个独立按键,4个按键对应Up,4个按键对应Uc.UpFirst按一下表示Up为10V,UpNext按一下表示从当前电压向前走一个电压,如果当前在10V,则为13.5V;UpPrior按一下表示从当前电压向后走一个电压,如果当前为16V,则为13.5V;Uc的类似。如果想要可编程电源输出你想要得电压,发送字符串格式如下:":ADR01;" 等待起码15ms;":VOL13.50;"等待起码15ms;":OUT1;"等待起码15ms

使用特权

评论回复
19
JY-DX-JY| | 2015-12-22 10:30 | 只看该作者

uchar *VOL_Uc[3]={Adr_Str2,Uc_Str[i-1],Out_Str};
我还是没弄明白你Uc_Str[i-1]这个是什么意思?
这个数组是什么意思?

使用特权

评论回复
20
fasm|  楼主 | 2015-12-22 10:53 | 只看该作者
if(Up_Flag==1) //将Up对应的7个Uc字符串存放到Uc_Str[7]中
{
uchar *Uc_Str[7]={Uc1_Str1,Uc1_Str2,Uc1_Str3,Uc1_Str4,Uc1_Str5,Uc1_Str6,Uc1_Str7};
}
else if(Up_Flag==2)
{
uchar *Uc_Str[7]={Uc2_Str1,Uc2_Str2,Uc2_Str3,Uc2_Str4,Uc2_Str5,Uc2_Str6,Uc2_Str7};
}
else if(Up_Flag==3)
{
uchar *Uc_Str[7]={Uc3_Str1,Uc3_Str2,Uc3_Str3,Uc3_Str4,Uc3_Str5,Uc3_Str6,Uc3_Str7};
}
//下面我想把Uc_Flag对应的那个UC字符串及地址和输出要求字符串放到一个指针数组中,方便从串口输出
//因为如果想要可编程电源输出你想要得电压,发送字符串格式如下:":ADR01;" 等待起码15ms;":VOL13.50;"等待//起码15ms;":OUT1;"等待起码15ms
uchar *VOL_Uc[3]={Adr_Str2,Uc_Str[i-1],Out_Str};

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

27

帖子

1

粉丝