打印

求助 c 语言

[复制链接]
1945|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蔚蓝柳叶|  楼主 | 2014-3-7 15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 蔚蓝柳叶 于 2014-3-7 15:31 编辑

本人刚学c语言,编了个流水灯(一个一个轮流地亮),编译生成hex文件时没有出错,下载到单片机时无现象。在keil 点 start debug 时出现错误--syntax error in peripheral dialog parameter line 。请问这句话是什么意思?看看下面程序错哪了?请各位大神帮助,无不胜感激!!
#include <reg52.h>
void delay02s ()
{  int i,j,k;
      for(i=20;i>0;i--)
          for(j=20;j>0;j--)
          for(k=248;k>0;k--);
}
void main ()
{ int a,b,i,P1=0xfe;
    while (1)
        {
         for (i=7;i>0;i--);
          {
                  a=P1<<(8-i);
                b=P1>>i;
                P1=a|b;
                delay02s ();
          }
                  }}
                                                               

相关帖子

沙发
menfiss| | 2014-3-7 15:37 | 只看该作者
P1已经预定义为sfr,又定义为int.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
蔚蓝柳叶 + 1 赞一个!
板凳
天风立马| | 2014-3-7 15:41 | 只看该作者
main函数的第一行i后面的逗号是你笔误了吧。改过来看看行不行。

使用特权

评论回复
地板
嵌入式云终端| | 2014-3-7 15:44 | 只看该作者
你是什么单片机,最有一句这个单片机编译器识别么,有的不支持。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
蔚蓝柳叶 + 1 赞一个!
5
蔚蓝柳叶|  楼主 | 2014-3-7 16:12 | 只看该作者
嵌入式云终端 发表于 2014-3-7 15:44
你是什么单片机,最有一句这个单片机编译器识别么,有的不支持。

stc 89C51RC 可以编译生成hex文件。编译是没有问题的,我想知道的是它的内容该怎么改

使用特权

评论回复
6
蔚蓝柳叶|  楼主 | 2014-3-7 16:12 | 只看该作者
dwh000 发表于 2014-3-7 16:03
编译没报警...

没有

使用特权

评论回复
7
蔚蓝柳叶|  楼主 | 2014-3-7 16:14 | 只看该作者
天风立马 发表于 2014-3-7 15:41
main函数的第一行i后面的逗号是你笔误了吧。改过来看看行不行。

是笔误。改了编译下载到单片机还是无现象

使用特权

评论回复
8
liudanwei| | 2014-3-7 16:42 | 只看该作者
端口P1那定义的不对吧,

使用特权

评论回复
9
shangwei4444| | 2014-3-7 17:03 | 只看该作者
2# 已解释:
P1的类型如果已经定义好了,直接赋值就行;
如果是自己定义的,要把P1的值给到IO。

使用特权

评论回复
10
天风立马| | 2014-3-7 17:10 | 只看该作者
1、你检查一下头文件里p1的寄存器的地址对不对。没问题看下一条
2、直接对p1赋值看灯亮灭情况,如果灯的亮灭与赋值对应,把延时加长。试玩不行把现象说出来:程序编译情况、灯亮灭情况。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
蔚蓝柳叶 + 1 赞一个!
11
蔚蓝柳叶|  楼主 | 2014-3-7 19:01 | 只看该作者
本帖最后由 蔚蓝柳叶 于 2014-3-7 19:02 编辑
天风立马 发表于 2014-3-7 17:10
1、你检查一下头文件里p1的寄存器的地址对不对。没问题看下一条
2、直接对p1赋值看灯亮灭情况,如果灯的亮 ...

之前的程序是会跑飞的,改成以下就可以了。我想问一下,为啥要定义一个变量(temp)为中间变量,a=temp<<(8-i); b=temp>>i ;  P1=a|b;??为啥temp=0xfe;P1=temp;对调,流水灯就全亮,然后一个一个地亮??
#include <reg52.h>
void delay02s ()
{  int i,j,k;
      for(i=20;i>0;i--)
          for(j=20;j>0;j--)
          for(k=248;k>0;k--);
}
void main ()
{    unsigned char a,b,i,temp;
    while (1)
        { temp=0xfe;
             P1=temp;
             delay02s();
      for (i=7;i>0;i--)
            {
               a=temp<<(8-i);
               b=temp>>i;
               P1=a|b;
               delay02s ();
            }
                  }}

使用特权

评论回复
12
four_zhg| | 2014-3-7 21:38 | 只看该作者
先确认硬件,是否完好,然后先试一个LED灯的亮灭,再试多个灯的亮灭,最后再试循环

使用特权

评论回复
13
福州观沧海| | 2014-3-7 22:05 | 只看该作者
P1是特殊功能寄存器,被你重复定义了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
蔚蓝柳叶 + 1 赞一个!
14
天风立马| | 2014-3-9 22:27 | 只看该作者
蔚蓝柳叶 发表于 2014-3-7 19:01
之前的程序是会跑飞的,改成以下就可以了。我想问一下,为啥要定义一个变量(temp)为中间变量,a=tempi ; ...

不太清楚你遇到问题的现象,也就没法理解你的描述,当然此程序的temp肯定是可以省略的。问题这样不算解决,要知其然还要知其所以然。吃透一个比你再继续两个程序掌握的东西要多很多。

使用特权

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

本版积分规则

10

主题

81

帖子

1

粉丝