打印

SH79F166F 查表结果错误,紧急求助!!!

[复制链接]
2004|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kevin_xie|  楼主 | 2010-1-15 02:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个案子,是用中颖的SH79F166F,但发现总是那么的不顺利,一开始发现进不了中断,后来发现只要把规格书中TMR2和TMR3的中断号改成5和11就正常了,此问题不知道是本人程序的问题还是规格书有错误,暂不深究.希望大家在使用这个IC时也特别留意.

因为后天要交案了,现在程序卡在了另外一个地方,一个很普通的查表程序.无论我怎么查表,都没办法查到正确的值(结果都为0).但此程序单独运行是可以查到的,我试着将另外的一些程序删除,发现有时可以查到,有时不能,经过一些删除分析,我得出一个结论,查表的错对与文件没有关系,而与查表调用位置和表格位置有关系,比如
表格起始位置为002EH 时,如查表程序在0194H或者02FAH时就可以查到想要的值,但是如果查表程序在056AH时就查出为0,很奇怪,搞了2天了,现在头有点大.

请大虾们帮帮我,急急急!!!

相关帖子

沙发
ejack| | 2010-1-15 07:32 | 只看该作者
没用过这片子,胡说一句:这片子有需要翻页之类的操作吗?

使用特权

评论回复
板凳
kevin_xie|  楼主 | 2010-1-15 11:35 | 只看该作者
我在规格书上是没有发现需要翻页之类的操作,所有ROM都可以寻址,唉,难道就没有人用过这个IC吗,难道中颖也无法解决我遇到的问题吗?

使用特权

评论回复
地板
kevin_xie|  楼主 | 2010-1-15 12:25 | 只看该作者
补充说明一下,我是用C51编程的.另外我试过即使把表格定义为XDATA也无法查到,请大虾指点一下.

使用特权

评论回复
5
一级菜鸟| | 2010-1-15 12:28 | 只看该作者
代码呢?表格定义为CODE

使用特权

评论回复
6
kevin_xie|  楼主 | 2010-1-15 12:39 | 只看该作者
#include        ".\SH79F166.h"
#include        ".\define.h"
#include        ".\global.h"

Byte code   EWAB[] = {100,100,100,100,100,100,100,100};
Byte code   EHTAB[] = {20,100,20,20,20,20,20,100};
Byte code   ELTAB[] = {20,20,20,20,20,20,20,20};//Leagkage
Byte code   ELiTAB[] = {20,20,20,100,20,20,20,100};

/****************************************************************************
                        void        BUZProcess(void)
功能说明:        BUZ
其他说明:       
输入:                无
输出:                无
*****************************************************************************/
void        BUZProcess(void)
{
        Byte BuzTemp;
        if(DeviceMode&POWERFLAG)
                {
                        if(ErrorFlag)
                                {
                                switch(ErrorFlag)
                                {
                                        case 1:
                                                BuzTemp=EWAB[BuzStage];
                                                break;
                                        case 2:
                                                BuzTemp=EHTAB[BuzStage];
                                                break;
                                        case 4:
                                                BuzTemp=ELTAB[BuzStage];
                                                break;       
                                        case 8:
                                                BuzTemp=ELiTAB[BuzStage];
                                        default:
                                                break;
                                }       
                                if (BuzTime>=BuzTemp)
                                                {
                                                        BuzTime=0;
                                                        if(BuzStage++>=7)        BuzStage=0;
                                                        if(BuzStage&0x01)
                                                        {         BUZCON&=0xFE;
                                                                P2_5=0;        }
                                                        else
                                                        {        BUZCON|=0x01;
                                                                P2_5=1;}
                                        }
                }
        }
}

使用特权

评论回复
7
kevin_xie|  楼主 | 2010-1-15 12:40 | 只看该作者
Byte 在另外一个程序中有定义为 unsigned char

使用特权

评论回复
8
一级菜鸟| | 2010-1-15 13:02 | 只看该作者
你怎么确认没取到值的?软仿真?硬仿真?下载脱机?

使用特权

评论回复
9
kevin_xie|  楼主 | 2010-1-15 13:09 | 只看该作者
硬仿真,KEIL C51 断点查寄存器和LCD显示均证明没有取到值

使用特权

评论回复
10
tjx727| | 2010-1-15 17:18 | 只看该作者
应该能够取到值的,片子肯定没有问题,我79F168查表用得好好的,最多的时候我查过一个100多个字节的都没有问题,仔细检查以下程序,看哪儿出错了.BuzStage这个值在查表取不到的时候是不是确定正确的啊?

使用特权

评论回复
11
kevin_xie|  楼主 | 2010-1-15 19:52 | 只看该作者
所有的问题,能想的我都想了也都试了.一个很普通的查表程序.无论我怎么查表,都没办法查到正确的值(结果都为0).但此程序单独运行是可以查到的,我试着将另外的一些程序删除,发现有时可以查到,有时不能,经过一些删除分析,我得出一个结论,查表的错对与文件没有关系,而与查表调用位置和表格位置有关系,比如
表格起始位置为002EH 时,如调用程序在0194H或者02FAH时就可以查到想要的值,但是如果查表程序在056AH时就查出为0,很奇怪,搞了2天了,现在头有点大.

使用特权

评论回复
12
一级菜鸟| | 2010-1-16 13:03 | 只看该作者
反汇编看下就很清楚问题在哪里了

使用特权

评论回复
13
kevin_xie|  楼主 | 2010-1-16 21:47 | 只看该作者
现在最主要的问题是KEIL里面,好像是不支持中颖IC反汇编的,在反汇编窗口是没有任何东西的,唯有一个个的NOP.或者有没有人能告诉我要怎么才能看到反汇编.

使用特权

评论回复
14
kevin_xie|  楼主 | 2010-1-19 02:06 | 只看该作者
终于搞定了,重新装KEIL,把原来的项目删除重建就好了,谢谢大家的帮忙.

使用特权

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

本版积分规则

1

主题

12

帖子

1

粉丝