[C12] Thông báo buổi học 16-11

messier

Ban Chủ Nhiệm
Buổi học tuần tới chúng ta sẽ tiếp tục với phần còn lại của module timer. Các em ôn lại kiến thức đã học ở bài trước, thử các mode khác của timer và xem các slide kế tiếp của bài học.
Code học timer ngày 9-11:
Code:
#include <msp430.h>
void setup_timer(void){
    TA0CTL = TASSEL_2 +  ID_3 + MC_1 + TAIE + TACLR;
    //TA0CCTL0 = CCIE;
    //TA0CCTL2 = CCIE;
 
    TA0CCR0 = 62500;
    TA0CCR2 = 1234;
}
 
void setup_port(void){
    P1SEL = 0;
    P1SEL2 = 0;
    P1DIR |= BIT0 + BIT6;
}
 
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer
    _bis_SR_register(GIE);
    setup_port();
    setup_timer();
 
    while(1){
        P1OUT ^= BIT6;
        __delay_cycles(200000);
    }
    return 0;
}
 
#pragma vector=TIMER0_A0_VECTOR
__interrupt void timer0_a0_isr(){
    P1OUT ^= BIT0;
}
 
#pragma vector=TIMER0_A1_VECTOR
__interrupt void timer0_a1_isr(){
    switch(TA0IV){
    case 0x02:
        break;
    case 0x04:
        break;
    case 0x0a:
        P1OUT ^= BIT0;
        break;
    default:
        break;
    }
}
 

thanh xuân

Ban Chủ Nhiệm
Code:
#include <msp430.h>
 
/*
* main.c
*/
void setup_timer(void){
TA0CTL=TASSEL_2+MC_2+ID_3+TAIE+TACLR;
TA0CCR0=62500;
TA0CCTL0=CCIE;
}
 
void setup_port(void){
P2SEL=0;
P2SEL2=0;
P2DIR=BIT0+BIT7;
P2OUT=BIT0;
}
void main(void) {
WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer
setup_timer();
setup_port();
_BIS_SR(LPM0_bits + GIE);
 
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void ngat1(void){
P2OUT ^=BIT7;
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void ngattran(void){
P2OUT ^=BIT0;
}
em viết ntn đáng lẹ mỗi lần tràn P2.0 nó sẽ đổi trạng thái nhưng sao em chạy ctrinh nó không nhấp nháy led vậy a
 

thanh xuân

Ban Chủ Nhiệm
Code:
#include <msp430.h>
 
/*
* main.c
*/
void setup_timer(void){
TA0CTL=TASSEL_2+MC_2+ID_3+TAIE+TACLR;
TA0CCR0=6250;
TA0CCTL0=CCIE;
}
 
void setup_port(void){
P2SEL=0;
P2SEL2=0;
P2DIR=BIT0+BIT7;
P2OUT=BIT0+BIT7;
}
void main(void) {
WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer
setup_timer();
setup_port();
_BIS_SR(LPM0_bits + GIE);
 
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void ngat1(void){
P2OUT ^=BIT7;
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void ngattran(void){
P2OUT ^=BIT0;
TA0IV=0;
}
NẾU E VIÊT NTN THI LAI CHAY ĐÚNG VẬY MÌNH PHẢI XÓA TAIV À? SAO EM THẤY CODE TRÊN ĐÂU CÓ XÓA ĐÂU
 

messier

Ban Chủ Nhiệm
thanh xuan: TAIV sẽ chỉ tự động reset khi đọc hoặc ghi nó (Mục 12.2.6.2 user guide msp430x2xxx family). Trong code của a ở phần ngắt TIMER0_A1_VECTOR có dòng lệnh switch(TAIV) nên nó sẽ tự reset.
 
Top