Các lệnh trong lập trình MSP430

nhok 9x

Trứng gà
Tình hình là hôm nay mới nhận kit về và rất thích thú với việc vọc em nó. Tuy nhiên, vì mới làm quen với lập trình C cho MSP430 nên mình còn khá bỡ ngỡ. Vì vậy mình xin lập topic này để các bạn newmem như mình có thể trao đổi, thảo luận và học hỏi thêm.
Đầu tiên là mình hỏi về lệch dịch bit. Mình định làm dàn Led trong mạch chạy qua chạy lại, nhưng không biết cấu trúc của lệnh dịch là gì. Mình định xuất ra P1.
Cái thứ 2 là mình định cho P1.i với i chạy từ 0->7, như vậy có lệnh nào thực hiện điều đó không?
Ví dụ nếu viết theo pascal là
for i:=0 to 7 do
P1.i := 1;
:D
 

zbloodelfz

Cố Vấn CLB
Staff member
Dịch bit bạn dùng lệnh << dịch trái, >> dịch phải :
VD : 1 <<2 (= 4) , 4>>1 (= 2)
(0001) (0100) (0100) (0010)
Hỉnh như theo như mình biết thì CCS ko có hỗ trợ thanh ghi từng bit . Chỉ có thanh PxOUT điều khiển cả 8 bit của PORT .
 

nhok 9x

Trứng gà
qua diễn đàn TI http://www.diendanti.com mà trao :4cool_beauty:đổi i sáng Chị P có nói ó, bênh này để chém gió thui hjhj:1cool_byebye:
bên đó tòan là chuyên, còn mình mới tập sự, gà gà, dzô đó cho họ chém mẻ dao :)). Với lại bên này tòan là BK, nên có gì còn chỉ bảo lẫn nhau. Khi nào thành thần gió rồi thì qua bên đó chém :))
Như vậy mình có đọan lệnh sau:
P1OUT |= 0xFF;
while (1)
{ P1 <<1;
lệnh delay;
}
râu ria từ từ thêm sau, hok bik như vậy có đúng hok ta?
 

phuong le

Thành Viên PIF
ừa hjhj mà thích chơi bênh này hơn thiệt :4cool_beauty:, ủa cho hỏi những chân nào của msp430g2553 thì điều khiển đèn ta ???:2cool_sexy_girl:
 

vanthinhvt92

Thành Viên PIF
Tình hình là hôm nay mới nhận kit về và rất thích thú với việc vọc em nó. Tuy nhiên, vì mới làm quen với lập trình C cho MSP430 nên mình còn khá bỡ ngỡ. Vì vậy mình xin lập topic này để các bạn newmem như mình có thể trao đổi, thảo luận và học hỏi thêm.
Đầu tiên là mình hỏi về lệch dịch bit. Mình định làm dàn Led trong mạch chạy qua chạy lại, nhưng không biết cấu trúc của lệnh dịch là gì. Mình định xuất ra P1.
Cái thứ 2 là mình định cho P1.i với i chạy từ 0->7, như vậy có lệnh nào thực hiện điều đó không?
Ví dụ nếu viết theo pascal là
for i:=0 to 7 do
P1.i := 1;
:D
Cái chú msp430 này không định địa chỉ bit, nhưng bạn vẫn có thể truy cập theo địa chỉ bit mà không tác động tới các bit khác bằng các phép toán logic như and, or, xor. Nghe mấy anh chém, mình chém lại thôi nge!!!:5cool_sweat:
 

vanthinhvt92

Thành Viên PIF
ừa hjhj mà thích chơi bênh này hơn thiệt :4cool_beauty:, ủa cho hỏi những chân nào của msp430g2553 thì điều khiển đèn ta ???:2cool_sexy_girl:
Chân nào cũng điều khiển được hết, với điều kiện là đã config các thanh ghi.:6cool_boss:
 

bigboy061293

Thành Viên PIF
qua diễn đàn TI http://www.diendanti.com mà trao :4cool_beauty:đổi i sáng Chị P có nói ó, bênh này để chém gió thui hjhj:1cool_byebye:
bên đó tòan là chuyên, còn mình mới tập sự, gà gà, dzô đó cho họ chém mẻ dao :)). Với lại bên này tòan là BK, nên có gì còn chỉ bảo lẫn nhau. Khi nào thành thần gió rồi thì qua bên đó chém :))
Như vậy mình có đọan lệnh sau:
P1OUT |= 0xFF;
while (1)
{ P1 <<1;
lệnh delay;
}
râu ria từ từ thêm sau, hok bik như vậy có đúng hok ta?
code xong rồi quăng lên board thì biết liền chứ gì, có gì đâu mà phải post lên =)). Vì mình đang xài 1 con vđk 16 bit nên bạn coi lại chổ màu đỏ đó thử nhe :D
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
qua diễn đàn TI http://www.diendanti.com mà trao :4cool_beauty:đổi i sáng Chị P có nói ó, bênh này để chém gió thui hjhj:1cool_byebye:
bên đó tòan là chuyên, còn mình mới tập sự, gà gà, dzô đó cho họ chém mẻ dao :)). Với lại bên này tòan là BK, nên có gì còn chỉ bảo lẫn nhau. Khi nào thành thần gió rồi thì qua bên đó chém :))
Như vậy mình có đọan lệnh sau:
P1OUT |= 0xFF;
while (1)
{ P1 <<1;
lệnh delay;
}
râu ria từ từ thêm sau, hok bik như vậy có đúng hok ta?
theo mình thì nên là
Code:
P1OUT = 0x01;
while(1)
{
for (int i=0;i<=7;i++)
{
P1OUT <<= 1;
_delay_cycles(...);
}
}
Hjz...comment này đang được viết trong tình trạng mê ngủ @@
 
qua diễn đàn TI http://www.diendanti.com mà trao :4cool_beauty:đổi i sáng Chị P có nói ó, bênh này để chém gió thui hjhj:1cool_byebye:
bên đó tòan là chuyên, còn mình mới tập sự, gà gà, dzô đó cho họ chém mẻ dao :)). Với lại bên này tòan là BK, nên có gì còn chỉ bảo lẫn nhau. Khi nào thành thần gió rồi thì qua bên đó chém :))
Như vậy mình có đọan lệnh sau:
P1OUT |= 0xFF;
while (1)
{ P1 <<1;
lệnh delay;
}
râu ria từ từ thêm sau, hok bik như vậy có đúng hok ta?
code xong rồi quăng lên board thì biết liền chứ gì, có gì đâu mà phải post lên =)). Vì mình đang xài 1 con vđk 16 bit nên bạn coi lại chổ màu đỏ đó thử nhe :D
vi điều khiển 16 bit là vì nó dùng 16 bit để định địa chỉ thôi em. còn các ip (hay ngoại vi) của nó có thể là 8 bit.
 

nhok 9x

Trứng gà
quá hợp lý, port 1 nó có 8 bit, vậy mà đòi gán 16 bit, gán bằng răng à???
Code của Wolf coi bộ ổn đấy, mặc dù chưa đổ thử lên kit :p
Ai mà có ý tưởng hay thắc mắc j thì cứ post lên đây luôn nhé!!
 

zbloodelfz

Cố Vấn CLB
Staff member
Code:
P1OUT = 0x01;
while(1)
{
for (int i=0;i<=7;i++)
{
P1OUT <<= 1;
_delay_cycles(...);
}
}
Hjz...comment này đang được viết trong tình trạng mê ngủ @@
đúng là mê ngủ thật em để lệnh P1OUT = 0x01 ở ngoài while thì sau 7 lần dịch toàn bộ Led đều tắt vĩnh viễn không bao giờ sáng lại.
[/quote]
Sáng vĩnh viễn chứ anh =)) LAYOUT LED nối VCC mà =))
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Code:
P1OUT = 0x01;
while(1)
{
for (int i=0;i<=7;i++)
{
P1OUT <<= 1;
_delay_cycles(...);
}
}
Hjz...comment này đang được viết trong tình trạng mê ngủ @@
đúng là mê ngủ thật em để lệnh P1OUT = 0x01 ở ngoài while thì sau 7 lần dịch toàn bộ Led đều tắt vĩnh viễn không bao giờ sáng lại.
[/quote]
Sáng nay dậy em cũng chợt nhớ ra ai dè được sửa rồi :">
 

IceSandwich

Thành Viên PIF
Tình hình là hôm nay mới nhận kit về và rất thích thú với việc vọc em nó. Tuy nhiên, vì mới làm quen với lập trình C cho MSP430 nên mình còn khá bỡ ngỡ. Vì vậy mình xin lập topic này để các bạn newmem như mình có thể trao đổi, thảo luận và học hỏi thêm.
Đầu tiên là mình hỏi về lệch dịch bit. Mình định làm dàn Led trong mạch chạy qua chạy lại, nhưng không biết cấu trúc của lệnh dịch là gì. Mình định xuất ra P1.
Cái thứ 2 là mình định cho P1.i với i chạy từ 0->7, như vậy có lệnh nào thực hiện điều đó không?
Ví dụ nếu viết theo pascal là
for i:=0 to 7 do
P1.i := 1;
:D
Sau khi xem mấy cái post mình có đóng góp thế này:
Vì con msp430g nó không có thanh ghi bit cho 1 PORT như trên PIC, hình như muốn xuất giá trị thì chỉ tác động lên P1OUT nên không thể dùng phép gắn cho cả PORT được.

Code gợi ý của mình như sau
Code:
P1DIR |= 0xFF;  // Set mode out mode cho P1
P1SEL = 0;      // Set mode GPIO
P1SEL2 = 0;
P1OUT &= ~0xFF;  // Reset all pins
 
while (1)
{
  unsigned char i, temp = 0x01;
  for (i=0; i<8; i++)
  {
    P1OUT &= ~0xFF;  // Reset all pins
    P1OUT |= temp;  // Set pins
    temp = temp << 1;
    _delay_cycles(100000);  // Delay 100 ms
  }
}
Với đoạn code trên thì nó sẽ thực hiện cháy từng led trên PORT LED, cứ sau 1 ms thì cháy 1 con theo thứ tự dịch sang trái (chú ý là do LED trên MAIN kích bằng mức 0 nên với code này nó sẽ sáng hết 7 led và chỉ tắt 1 led thôi) :D
 
Top