打印

请问这个C语言有什么区别??

[复制链接]
1818|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxser09|  楼主 | 2010-1-28 23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
HWM| | 2010-1-28 23:40 | 只看该作者
“功能”没有区别,但“形式”有区别。

使用特权

评论回复
板凳
zxser09|  楼主 | 2010-1-28 23:47 | 只看该作者
但是我在板子上玩得时候,就出现了显示不一样.
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
uchar t;
void init();
void main()
{
        init();
        while(1)
        {
               
        }
}
void init()
{
        P0=0;
        P2=0;
        TMOD=1;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void time0() interrupt 1
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        t++;
        if(t==10)
        {
               
                if(key1==0)
                {
                        P0=0x3f;       
                }
                if(key2==0)
                {
                        P0=0x06;       
                }
                if(key3==0)
                {
                        P0=0x5b;       
                }
                if(key4==0)
                {
                        P0=0x4f;       
                }
               
                t=0;                               
        }               
}

第二个程序,如下:


#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
uchar t;
void init();
void main()
{
        init();
        while(1)
        {
               
        }
}
void init()
{
        P0=0;
        P2=0;
        TMOD=1;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void time0() interrupt 1
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        t++;
        if(t==10)
        {
               
                if(P3^0==0)
                {
                        P0=0x3f;       
                }
                if(P3^1==0)
                {
                        P0=0x06;       
                }
                if(P3^2==0)
                {
                        P0=0x5b;       
                }
                if(P3^3==0)
                {
                        P0=0x4f;       
                }

第一个程序时我想要的结果,第二个程序我程序一烧进去就显示3 ,按键也没反应。
               
                t=0;                               
        }               
}

使用特权

评论回复
地板
杨工| | 2010-1-29 00:27 | 只看该作者
sbit key1=P3^0; 中的^是keil C对于C语言的扩充,表示P3的b0位。
标准C里^表示按位异或。P3^0结果还是P3。
所以if(P3^0==0)是错的。这一句相当于if(P3==0)
你可以自己看看反汇编的结果

使用特权

评论回复
5
xlsbz| | 2010-1-29 09:56 | 只看该作者
楼上说的对!

^这个是异或。

读锁存器 读引脚

使用特权

评论回复
6
lanmp| | 2010-1-29 10:25 | 只看该作者
Volatile的问题吧

使用特权

评论回复
7
zjswuyunbo| | 2010-1-29 11:08 | 只看该作者
区别太大了。。。。。。。。

使用特权

评论回复
8
wshlxa| | 2010-1-29 12:24 | 只看该作者
mark
7# zjswuyunbo

使用特权

评论回复
9
maomao2126| | 2010-1-29 12:39 | 只看该作者
跟编译器有关吧,如果是标准C的话  4楼 正解

使用特权

评论回复
10
杨工| | 2010-1-29 16:12 | 只看该作者
4楼也还有问题。
刚才在Keil里试了一下,把P3^0换成P3^1,或者P3^3结果不变。
if(P3^1==0),反汇编的结果还是相当于if(P3==0)
难道是keil的bug?还是我的理解有问题?

使用特权

评论回复
11
M.gtd| | 2010-1-29 16:26 | 只看该作者
感觉不应该出问题啊,你把P3=0xff;放到init()中再试试

使用特权

评论回复
12
sophya| | 2010-1-29 17:06 | 只看该作者
用P3_0或者key1

使用特权

评论回复
13
李冬发| | 2010-1-29 17:59 | 只看该作者
跟编译器有关吧,如果是标准C的话  4楼 正解
maomao2126 发表于 2010-1-29 12:39

要是标准C的话,这句编译通不过的。
sbit key1=P3^0;

使用特权

评论回复
14
ninibaba| | 2010-1-29 19:37 | 只看该作者
4楼正解
一般是先定义后使用
因此你定义过才生效
如果没有定义
则使用时
是按照4楼所说的进行

使用特权

评论回复
15
nlgz| | 2010-1-29 19:55 | 只看该作者
没啥 编译器的问题 跟踪一下看看就知道了

使用特权

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

本版积分规则

81

主题

208

帖子

0

粉丝