lqw517 发表于 2024-10-14 16:17:47

Ai32G12K128仿真问题

本帖最后由 lqw517 于 2024-10-15 09:46 编辑

我用 Ai32G12K128 制作串口仿真芯片后(后续也制作过USB仿真片),串口仿真用不了,于是就用USB下载变回普通IC,
但是这个时候就出问题了,键值读取有问题。于是我又制作回USB仿真找问题,单步运行是正常的,但是仿真的时候,
全速运行的时候,又不行了。再次下载变回普通片,仍然程序跑的有问题。下载过官方的按键例程,是可以的。但是我的这个程序也没问题呀。
有没有大佬看看怎么回事,以下的代码。
现在跑程序很怪。
#include <STC32G.H>

#define FOSC30000000UL
#define BRT (65536 - (FOSC / 9600+2) / 4)
unsigned char leddata={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
volatile unsigned char keynum=0;
void delay(unsigned int x)
{
      while(x--);
}
void uart_init()
{
//      CLKSEL = 0x0f;
//      CLKDIV = 0;      //SYSCLK48M
      
      SCON=0x50;
      AUXR |= 0x05;                              
      T2L = BRT;
      T2H = BRT >> 8;

      S1BRT=1;
      T2R = 1;
//      SBUF=0x57;
}
void main()
{

//                        IRC48MCR |=0x80;
//                        while(!(IRC48MCR&0x01));
      
                        P3M0 = 0x00;
                        P3M1 = 0x00;
            P6M0 = 0x00;
                        P6M1 = 0x00;
                  P4M0 = 0x00;
                        P4M1 = 0x00;
                        P7M0 = 0x00;
                        P7M1 = 0x00;
      
                        P0M0 = 0x00;
                        P0M1 = 0x00;
                        P40=0;
                        P70=0;
      
                        P06 = 1;
            P00 = 0;
                        P6=0xc0;
//                        uart_init();
                while(1)
                {
//                        SBUF = 0x57;
//                        delay(30000);

                        P0 = 0xc0;
                        keynum=(P0^0xc0)&0xc0;
                        P0 = 0x0f;
                        keynum|=(P0^0x0f)&0x0f;
                        
                        switch (keynum&0xcf)
      {
            case 0x41:
                              {
                                        P6=leddata;
                              }
                      break;
            case 0x42:
                              {
                                       P6=leddata;
                              }
                      break;
                              case 0x44:
                              {
                                        P6=leddata;
                              }
                      break;
                                 case 0x48:
                              {
                                        P6=leddata;
                              }
                      break;
                                 case 0x81:
                              {
                                        P6=leddata;
                              }
                      break;
                  case 0x82:
                              {
                                        P6=leddata;
                              }
                      break;
                              case 0x84:
                              {
                                        P6=leddata;
                              }
                      break;
                              case 0x88:
                              {
                                        P6=leddata;
                              }
                      break;
                              
   //         default:
   //                   break;
      }
                }
}


lqw517 发表于 2024-10-14 16:21:07

用的是STC实验箱

wpy621206 发表于 2024-10-14 16:45:36

lqw517 发表于 2024-10-14 16:21
用的是STC实验箱

main函数缺少
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度

lqw517 发表于 2024-10-14 19:18:47

wpy621206 发表于 2024-10-14 16:45
main函数缺少
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1;...

加入了还是一样,而且现在读取不了这个芯片的固件号了

乘风飞扬 发表于 2024-10-15 09:10:52

直接烧录实验箱例程包配套的按键扫描例子到芯片里试试。
另外用USB下载变回普通IC,如果还需要仿真的话得重新制作仿真芯片。
对照论坛导航栏“教学视频”-“仿真演示”里面的32G仿真演示视频步骤,看看是否有哪个步骤没操作好。

lqw517 发表于 2024-10-15 09:43:15

乘风飞扬 发表于 2024-10-15 09:10
直接烧录实验箱例程包配套的按键扫描例子到芯片里试试。
另外用USB下载变回普通IC,如果还需要仿真的话得重 ...

直接烧录例程包是可以的,我用USB下载变回普通芯片,然后发现运行有问题,我又制作回仿真去跑,然后一步一步跑是正常的,可以读取按键值。但是全速运行又不行了,再次下载回普通片也还是一样

乘风飞扬 发表于 2024-10-15 11:41:22

lqw517 发表于 2024-10-15 09:43
直接烧录例程包是可以的,我用USB下载变回普通芯片,然后发现运行有问题,我又制作回仿真去跑,然后一步 ...

把你的程序直接烧录到芯片里测试功能会正常吗?
单步执行正常,全速运行不行。“不行”是什么情况?
考虑一下是不是全速运行时速度太快,导致肉眼看不到现象。

lqw517 发表于 2024-10-15 12:20:21

乘风飞扬 发表于 2024-10-15 11:41
把你的程序直接烧录到芯片里测试功能会正常吗?
单步执行正常,全速运行不行。“不行”是什么情况?
考虑 ...

1.不正常。
2.不行是指读取不了键值
3.我的一直按着不放开也不会改变数码管显示的键值,所以应该不会是肉眼看不见。

乘风飞扬 发表于 2024-10-15 13:43:04

lqw517 发表于 2024-10-15 12:20
1.不正常。
2.不行是指读取不了键值
3.我的一直按着不放开也不会改变数码管显示的键值,所以应该不会是肉 ...

直接烧录例程包是可以的,那还是你的程序有问题,参考例程包的例子进行修改或者移植吧。
页: [1]
查看完整版本: Ai32G12K128仿真问题