[C12] Tổng kết Pre-C12

Kisses Hacker

Art Supporter
Staff member
Hôm nay chúng ta đã học buổi cuối cùng của Pre-C12, sau buổi này các bạn sẽ tiến hành hoàn thành phần cứng ChickenBoard và bắt đầu code cho em nó theo yêu cầu đề thi phần Firmware.

Slide bài giảng GPIO và code mẫu có thể download trong thư mục C12: https://drive.google.com/folderview?id=0B5NddT-B_3zzN3QtVkp6ODNzSjg&usp=sharing (các bài học tiếp theo cũng sẽ được upload vào thư mục này). Ngoài ra mình cũng upload file cài đặt CCS6.0 và một số phần mềm linh tinh khác.

Về buổi chấm thi tuyển sinh C12, các bạn vui lòng đợi thông báo chính thức trên diễn đàn.
Chúc các bạn hoàn thành tốt đề thi và có những hiệu ứng bá đạo để đem đi tranh tài :D

P.s: vừa hoàn thành 2 xị đế nên chỉ có thể viết ngắn gọn, các bạn có thắc mắc cứ comment trong topic này nhé :1cool_byebye:
 

LeeTruHee

Thành Viên PIF
anh upload file hướng dẫn cắm nguồn Chicken Board và file user guide của MSP430G2553 lên đi anh! =)
 

LeeTruHee

Thành Viên PIF
anh ơi, cho em hỏi câu lệnh P1OUT |=0x08 trong file GPIO_Input_Button_Output_Leds.c, mình phải hiểu như thế nào?:gach ngồi cả buổi thay đổi đủ thứ để xem nó thực hiện câu lệnh này ra sao, cuối cùng nổ não luôn:5cool_beat_plaster:
 

Sang Trần

Gà con
Staff member
Cổng P1 có 8 Port như sau
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 Tương ứng với 8 bit. 0x08 Chuyển sang Binary là 00001000 Tương ứng với vị trí P1.3 vậy Port đó sẽ có tích cực 3.3V LED sẽ sáng trên tinh thần đó làm tiếp nha bạn ! Thân !!
 

LeeTruHee

Thành Viên PIF
Cổng P1 có 8 Port như sau
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 Tương ứng với 8 bit. 0x08 Chuyển sang Binary là 00001000 Tương ứng với vị trí P1.3 vậy Port đó sẽ có tích cực 3.3V LED sẽ sáng trên tinh thần đó làm tiếp nha bạn ! Thân !!
nhưng P1.3 nối với nút nhấn, không phải LED, code như sau nè bạn:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;// Stop Watchdog Timer

P1SEL = 0;// Input/Output function is selected
P1SEL2 = 0;//

P1DIR = 0x41;// P1.3 is used for input, P1.0 + P1.6 for output
// Remember to put 2 jumpers J5 to connect the 2 Leds on Launchpad

P1REN = 0x08;// Turn on pull up resistor P1.3

P1OUT = 0x01;// Turn on led P1.0
__delay_cycles(1000000);
P1OUT = 0x40;// Turn on led P1.6
__delay_cycles(1000000);
P1OUT = 0x00;// Turn off 2 leds
__delay_cycles(1000000);

while(1)// loop forever
{
P1OUT |= 0x08;// Magic coding, let's try to find out the function of this line :)
if ((P1IN & 0x08) == 0)
{
__delay_cycles(200000);// Chong rung phim, google de biet them chi tiet
P1OUT |= 0x01;
P1OUT &= ~0x40;
}
else
{
P1OUT |= 0x40;
P1OUT &= ~0x01;
}
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;// Stop Watchdog Timer
P1SEL = 0;// Input/Output function is selected
P1SEL2 = 0;//
P1DIR = 0x41;// P1.3 is used for input, P1.0 + P1.6 for output
// Remember to put 2 jumpers J5 to connect the 2 Leds on Launchpad
P1REN = 0x08;// Turn on pull up resistor P1.3
P1OUT = 0x01;// Turn on led P1.0
__delay_cycles(1000000);
P1OUT = 0x40;// Turn on led P1.6
__delay_cycles(1000000);
P1OUT = 0x00;// Turn off 2 leds
__delay_cycles(1000000);
while(1)// loop forever
{
P1OUT |= 0x08;// Magic coding, let's try to find out the function of this line :)
if ((P1IN & 0x08) == 0)
{
__delay_cycles(200000);// Chong rung phim, google de biet them chi tiet
P1OUT |= 0x01;
P1OUT &= ~0x40;
}
else
{
P1OUT |= 0x40;
P1OUT &= ~0x01;
}
}
}
mình không hiểu ở chỗ: ban đầu set P1.3 là Input nhưng trong vòng while lại có lệnh P1OUT |=0x08,(nó đã là ngõ vào sao còn xuất giá trị ngõ ra được:( )với lại mình không hiểu toán tử "|=" nó thực hiện như thế nào???
 

Sang Trần

Gà con
Staff member
Câu lệnh đó để pull-up nội trở đó bạn đưa nó ra ngoài vòng while cũng được ko sao đừng quan tâm nó quá :D !!!
Cú pháp varA |= X tương đương varA = varA|X Phép OR
:brick::brick:
 

LeeTruHee

Thành Viên PIF
Câu lệnh đó để pull-up nội trở đó bạn đưa nó ra ngoài vòng while cũng được ko sao đừng quan tâm nó quá :D !!!
Cú pháp varA |= X tương đương varA = varA|X Phép OR
:brick::brick:
nội trở là gì? mình bỏ dòng lệnh đó thì chương trình chạy theo kiểu khác. vì sao phải set nội trở, vậy set P1REN là set ngoại trở à?!:-(
 

Sang Trần

Gà con
Staff member
Khi mình set 1 Port làm INPUT thì như sau:
Code:
P2DIR &=~BIT2;
P2REN |= BIT2;
P2OUT |= BIT2;
Để kiểm tra xem có nhấn nút hay không thì
Code:
if(~P2IN & BIT2 )
Vấn đề pull-up bạn có thể tìm kím trên GG nói chung để đảm bảo tín hiệu đầu vào ko bị float lúc 0 lúc 1 :D
 

vominhvuong

Trứng gà
anh chị cho em hỏi khi cho p1out=0x00 chỉ có p1.0 đến p1.5 sáng còn 1.6 và 1.7 không sáng tương tự p2 cũng vậy.
 

Kisses Hacker

Art Supporter
Staff member
anh chị cho em hỏi khi cho p1out=0x00 chỉ có p1.0 đến p1.5 sáng còn 1.6 và 1.7 không sáng tương tự p2 cũng vậy.

P1DIR = 0xFF vào xem sao nhé.
Nếu vẫn thế thì xem lại phần cứng :D

Riêng P2.6 và P2.7 thì nếu đã hàn thạch anh thì nó sẽ không sáng.
 

vominhvuong

Trứng gà
dòng P1DIR-0xff có rồi. thạch anh vẫn chưa hàn còn phần cứng thì emcâu dây từ kit ra mà.
 

Kisses Hacker

Art Supporter
Staff member
dòng P1DIR-0xff có rồi. thạch anh vẫn chưa hàn còn phần cứng thì emcâu dây từ kit ra mà.

Em nạp code mẫu dành cho ChickenBoard xem sao, nếu led P2.6 và P2.7 vẫn tắt ngóm thì chắc ăn là do phần cứng.
 

Kisses Hacker

Art Supporter
Staff member
Thằng nào tìm slide bài giảng GPIO trong thư mục không ra (ta đã up từ lâu), nhắn tin nhờ vả và ta đã post link riêng để tải slide từ tối qua (ngay post trên) mà vẫn nhắn tin trách cứ "thầy đáng ghét" các kiểu, ta nhớ số đt rồi đó nhé :doubt:
 
Top