打印
[STC单片机]

STC单片机 字节高地位问题

[复制链接]
1902|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
KINSN33|  楼主 | 2014-4-4 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 KINSN33 于 2014-4-4 09:59 编辑

各位大神,小弟碰到个奇怪的现象:
unsigned int T0_Time_S;
void Time0_isr() interrupt 1 using 1
{
        TR0 = 0;
        TH0 = 0xEE;
        TL0 = 0x05;
        T0_Time_S++;
        TR0 = 1;
}
假如中断进入了5次,那T0_Time_S应该等于0x0005,可实际等于0x0500。
若及将T0_Time_S改为unsigned char型,就正常了,请问这是为什么呢?

相关帖子

沙发
wangch_sh| | 2014-4-4 10:52 | 只看该作者
感觉不可能。贴出完整代码。

使用特权

评论回复
板凳
nickyamw| | 2014-4-4 10:55 | 只看该作者
wangch_sh 发表于 2014-4-4 10:52
感觉不可能。贴出完整代码。

0x0500,我感觉这是楼主在引用T0_Time_S的时候高低位字节错了

使用特权

评论回复
地板
nickyamw| | 2014-4-4 11:16 | 只看该作者
本帖最后由 nickyamw 于 2014-4-4 11:20 编辑

我在KEIL里仿真了一下,进入5次中断,T0_Time_S显示的是0x0005

是不是楼主你用T0_Time_S的时候用错了,没注意高低位?KEIL的是大端模式,低字节存在内存低地址,高字节存在内存高地址。

使用特权

评论回复
5
coody| | 2014-4-4 11:41 | 只看该作者
明显大小端模式问题,STC无关

使用特权

评论回复
6
four_zhg| | 2014-4-4 13:16 | 只看该作者
本帖最后由 four_zhg 于 2014-4-4 13:19 编辑

STC有时会有这个现象,要不你试试在pdata或xdata下看看,这个值会不会正常。

使用特权

评论回复
7
KINSN33|  楼主 | 2014-4-4 14:27 | 只看该作者

KEIL仿真没用的,我也试过。
unsigned int xdata T0_Time_S;这个也试过,一样。
我是想做个延时,若T0_Time_S为unsigned char型就正常了,可实际计数超过255,所有采用int型。

中断部分
unsigned int T0_Time_S;
void Time0_isr() interrupt 1 using 1
{
        TR0 = 0;
        TH0 = 0xEE;
        TL0 = 0x05;
        T0_Time_S++;
        TR0 = 1;
}
//================================
unsigned int bit_swp(unsigned int n)
{
        unsigned int tmp;
        tmp = n>>8;
        tmp |= (n<<8);       
        return tmp;
}
//================================


处理部分
        T0_Time_S=0;
        while(1)
        {
                if(bit_swp(T0_Time_S)>=1200)        //为了解决此问题,做了个高地位调换函数
//                if(T0_Time_S>=1200)
                {

                        break;       
                }
        }
//================================


高手们帮忙分析下。。。

使用特权

评论回复
8
qq986433936| | 2014-4-4 17:25 | 只看该作者
using 1,我曾经......
去掉试试

使用特权

评论回复
9
天风立马| | 2014-4-4 17:42 | 只看该作者
没看后面的代码,粗略算了一下。应该是这样的:不是说你换成unsigned char就对了。是结果对了,过程不对。你实际进入中断0x0500次,换成unsigned char结果对了是因为溢出了。(0x0500=1280;1280%255=5,所以unsigned char 显示的是 0x0005。(255是unsigned char的上限。)我想你看到这应该去分析你的定时器、定时器开关及调用了。

使用特权

评论回复
10
lkl0305| | 2014-4-4 21:10 | 只看该作者
楼主再仔细分析调试调试吧。

使用特权

评论回复
11
dj狂人| | 2014-4-5 16:23 | 只看该作者
nickyamw 发表于 2014-4-4 11:16
我在KEIL里仿真了一下,进入5次中断,T0_Time_S显示的是0x0005

是不是楼主你用T0_Time_S的时候用错了,没 ...

顶一个

使用特权

评论回复
12
KINSN33|  楼主 | 2014-4-8 08:59 | 只看该作者
qq986433936 发表于 2014-4-4 17:25
using 1,我曾经......
去掉试试

不行啊。:(

使用特权

评论回复
13
KINSN33|  楼主 | 2014-4-8 09:03 | 只看该作者
天风立马 发表于 2014-4-4 17:42
没看后面的代码,粗略算了一下。应该是这样的:不是说你换成unsigned char就对了。是结果对了,过程不对。 ...

你好 天风立马
中断函数应该是正确的,我用示波器测试过,此定时周期为5ms,间隔5ms进入中断一次。波形正常。

使用特权

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

本版积分规则

3

主题

13

帖子

0

粉丝