打印

IAP15F2K61S2程序下载后不能运行

[复制链接]
903|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sdwhwxx|  楼主 | 2014-11-26 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在做一个小产品,用的是STC15F2K16S2,现在用IAP15F2K61S2仿真,正常,但是仅将程序下载到目标板后发现程序不运行。目标板用的是外部开关电源。程序源码如下:
/************************************************************************************
*        函数名称:LEDControl()                                                                                                                        *
************************************************************************************/
#define   JH1002ControlMain_C
#include  <JH1002Controlmain.h>

void LEDControl(bit_t state, uchar_t addr)
{
        if(state == LEDOFF)
        {
                addr = addr | 0x08;
        }
        P0 = (P0 &0xf0) | addr;
        p_259WR2 = 0;
        _nop_();
        p_259WR2 = 1;
}
/************************************************************************************
*        函数名称:TKHardwareInit()                                                                                                                *
************************************************************************************/
void        TKHardwareInit()
{
        IE = 0;
        IE2 = 0;
        P0M1 = 0x00;
        P0M0 = 0xff;                        //P0口为输出口,推挽输出
        P0 = 0x0f;
           P1M1 = 0x01;
        P1M0 = 0xfe;                        //P1.0为串口2接收端,其他为输出口
        P1 = 0xff;

        P2M1 = 0x0f;
        P2M0 = 0xf0;                        //P2.4~P2.7为输出口,其他为输入口
        P2 = 0x0f;

        P3M1 = 0x4d;
        P3M0 = 0xb2;                        //P3.1\4\5\7为输出,其他为输入
        P3 = P3 & 0x03 | 0xc0;

        P4M1 = 0x3f;
        P4M0 = 0xc0;                        //P4.6\7为输出,其他为输入
        P4 = 0x3f;

        P5M1 = 0x00;
        P5M0 = 0x30;                        //P5.4\5为输出
        P5 = 0x30;

        CLK_DIV = 0x00;                        //主时钟不对外输出时钟,不分频,串口1工作于正常方式

        IP = 0x10;                                //串口1中断拥有最高优先等级

        PCON = 0x00;                        //波特率不加倍

        TCON = 0x00;                        //外部中断0、1为边沿触发(上升、下降均触发)
        TMOD = 0x00;                        //定时器0、1工作于16位自动重装载定时器方式
        TH1 = (65536-200/(12000000/FOSC))/0x100;        //
        TL1 = (65536-200/(12000000/FOSC))%0x100;        //200us定时器初值
        TR1 = 1;                                        //启动定时器1
        TH0 = (65536-500/(12000000/FOSC))/0x100;
        TL0 = (65536-500/(12000000/FOSC))%0x100;        //500us定时器初值
        TR0 = 1;                                          //启动定时器0

        ET1 = 1;                                //允许定时器1中断
        EA = 1;                                        //总中断允许
}
/************************************************************************************
*        函数名称:Init_259()                                                                                                                        *
************************************************************************************/
void        Init_259()
{
        uchar_t        i;
        for(i=0;i<8;i++)
        {
                P0 = P0 & 0xf0 | i;
                p_259WR0 = 0;
                _nop_();
                p_259WR0 = 1;
        }
        for(i=0;i<6;i++)
        {
                P0 = P0 & 0xf0 | i;
                p_259WR1 = 0;
                _nop_();
                p_259WR1 = 1;
        }

        for(i=6;i<8;i++)
        {
                P0 = P0 & 0xf0 | 0x80 |i ;
                p_259WR1 = 0;
                _nop_();
                p_259WR1 = 1;
        }
        for(i=0;i<8;i++)
        {
                P0 = P0 & 0xf0 | 0x80 |i ;
                p_259WR2 = 0;
                _nop_();
                p_259WR2 = 1;
        }
}
/************************************************************************************
*        函数名称:main()                                                                                                                                *
************************************************************************************/
void main()
{
        TKHardwareInit();
        Init_259();
        while(1)
        {
                WDT_CONTR=0x33;                                                                //清除看门狗
                _nop_();
//                if(szToneType[4]==SIGNULL)
//                        SetSignal(4,2,196);
        }
}
/********************************************************************************
*  函数名称: timer1()                                                          *
*  定时器1中断服务程序                                                          *
********************************************************************************/
void timer1() interrupt 3
{
    ucT200usCount++;
    if(ucT200usCount == 250)
    {
        ucT200usCount = 0;
                ucT50msCount++;
                if(ucT50msCount==10)
                {
                        ucT50msCount = 0;
                        LEDControl(bLED,0);
                        LEDControl(bLED,1);
                        LEDControl(bLED,2);
                        LEDControl(~bLED,3);
                        LEDControl(~bLED,4);
                        bLED = ~bLED;
                }
    }
}
请高手帮忙解答,谢谢!

相关帖子

沙发
coody| | 2014-11-26 15:57 | 只看该作者
你先整个简单的程序看看。比如:
void main(void)
{
   unsigned int i;

   while(1)
   {
      P1 = 0x00;
      for(i=0; i<60000; i++)  ;
      P1 = 0x00;
      for(i=0; i<60000; i++)  ;
   }
}

然后示波器看任意P1口是否有方波信号

使用特权

评论回复
板凳
qqljhang| | 2014-11-27 19:52 | 只看该作者
coody 发表于 2014-11-26 15:57
你先整个简单的程序看看。比如:
void main(void)
{

赞!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

0

粉丝