Tức là bạn phải làm sao cho khi có tín hiệu ngắt, MCU lập tức chuyển sang xuất dữ liệu cho 1 vòng quay mới
Thì mỗi lần có tín hiệu ngắt em cho count=0 tức là xuất dữ liệu cho vòng quay mới rồi mà
Bạn để ý là khi count = 0, nó ko ảnh hưởng gì đến delay cả. nếu count = 0 khi đang delay thì dữ liệu mới vẫn chưa đc xuất ra
P.S: đừng nghe
kisseshacker nó hù
Em Cảm ơn. Sau 1 hồi sửa chữa giờ nó ra như thế này. Các anh xem góp ý giùm em với
CODE:
#include <msp430g2553.h>
#include "Basic_config.h"
unsigned char Data[46] = {0xFF, 0x01, 0x01, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0x01, 0x01, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x01, 0x01,
0xFF, 0xFF, 0xFF, 0x01, 0x01, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0x83, 0x83, 0x7D, 0x7D, 0x7D, 0x6D, 0x6D,
0x8B, 0x8B};
unsigned long cycle, temp=0;//Counter, Rotating cycle variable
unsigned int count = 0, check = 0;
void Timera0_init();
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//Stop Watchdog Timer
P2SEL = 0;
P2SEL2 = 0;
P2DIR = 0xff;//Configure Port 2 as Output
P1IE |= BIT0;// Enable P1.0 Interrupt
P1IES |= BIT0;// Falling Edge Interrupt
P1IFG &= ~BIT0;// Clear Interrupt Flag
__enable_interrupt();// Enable Masketable Interrupt
TA0CTL = TASSEL_2 + MC_2 + ID_3+ TAIE ;
//Source Clock : SMCLK
//Divided by 8
//Continuous Mode
//Enable Overflow Interrupt
while (1)
{
if (count < 46)
P2OUT = Data[count];
else
P2OUT = 0xFF;
count++;//count is reset by an interrupt program
delay_us(cycle/50,check);
check=0;
}
}
#pragma vector = TIMER0_A1_VECTOR
__interrupt void TAIV_Interrupt (void)
{
temp++;//Count number of overflow
TA0CTL &=~TAIFG;
}
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR (void)
{
count = 0;//Reset counter
temp <<= 16;
cycle = temp | TA0R;
TA0R = 0; // reset result
P1IFG &= ~BIT0;// Clear P1.0 interrupt flag
temp = 0;
check=1;
}
CODE DELAY_US:
void delay_us (long t, int check)
{
long i;
for (i = 0; (i<t)&(check=0) ; i++ )
_delay_cycles(MCLK_F);
}