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

[复制链接]
3041|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也无法查到,请大虾指点一下.
一级菜鸟 发表于 2010-1-15 12:28 | 显示全部楼层
代码呢?表格定义为CODE
 楼主| 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;}
                                        }
                }
        }
}
 楼主| kevin_xie 发表于 2010-1-15 12:40 | 显示全部楼层
Byte 在另外一个程序中有定义为 unsigned char
一级菜鸟 发表于 2010-1-15 13:02 | 显示全部楼层
你怎么确认没取到值的?软仿真?硬仿真?下载脱机?
 楼主| kevin_xie 发表于 2010-1-15 13:09 | 显示全部楼层
硬仿真,KEIL C51 断点查寄存器和LCD显示均证明没有取到值
tjx727 发表于 2010-1-15 17:18 | 显示全部楼层
应该能够取到值的,片子肯定没有问题,我79F168查表用得好好的,最多的时候我查过一个100多个字节的都没有问题,仔细检查以下程序,看哪儿出错了.BuzStage这个值在查表取不到的时候是不是确定正确的啊?
 楼主| kevin_xie 发表于 2010-1-15 19:52 | 显示全部楼层
所有的问题,能想的我都想了也都试了.一个很普通的查表程序.无论我怎么查表,都没办法查到正确的值(结果都为0).但此程序单独运行是可以查到的,我试着将另外的一些程序删除,发现有时可以查到,有时不能,经过一些删除分析,我得出一个结论,查表的错对与文件没有关系,而与查表调用位置和表格位置有关系,比如
表格起始位置为002EH 时,如调用程序在0194H或者02FAH时就可以查到想要的值,但是如果查表程序在056AH时就查出为0,很奇怪,搞了2天了,现在头有点大.
一级菜鸟 发表于 2010-1-16 13:03 | 显示全部楼层
反汇编看下就很清楚问题在哪里了
 楼主| kevin_xie 发表于 2010-1-16 21:47 | 显示全部楼层
现在最主要的问题是KEIL里面,好像是不支持中颖IC反汇编的,在反汇编窗口是没有任何东西的,唯有一个个的NOP.或者有没有人能告诉我要怎么才能看到反汇编.
 楼主| kevin_xie 发表于 2010-1-19 02:06 | 显示全部楼层
终于搞定了,重新装KEIL,把原来的项目删除重建就好了,谢谢大家的帮忙.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

1

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