工具/软件:Code Composer Studio
在我的代码中、我必须使用按钮打开绿色 LED、并使用计时器让红色 LED 闪烁。 当我设置方向的值时、例如 P9DIR=GreenLed 和 P1DIR=RedLed、它会自动打开 Green Led。 我将我的代码和值与其他两个进行了比较、它对他们有用、但对我不有用。 微控制器是否存在我不了解的问题或是否存在错误? 我已经从函数中取出了很多代码、使其更易于阅读。
代码如下:
#include
#define RED_LED 0x0001 // P1.0是红色 LED
#define GREEN_LED 0x80 //绿色 LED
#define RED_OFF 0xFE
#define GREEN_OFF 0x7F
#define BUTTON11 0x02
#define Development 0x5A80 //停止看门狗计时器
#define ENABLE_Pins 0xFFFE //需要使用输入和输出
#define ACLK 0x0100 // Timer_A ACLK 源
#define Up 0x0010 // Timer_A 向上计数模式
#define TAIFG 0x0001 //用于查看 Timer A 中断标志
/*********
//***功能原型
/*********
void stop_watchdog_timer (void);//这些函数没有
void enable_inputs_and_outputs (void);//输入或输出
void timer0_will _count_up_for_500ms (void);
void toggle_red_LED (void);
void toggle_red_LED_off (void);
void clear_timer0_elapsed_flag (void);
void timer0_count_for_500ms (void);//新添加的原型
void timer0_in_up_mode (void);//新添加的原型
void pullup_elid (void);
void toggle_green_LED (void);
void toggle_green_LED_off (void);
void button (void);
/*********
unsigned int timer0_500ms_elapsed (void);//具有输出、但无输入
/*********
MAIN ()
{
unsigned char interval=0;//计数650个计数
WDTCTL =开发;
PM5CTL0 = ENABLE_Pins;
P9DIR = GREEN_LED; //////// 当它到达该点时、它会自动打开绿色 LED
TA0CTL = ACLK |向上;
TA0CCR0 = 650;
P1OUT=0x02;
P1REN=0x02;
P1DIR = RED_LED;
while (1)
{
if (((BUTTON11 & P1IN)=0)
{
TOGGLE_GREW_LED();
}
其他
{
TOGGLE_GREW_LED_OFF ();
}
if (timer0_500ms_elapsed ())
{
clear_timer0_elapsed_flag ();
间隔=间隔+1;
if (间隔= 1)
{
TOGGLE_RED_LED ();
clear_timer0_elapsed_flag ();
间隔=间隔+1;
}
if (间隔=30)
{
TOGGLE_RED_LED_OFF ();
clear_timer0_elapsed_flag ();
}
}
}//结束 while (1)
}//end main()
//***功能定义
void stop_watchdog_timer (void)
{
WDTCTL =开发;//禁用开发的看门狗计时器
}
//
void enable_inputs_and_outputs (void)
{
PM5CTL0 = ENABLE_Pins;//启用输入和输出
}
//
//
void toggle_red_LED (void)
{
P1OUT = RED_LED;//在引脚 P1.0上切换红色 LED
}
//
void clear_timer0_elapsed_flag (void)
{
TA0CTL = TA0CTL &(~TAIFG);//正如我们之前看到的那样,这首先会显示
}
//
unsigned int timer0_500ms_elapsed (void)
{
返回 TA0CTL 和 TAIFG;
}
//
void timer0_will _count_up_for_500ms (void)
{
timer0_count_for_500ms ();// Timer0将计数0.5秒
timer0_in_up_mode ();//在向上计数模式中
}
//
void timer0_count_for_500ms (void)
{
TA0CCR0 = 650;// 20000 * 25us = 0.5s
}
//
void timer0_in_up_mode (void)
{
TA0CTL =向上| ACLK;//使用 ACLK 计数到 TA0CCR0中的值
}
//
void pullup_elid (void)
{
P1OUT=0x02;
P1REN=0x02;
}
void toggle_green_LED (void)
{
P9OUT =绿色 LED;
}
void toggle_green_LED_off (void)
{
P9OUT=0x7F;
}
void toggle_red_LED_off (void)
{
P1OUT=0x00;
}