菜鸟第二贴--TM80--中断控制
电路图如上面那个GPIO的例子中的电路图功能:LED_R1 闪烁
LED_R2//LED_R3 闪烁
主程序如下
时钟内部 :8M
/*
*******************************************************************************
**Include files
*******************************************************************************
*/
#pragma interruptINTTM80 MD_INTTM80
#include "macrodriver.h"
#include "system.h"
/*
*******************************************************************************
**MacroDefine
*******************************************************************************
*/
/*
**---------------------------------------------------------------------------
**
**Abstract:
** This function implements main function.
**
**Parameters:
** None
**
**Returns:
** None
**
**---------------------------------------------------------------------------
*/
#define PORT_PM4 0x1f //SET P4.5 P4.6 P4.7 OUT
#define PORT_PU4 0x0 //SET P4.5 P4.6 P4.7 UP
#define PORT_P4 0x00 //SET P4.5 P4.6 P4.7 = 0
#define LED_R1 P4.5
#define LED_R2 P4.6
#define LED_R3 P4.7
extern void hdwinit( void );
bit LED_STATUS;
bit TM80_FLAG;
unsigned char g_ucTM80cnt = 0;
unsigned char time_count = 0;
__interrupt void MD_INTTM80( void )
{
if (++g_ucTM80cnt == 250)
{
g_ucTM80cnt = 0;
LED_R1=LED_STATUS;
LED_STATUS = ~LED_STATUS;
time_count++;
}
if(time_count == 10)
{
LED_R2 = LED_STATUS;
LED_R3 = ~LED_STATUS;
time_count = 0;
}
return ;
}
void PORT_Init( void )
{
P4= PORT_P4;
PU4 = PORT_PU4;
PM4 = PORT_PM4;
}
void main( void )
{
hdwinit();
PORT_Init();
LED_STATUS = 0;
time_count = 0;
TM80_FLAG = 0;
TMC80 = 0b00000000; /* Count clock = fxp/2^6 = 125 kHz */
CR80= 249;
TCE80 = 1; /* Start the timer operation */
TMMK80 = 0; /* Enable INTTM80 interrupts */
EI();
while(1)
{
;//wait interrupt
}
}
//=============================================================================
请高手指点一下:
1==感觉时钟不准确,led亮暗间隔不均匀。(手上没有示波器 不好检查波形)
2==为什么LED_R2和LED_R3不会产生闪烁,是不是中断程序有要求????
工程文件如下
tm80工程文件ourdev_391754.rar(文件大小:56K) (原文件名:TIME.rar) 是不是这样的原因:设开始LED_STATUS=0;每次进入中断,它反转,当TIME_CNT=10时,进入第二个IF时,LED_STATUS又回到0,依此类推,故R2,R3只有一个亮,且都
不闪烁。我一菜鸟~~~~~~~ R2,R3只有一个都不亮 啊 中断程序改成这样后还是LED_R1工作正常
LED_R2和LED_R2没工作
__interrupt void MD_INTTM80( void )
{
if (++g_ucTM80cnt == 250)
{
g_ucTM80cnt = 0;
LED_R1 = ~LED_R1;
// LED_R2 = ~LED_R2;
// LED_R3 = ~LED_R3;
time_count++;
}
if(time_count == 3)
{
LED_R2 = ~LED_R2;
time_count = 0;
}
return ;
} 无语,才学2天,请各位高手来看看 灯2与3不闪烁的原因是你软件上并没有让它电压产生改变。 NEC-etouch 北京意同创科技公司
积分:59
派别:
等级:------
来自:北京意同创科技有限公司
灯2与3不闪烁的原因是你软件上并没有让它电压产生改变。
终于等来boss了
__interrupt void MD_INTTM80( void )
{
if (++g_ucTM80cnt == 250)
{
g_ucTM80cnt = 0;
LED_R1 = ~LED_R1;
LED_R2 = ~LED_R2;
LED_R3 = ~LED_R3;
time_count++;
}
if(time_count == 3)
{
// LED_R2 = ~LED_R2;
time_count = 0;
}
return ;
}
//
如果是这样 LED 工作就都正常
对于上面的如果我是在debug模式下调试硬件 运行工作也正常
那么请问您能否指点一下 我该如何修改 time_count LED_STATUS
0 1
1 0
2 1
3 0
4 1
5 0
6 1
7 0
8 1
9 0
10 0
LED_R2= 0,LED_R3 = 1;---------------------没改变
0 1
1 0
2 1
3 0
4 1
5 0
6 1
7 0
8 1
9 0
10 0
LED_R2= 0,LED_R3 = 1;----------没改变 你的程序循环进行,而这2个IO口电压是没改变的啊 这个我看到了
谢谢
请您看看我后面发的那个中断程序
__interrupt void MD_INTTM80( void )
{
if (++g_ucTM80cnt == 250)
{
g_ucTM80cnt = 0;
LED_R1 = ~LED_R1;
// LED_R2 = ~LED_R2;
// LED_R3 = ~LED_R3;
time_count++;
}
if(time_count == 3)
{
LED_R2 = ~LED_R2; //==============此处修改 程序无法进入这个地方 即使改成WHILE(1);
time_count = 0;
}
return ;
} 我用SM+软仿是正常的,说明你改后逻辑没有错,看看硬件?
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_391993.JPG
(原文件名:4.JPG) 为什么要把简单的程序复杂化呢? __interrupt void MD_INTTM80( void )
{
if (++g_ucTM80cnt == 250)
{
g_ucTM80cnt = 0;
LED_R1=~LED_R1;
time_count++;
}
if(time_count == 10)
{
LED_R2 = ~LED_R2;
LED_R3 = ~LED_R3;
time_count = 0;
}
return ;
}
这样应该没问题的吧,你再看看。单步运行,看程序是否执行到了LED_R2那? 软件调试是可以进去的 但是下到硬件上就不行了 连波形都没有 硬件是不会有问题的 其他程序都通过了
我现在只是想写点入门小例子 所以一个一个资源调的
如果改成这样子就没有问题 led都可以闪烁了
__interrupt void MD_INTTM80( void )
{
if (++g_ucTM80cnt == 250)
{
g_ucTM80cnt = 0;
LED_R1=~LED_R1;
LED_R2 = ~LED_R2;
LED_R3 = ~LED_R3;
time_count++;
}
if(time_count == 10)
{
time_count = 0;
}
return ;
}
这样已经可以说明硬件没有问题了吧 你的看门狗是不是打开了啊? 没有打开 即使打开了也不应该有影响的 问题找到了
是我系统时钟部分设置出现问题了 问题找到了
是我系统时钟部分设置出现问题了
什么问题,我也没搞懂,能说一下吗? 关键是你没有设置让软件能够停止内部时钟
看看这个图 你需要按照如下设置
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_522676.JPG
(原文件名:未命名.JPG) 低速内部时钟需要能够被软件停止
希望是这个原因啊
后面还是请nec-teach来解答一下呵呵 你好,我想问一下,
bit LED_STATUS;
bit TM80_FLAG;
C语言不是没有这个定义类型的么?
这个我不大明白。 问一下,你们用的软件为什么我下不下来,下载下来的也没用。。。
页:
[1]