-
好东西
-
可是我贴上去的代码上不是有向PC发送数据的部分吗?如果说没有用到中断,为什么会有while (!(IFG1 & UTXIFG0)); // TX缓存空闲?UTXIFG0置1的话不是说明产生了中断吗?如果不时能发送中断,为什么UTXIFG0能置1?
-
代码如下:
#include
#include "BoardConfig.h"
void Delays(void);
void PutString(uchar *ptr);
/********************主函数**********************/
void main(void)
{
uchar *tishi = " MCU sends 0~127 to PC and the\
\n screen will display their corresponding\
\n ASCII code as follows:";
uchar value = 0;
WDTCTL = WDTPW + WDTHOLD; // 关狗
BoardConfig(0xb8); // 关流水灯、蜂鸣器和数码管
P3SEL |= 0x30; // P3.4,5选择为UART收发端口
ME1 |= UTXE0 + URXE0; // 使能USART0收发
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; // Modulation
UCTL0 &= ~SWRST; // 初始化UART0状态机
IE1 |= URXIE0; // 使能接收中断
_EINT();
PutString(tishi);
while(1)
{
while (!(IFG1 & UTXIFG0));
TXBUF0 = value++;
value &= 0x7f; // 保证value的数值小于128
while (!(IFG1 & UTXIFG0));
TXBUF0 = '\n';
Delays();
}
}
/*******************************************
函数名称:PutSting
功 能:向PC机发送字符串
参 数:无
返回值 :无
********************************************/
void PutString(uchar *ptr)
{
while(*ptr != '\0')
{
while (!(IFG1 & UTXIFG0)); // TX缓存空闲?
TXBUF0 = *ptr++; // 发送数据
}
while (!(IFG1 & UTXIFG0));
TXBUF0 = '\n';
}
/*******************************************
函数名称:Delays
功 能:延时一会
参 数:无
返回值 :无
********************************************/
void Delays(void)
{
uchar i=20;
uint j;
while(i--)
{
j=2000;
while(j--);
}
}
-
那用TAIE使能中断和CCIE使能中断产生的中断有什么不同?为什么用TAIE使能产生的中断会使跑飞,而用CCIE则没有问题?
-
搞了半天,是定时器寄存器配置的问题,可是现在也不知道为什么原先的配置会导致程序跑飞?
我用的是430149,原来的定时器配置是:
CCTL0 = CCIE;
TACTL|=TASSEL_1+TACLR+ID0+ID1;
TACTL|=MC0+TAIE;
TACCR0=40960;
现在改为:
CCTL0 = CCIE;
CCR0 = 40960;
TACTL = TASSEL_1 + ID_3 + MC_1;
请教,前一种配置有配置TACCTL的中断时能位TAIE还有清零位TACLR,而后一种没有,反而可以了?
-
目前确定是程序跑飞了,可是我的看门狗在一开始就关了,不知道还有什么原因会导致程序跑飞?
-
请教一下,中断服务函数里会不会存在一些非法的操作使程序跑飞?如果有的话,哪些算作非法的操作?
-
我一开始就把看门狗关了
-
我看了下发现全速运行一次即执行一次中断服务函数出来后反汇编窗口中地址就到了reset_vector FFFF那里,所以代码又重新开始了
-
那请问有什么方法可以让定时器在执行中断函数的过程中不计时而是从中断函数出来后才重新计时?另外刚才调试时遇到一个问题,发现中断函数执行完后代码又从main函数的开始处开始执行(本来设定在main函数执行到某一句时进入中断函数),为什么不是执行完中断函数不是回到被中断时正执行的语句而是回到一开始?
-
这个我知道,问题解决了,与那个头文件无关。上一条回复不是说了吗?
-
程序是我自己写的,应该是那个板上配置资源的函数的问题,那个是买板的时候配的代码里边的,把#include "BoardConfig.h",BoardConfig(0xb0);这两句去掉应该就可以。
-
谢谢,确实是无法进入中断服务函数,不知道有哪些原因会导致无法进入中断服务函数?而且P1.7这个端口我没有使用也没有使能它的中断,不知道为什么中断标志寄存器总P1IFG的这一位总是为1标志有中断产生,即使用软件清零也没用
-
昨天已经解决,但是仍然感谢:)