gaochaoning 发表于 2007-11-17 16:15:23

我用jtag ice仿真马老师书中的例题,请看图中数值为何不变呢?软件仿真可以看到数据变化

http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_181329.jpg
程序单步执行后,dis_buf[]中的内容并没有改变。请指教,谢谢。

gaochaoning 发表于 2007-11-17 20:07:26

time[]中的数据能改变,为何dis_buff[]中的数据不能改变呢?是仿真器有问题吗?

machao 发表于 2007-11-17 20:34:21

我没有JTAG ICE,只有MK II.但我从没使用过他们做在线仿真的.

如果软件模拟正确,并且在实际系统上也能正常运行,可能你仿真的过程有问题.多试几次.

gaochaoning 发表于 2007-11-17 21:00:39

马老师:您好!
    我用的是jtag ice仿真器。用到PC的I/O因此,我把程序中的C口改成了D口,运行后6个数码管显示的都是0,修改dis_buff[],中的数据,加了一条语句让它循环在显示程序上,本想因该看到数据有变化但看到的还是0。不知为何请指教,谢谢。下面是截取的图片。
http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_181355.jpg
http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_181356.jpg

/*********************************************
File name                        : demo_6_5.c
Chip type         : ATmega16
Program type      : Application
Clock frequency   : 4.000000 MHz
Memory model      : Small
External SRAM size: 0
Data Stack size   : 256
*********************************************/

#include <mega16.h>
#include <delay.h>

flash unsigned char led_7={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flash unsigned char position={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
unsigned char time;                                        // 时、分、秒计数
unsigned char dis_buff;                                // 显示缓冲区,存放要显示的6个字符的段码值
unsigned char time_counter;                                // 1秒计数器
bit point_on;                                                // 秒显示标志

void display(void)                                        // 扫描显示函数,执行时间12ms
{
        unsigned char i;
        //for(i=0;i<=5;i++)
        while(1)
        {   for(i=0;i<=5;i++)
                {
                  PORTA = led_7];
                  if (point_on && ( i==2 || i==4 )) PORTA |= 0x80;        // (1)
                  PORTD = position;
                          delay_ms(2);                                        // (2)
                    PORTD = 0xff;
                       }                                                // (3)
        }
}

void time_to_disbuffer(void)                          // 时间值送显示缓冲区函数
{
        unsigned char i,j=0;
        for (i=0;i<=2;i++)
        {
                dis_buff = time % 10;
                dis_buff = time / 10;
        }
}

void main(void)
{
    PORTA=0x00;                                        // PORTA初始化
    DDRA=0xFF;
    PORTD=0x3F;                                        // PORTC初始化
    DDRD=0x3F;

    time = 23; time = 58; time = 55;        // 时间初值23:58:55
    time_to_disbuffer();                        // 时间值送显示缓冲区函数

    while (1)
    {
          display();                           // 显示扫描,执行时间12ms
          if (++time_counter >= 40)
          {
                  time_counter = 0;                        // (4)
                  point_on = ~point_on;                        // (5)
                  if (++time >= 60)
                  {
                          time = 0;
                          if (++time >= 60)
                          {
                                  time = 0;
                                  if (++time >= 24) time = 0;
                          }
                  }
                  time_to_disbuffer();
          }
      delay_ms(13);                                          // 延时13ms,可进行其它处理(6)
    }
}

machao 发表于 2007-11-17 22:39:12

1.检查AVCC是否接到+5V了.
2.先做例6.4,检查能否运行和显示.

gaochaoning 发表于 2007-11-18 08:11:37

显示正常了。问题出在编译时没有选ATmega16芯片,而是默认的芯片。cvavr-project-configure-c compiler-chip-ATmega16.
谢谢马老师的答复。

machao 发表于 2007-11-18 14:49:05

下次就不会翻这样的低级错误了^_^

gaochaoning 发表于 2007-11-18 15:40:09

是的,是的。
页: [1]
查看完整版本: 我用jtag ice仿真马老师书中的例题,请看图中数值为何不变呢?软件仿真可以看到数据变化