Professional Documents
Culture Documents
Đề thi
Đề thi
Bài 1: GPIO
Bài 1.1
Yêu cầu: Sinh viên viết chương trình cho LED1 và LED2 sáng tắt luân phiên. Thời gian
giữa 2 lần sáng tắt là khoảng 1s.
Câu hỏi 1: Các LED được kết nối với MCU như hình trên. Điền vào chỗ trống để trả lời
các câu hỏi dưới đây.
+ LED1 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời: Led 1 được nối với P2.2
+ LED2 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời: Led 2 được nối với P2.1
+ Để LED sáng, phải xuất giá trị gì ra chân port?
Trả lời: Xuất mức cao ra chân Port tương ứng
Câu hỏi 2: Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:
#include <msp430g2553.h>
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW | WDTHOLD ; // Stop WDT
P1DIR |= BIT0 + BIT6; //Configure P2.1 and P2.2 as Output
P1OUT &= BIT6; // Turn off LED1, LED2
P1OUT |= BIT0 ; // Turn on LED 1, turn off LED 2
while(1)
{ //Infinite loop
i= 30000; //Delay
do (i--);
while (i !=0);
}}
Bài 1.2
Yêu cầu: Sinh viên viết chương trình để đảo trạng thái LED1 mỗi khi SW1 được nhấn.
Câu hỏi 1: Các SW(switch) được kết nối với MCU như hình trên. Điền vào chỗ trống để
trả lời các câu hỏi dưới đây.
+ SW1 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời: SW1 nối vào P1.0
+ SW2 nối vào chân nào của MCU? (Cổng (Port) nào?)
Trả lời: SW2 nối vào P1.1
+ Để đọc trạng thái switch, các chân port phải là input hay output?
Trả lời: các chân port phải là output
Câu hỏi 2: Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:
#include <msp430g2553.h>
void main(void)
P1REN|=BIT3;
P1OUT|=BIT3;
while(1)
P1OUT ^=BIT0;
while (!(P1IN & BIT3)); //Wait for the release of the button
for(i=3000;i!=0;i--);
}}
Bài 2. GPIO & INTERRUPT
Bài 2.1
Yêu cầu: Sinh viên viết chương trình đảo trạng thái LED1 khi Switch 1 được nhấn.
Trong chương trình sử dụng ngắt trên chân port giao tiếp Switch.
Câu hỏi 1: Các SW(switch) được kết nối với MCU như hình trên. Điền vào chỗ trống để
trả lời các câu hỏi dưới đây.
+ SW1 nối vào chân Port gì của CPU?
Trả lời: Nối vào chân Port TA0
+ Khi Switch được nhấn, sẽ có chuyển trạng thái như thế nào trên chân PORT?
Trả lời : High to low
+ Để cho phép ngắt trên chân P1.0, ta phải ghi BIT0 vào bit=1 của thanh ghi PxIE
+ Để chọn cạnh xuống cho ngắt trên chân P1.0, ta phải ghi BIT0 vào bit=1 của thanh
ghi PxIES
Câu hỏi 2: Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:
#include <msp430g2553.h>
while ((P1IN & BIT3)); //Wait for the release of the button
P1IFG &= ~BIT3; //Clean P1.0 Interrupt Flag (bit 0 of P1IFG register)
P1REN|=BIT3;
P1OUT|=BIT3;
Bài 2.2
Yêu cầu: Sinh viên viết chương trình cho phép/không cho phép LED1 nhấp nháy khi
Switch 1 được nhấn.
#include <msp430g2553.h>
void main(void)
while(1)
if(blink_status==1)
do(i--);
while(i!=0);
i = 1500;
do(i--);
while(i!=0);
while(!(P1IN&BIT3));
i = 1500;
do(i--);
while(i!=0);
if(blink_status==1)
blink_status = 0;
}else
blink_status = 1;
Bài 2.3
Yêu cầu: Sinh viên viết chương trình cho phép/không cho phép LED1 nhấp nháy khi
Switch 1 được nhấn. Trong chương trình sử dụng ngắt trên chân port giao tiếp Switch.
Hướng dẫn: Sinh viên vận dụng kiến thức và các hướng dẫn đã có trong bài 2.1 và 2.2
để viết chương trình.
#include <msp430g2553.h>
void main(void)
P1DIR |= BIT0;
P1REN |= BIT3;
P1OUT |= BIT0;
while(1)
P1IE |= BIT3;
P1IES |= BIT3;
_BIS_SR(LPM3_bits + GIE);
while(1)
if(NHAY==1)
P1OUT^= BIT0;
i = 15000;
do(i--);
while(i!=0);
else {
P1OUT ^=BIT0;
i = 1500;
do(i--);
while(i!=0);
i = 15000;
do(i--);
while(i!=0);
if(NHAY==1)
{
NHAY = 0;
} else
P1OUT ^= BIT0;
NHAY = 1;
break;
Bài 2.4
Yêu cầu: Sinh viên viết chương trình cho phép LED1 và không cho phép LED2 nhấp
nháy khi Switch 1 được nhấn, không cho phép LED1 và cho phép LED2 nhấp nháy khi
Switch 2 được nhấn.
Hướng dẫn: Sinh viên vận dụng kiến thức và các hướng dẫn đã có trong bài 2.1 và 2.2
để viết chương trình.
#include <msp430g2553.h>
void main(void)
P1DIR |= BIT0;
P1DIR |= BIT6;
P1REN |= BIT3;
led = ~led;
if(led==1)
P1OUT^=BIT0;
P1OUT&=~BIT6;
for(i=30000;i>0;i--);
else
P1OUT^=BIT6;
P1OUT&=~BIT0;
for(i=30000;i >0;i--);
Bài 2.5
Yêu cầu: Sinh viên viết chương trình cho phép LED1 và không cho phép LED2 nhấp
nháy khi Switch 1 được nhấn, không cho phép LED1 và cho phép LED2 nhấp nháy khi
Switch 2 được nhấn. Trong chương trình sử dụng ngắt trên chân port giao tiếp Switch.
Hướng dẫn: Sinh viên vận dụng kiến thức và các hướng dẫn đã có trong bài 2.1 và
2.2 để viết chương trình.
#include <msp430g2553.h>
void main(void)
{
P1DIR |= BIT0;
P1DIR |= BIT6;
P1REN |= BIT3;
while(1)
P1IE |= BIT3;
P1IES |= BIT3;
_BIS_SR(LPM3_bits + GIE);
while(1)
if(!(P1IN &BIT3))
led = ~led;
if(led==1)
P1OUT^=BIT0;
P1OUT&=~BIT6;
for(i=30000;i>0;i--);
else
P1OUT^=BIT6;
for(i=30000;i>0;i--);
Bài 3: TIMER
Bài 3.1
Yêu cầu: Sinh viên viết chương trình đảo trạng thái LED1 và LED2 sau thời gian 1s, sử
dụng ngắt BASIC TIMER 1 interrupt
Câu hỏi 1: Để vô hiệu hóa Watchdog Timer ta phải ghi vào thanh ghi WDTCTL một giá
trị bằng bao nhiêu?
Trả Lời: WDTCTL = 0xFFFF
Câu hỏi 2: Cấu hình FLL+
Một thạch anh tần số 32768 Hz được nối vào bộ dao động LFXT1. Ta phải ghi vào
thanh ghi FLL_CTL0 giá trị gì để chọn tạ bên trong có giá trị 8pF?
Trả Lời: FLL_CTL0 |= XCAP8PF
Với các thanh ghi ở giá trị mặc định, tần số của các tín hiệu xung nhịp sẽ bằng bao
nhiêu?
Trả Lời:
ACLK = LFXT1CLK;
MCLK = LFXT1CLK, XT2CLK ( nếu sẵn có), hoặc DCOCLK;
SMCLK = LFXT1CLK, XT2CLK ( nếu sẵn có), hoặc DCOCLK;
Câu hỏi 3: Cấu hình GPIO
LED1 và LED2 được nối vào chân P2.2 P2.1. Ta phải ghi vào thanh ghi nào với giá trị
gì để cầu hình cho 2 chân PORT này thành output còn lại là input?
Trả Lời: P2DIR = BIT6;
Ta phải ghi thanh ghi nào với giá trị gì để LED1 sáng LED2 tắt?
Trả Lời: P2OUT = BIT0;
Câu hỏi 4: Cấu hình cho Basic Timer 1:
Ta dùng Basic Timer 1 để tạo ngắt. Basic Timer gồm 2 bộ đếm mắc nối tiếp, trong đó
ngõ vào của BTCNT2 là ngõ ra của BTCNT1/256. Ngõ vào của BTCNT1 là tín hiệu
ACLK có tần số 32768 Hz. Ngõ ra của BTCNT2 phải được chia cho bao nhiêu để có
ngắt Basic Timer 1 có chu kỳ là 1s?
Trả Lời: Phải chia cho 32
Giá trị phải ghi vào các thanh ghi sau là bao nhiêu để có số chia cho BTCNT2 như trên
và cho phép ngắt?
Trả Lời:
BTCTL = BT_fCLK2_DIV32;
IE2= BIT1;
Câu hỏi 5: Chế độ công suất thấp
Chương trình đơn giản đảo trạng thái LED1 và LED2 trong ngắt. Chế độ công suất thấp
nào nên được sử dụng?
Trả Lời: LPM3
Khi đó nguồn xung nhịp nào sẽ tích cực trong suốt quá trình hoạt động?
Trả Lời: Xung nhịp ACLK
Câu hỏi 6:Hoàn tất chương trình:
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW | WDTHOLD ; // Stop WDT