If you're using the built in oscillator, you don't need to delay that long for 15 seconds. In a tight
for loop, I think a 15 second delay is closer to 1500000 loops. Plus, you can't multiply by such a large number.
I think the other problem is with your
if/else statement. You're using |= in both cases, so when you push the button, you aren't toggling the bits -- BIT0, BIT4, BIT6, and BIT7 eventually will all be high. If you can provide more information about what you're doing with all of the bits, and maybe a circuit diagram, that will help me help you more.
EDIT -- To address the delay implementation part of your question, jsolarski certainly has the best solution for the timer. I looked into it some more since I haven't used timers with the MSP430, and ended up with some questions of my own. I'm going to put my findings here just for discussion's sake, and hopefully jsolarski can add comments where appropriate.
You've got a several core clock sources, which include LFXT1CLK, XT2CLK, DCOCLK, and VLOCLK. I'm personally going to be using an internal clock source for my application, and am going to try VLOCLK first.
Once you have a clock source selected, now you have to determine where three other internally-generated clock sources will originate from. These other three clocks are ACLK, MCLK, and SMCLK. Conveniently enough, VLOCLK is a valid clock source for all three. You can also set a prescaler for these clocks, in case you don't need high-speed timing.
You will want to configure the WDT to use interval mode via WDTTMSEL. This also requires you to set WDTIE bit in IE1. You'll also want to set your clock source via WDTSSEL and prescaler via WDTISx.
I couldn't figure out what
WDT_MDLY_64 equates to, based on his numbers, but that's expected because you haven't specified what clock source you intend to use.
Hopefully this edit to my answer has given you some more information on how to set up the WDT for intervals, should you decide to try it. However, I think your problem is more fundamental as my original answer stated, regarding your use of
|=, and whether you use a tight
for loop or intervals, it just wouldn't work.