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:49 编辑
坐等高手 你提供的程序不太完整,例如看不到“PWR_ON”、“ADC3”是什么。
烧录附件简单的IO口测试程序到芯片里试试看,用示波器/万用表/指示灯就能查看效果。 先跑一个IO的LED闪烁来验证一下是否可以正常跑 你的代码有很多全型符号
你确定编译没报错?
不行跑个流水灯就知道有没有问题了 乘风飞扬 发表于 2024-10-25 09:11
你提供的程序不太完整,例如看不到“PWR_ON”、“ADC3”是什么。
烧录附件简单的IO口测试程序到芯片里试试 ...
烧录正常,没有波形,我用逻辑分析仪抓的。 本帖最后由 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:23 编辑
retsen 发表于 2024-10-28 17:16
烧录正常,没有波形,我用逻辑分析仪抓的。
直接烧录我提供例程包里面的hex文件,然后用示波器/逻辑分析仪抓P20~P23口信号。
如果还是抓不到信号的话,要检查你的硬件跟操作方法了。
拍个完整的操作视频传上来看看。 乘风飞扬 发表于 2024-10-28 17:22
直接烧录我提供例程包里面的hex文件,然后用示波器/逻辑分析仪抓P20~P23口信号。
如果还是抓不到信号的话 ...
E:\Rens\IO扫描.bmp
测了可以输出正常的波形
页:
[1]
2