retsen 发表于 2024-10-25 00:48:57

Ai8H8K64U写了程序不跑,求高手指点

本帖最后由 DebugLab 于 2024-10-25 09:19 编辑

几年没有接触STC单片机了, 上周画了一个板子,用单片机控制显示屏部分的RESET和DISPLAY时序,现在写的程序上电不跑,请高手指点下我的问题出在哪里,甚谢!
用的是STC8H8K64U-45I-LQFP32 ,单片机只控制显示屏的上电和下电时序,打了全出PIN的小板,实现模块化,方便替换。
原代码如附件(复杂点的代码我都删掉了,只要这个程序能跑起来,后面就能在这个基础上添加即可);
担心是P3.0,P3.1,P3.2开机低电平,使得STC进入烧录模式,跳线10K排阻上拉后,开机仍然未侦测到跑程序;
请高手帮忙确认下是什么原因导致了开机不工作;
非常感谢!





8H8K64U 发表于 2024-10-25 08:45:45

本帖最后由 8H8K64U 于 2024-10-25 08:49 编辑

坐等高手

乘风飞扬 发表于 2024-10-25 09:11:01

你提供的程序不太完整,例如看不到“PWR_ON”、“ADC3”是什么。
烧录附件简单的IO口测试程序到芯片里试试看,用示波器/万用表/指示灯就能查看效果。

21cnsound 发表于 2024-10-25 09:47:54

先跑一个IO的LED闪烁来验证一下是否可以正常跑

Lkck8210 发表于 2024-10-25 10:08:12

你的代码有很多全型符号
你确定编译没报错?


soma 发表于 2024-10-25 11:16:52

不行跑个流水灯就知道有没有问题了

retsen 发表于 2024-10-28 17:16:35

乘风飞扬 发表于 2024-10-25 09:11
你提供的程序不太完整,例如看不到“PWR_ON”、“ADC3”是什么。
烧录附件简单的IO口测试程序到芯片里试试 ...

烧录正常,没有波形,我用逻辑分析仪抓的。

retsen 发表于 2024-10-28 17:20:59

本帖最后由 retsen 于 2024-10-28 17:33 编辑

Lkck8210 发表于 2024-10-25 10:08
你的代码有很多全型符号
你确定编译没报错?

      #include "stc8h.h"      
#include "intrins.h"

      #defineMAIN_Fosc       12000000L   //define main Clock 12M
      typedef   unsigned char   u8;
      typedef   unsigned int    u16;
      typedef   unsigned long   u32;

      void GPIO_Init(void); //
      void Delayus(int t0);
      void Delayms(int t1);
      void Power_off(void);
      void Power_on(void);
      
      sbit Touch_reset = P0^3; //OUTPUT
      sbit DISP      = P1^4; //OUTPUT      
      sbit DD_reset    = P1^6; //OUTPUT
      sbit Scan_on_off = P2^4; //INPUT Scan Power Switch
      sbit Main_board_power_on = P2^7; //OUTPUT控制主板开机
      sbit PON         = P3^5; //LCD ON
      //===========================================//

      

      //===========================================//
      void GPIO_Init(void)
      {
      //      P_SW2 |= 0x80;

                P0M1 = 0x00;   
                P0M0 = 0x00;   
                P1M1 = 0x00;   
                P1M0 = 0x00;   
                P2M1 = 0x00;   
                P2M0 = 0x00;   
                P3M1 = 0x00;
                P3M0 = 0x00;   
      }


      void Delayus(int t0)// /* X1us */
      {
                int i,j;
                for(i=0;i<t0;i++)
                              for(j=0;j<12;j++);//1T=0.083us ,1us=12*1T
      }
      //===========================================//
      void Delayms(int t1)
      {
      unsigned int i;
      do
      {
      i=MAIN_Fosc/12000;//1T=0.083us ,1ms=12000*1T
      while(--i);
      }
      while(--t1);
      }               

      //===========================================//
      void Power_on()
      {
      if(Scan_on_off==1)   //
    {
          DD_reset=0;   // P16=0
          Touch_reset=0;//P03=0
          DISP=0;   //P36=0
                PON=0;
          Delayms(100);
          DD_reset=1;   //P16=1
          Delayms(50);   
          Touch_reset=1;//P03=1
                DISP = 1;
          Delayms(150);
          PON =1;//P36=1
      }
                else{}
}
      
      //===========================================//
      void Power_off()
      {
      if(Scan_on_off==0)      //ADC3=0,POWER OFF
      {
      Main_board_power_on=0;    //主板电源控制端接地,执行关机程序
      PON =0;//P36=0
      Delayms(150);
      DD_reset=0; // P16=0
      Touch_reset=0;      //P03=0
      DISP =0;      
      }
else
      {
         
}
      
}
      //============================================//

      void main(void)
      {   
      
   GPIO_Init();
   if (Scan_on_off==0)//POWER off
      {
      Power_off();
      }
      else
      {
      Power_on();      
      }
      }               
//====================之前是随便敲的,上面这个编译是OK的,但烧录后,无波形输出,我的P30~P32 是悬空的,是否一定要上拉才行?RESET也没有加RC,我烧录其他PWM例程,是可以输出波形的。

乘风飞扬 发表于 2024-10-28 17:22:00

本帖最后由 乘风飞扬 于 2024-10-28 17:23 编辑

retsen 发表于 2024-10-28 17:16
烧录正常,没有波形,我用逻辑分析仪抓的。
直接烧录我提供例程包里面的hex文件,然后用示波器/逻辑分析仪抓P20~P23口信号。
如果还是抓不到信号的话,要检查你的硬件跟操作方法了。
拍个完整的操作视频传上来看看。

retsen 发表于 2024-10-28 17:48:24

乘风飞扬 发表于 2024-10-28 17:22
直接烧录我提供例程包里面的hex文件,然后用示波器/逻辑分析仪抓P20~P23口信号。
如果还是抓不到信号的话 ...
E:\Rens\IO扫描.bmp

测了可以输出正常的波形
页: [1] 2
查看完整版本: Ai8H8K64U写了程序不跑,求高手指点