[STC单片机] STC单片机 字节高地位问题

[复制链接]
2404|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的是大端模式,低字节存在内存低地址,高字节存在内存高地址。
coody 发表于 2014-4-4 11:41 | 显示全部楼层
明显大小端模式问题,STC无关
four_zhg 发表于 2014-4-4 13:16 | 显示全部楼层
本帖最后由 four_zhg 于 2014-4-4 13:19 编辑

STC有时会有这个现象,要不你试试在pdata或xdata下看看,这个值会不会正常。
 楼主| 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;       
                }
        }
//================================


高手们帮忙分析下。。。
qq986433936 发表于 2014-4-4 17:25 | 显示全部楼层
using 1,我曾经......
去掉试试
天风立马 发表于 2014-4-4 17:42 | 显示全部楼层
没看后面的代码,粗略算了一下。应该是这样的:不是说你换成unsigned char就对了。是结果对了,过程不对。你实际进入中断0x0500次,换成unsigned char结果对了是因为溢出了。(0x0500=1280;1280%255=5,所以unsigned char 显示的是 0x0005。(255是unsigned char的上限。)我想你看到这应该去分析你的定时器、定时器开关及调用了。
lkl0305 发表于 2014-4-4 21:10 | 显示全部楼层
楼主再仔细分析调试调试吧。
dj狂人 发表于 2014-4-5 16:23 | 显示全部楼层
nickyamw 发表于 2014-4-4 11:16
我在KEIL里仿真了一下,进入5次中断,T0_Time_S显示的是0x0005

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

顶一个
 楼主| KINSN33 发表于 2014-4-8 08:59 | 显示全部楼层
qq986433936 发表于 2014-4-4 17:25
using 1,我曾经......
去掉试试

不行啊。:(
 楼主| KINSN33 发表于 2014-4-8 09:03 | 显示全部楼层
天风立马 发表于 2014-4-4 17:42
没看后面的代码,粗略算了一下。应该是这样的:不是说你换成unsigned char就对了。是结果对了,过程不对。 ...

你好 天风立马
中断函数应该是正确的,我用示波器测试过,此定时周期为5ms,间隔5ms进入中断一次。波形正常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部