[msp430] gpio
TRANSCRIPT
• Điện áp tiêu thụ thấp: 1.8V to 3.6V với 3 chế độ sử dụng năng lượng (Active, Standby, Off)
• 5 chế độ tiết kiệm năng lượng
• 2 port, 10 chân xuất nhập (I/O pins)
• Vi điều khiển 16-bit với đầy đủ các chức năng (2 bộ Timer 16-bit, 10-bit ADC, UART, I2C, PWM, ….)
Launch pad MSP430G2
2 port xuất nhập Port1 : Từ chân P1.0 đến P1.7 Port2: 2 chân Xin(P2.6) và Xout(P2.7)
Thanh ghi PxSEL(x:1 , 2) và PxSEL2(x:1 , 2) Thanh ghi này qui định chế độ làm việc cho các chân bao gồm PxSEL và PxSEL2 VD: Ta muốn port 1 là GPIO thì ta thực hiện lệnh như sau: P1SEL = 0; P1SEL2 = 0; Lưu ý: Interrupts P1 và P2 sẽ bị vô hiệu hóa khi PxSEL=1
Thanh ghi PxDIR(x:1 , 2) Thanh ghi này qui định loại ngõ vào ra cho các chân (I/O pins) Mặc định các chân này là input, nên ta chỉ cần set output cho các chân này VD: P1DIR = 0x01 //chân P1.0 là output
Thanh ghi PxREN(x:1 , 2) Thanh ghi này cho phép tắt hoặc mở chế độ pullup/pulldown resistor cho các pins
Thanh ghi PxIN(x: 1 , 2) Khi ta muốn nhập giá trị cho các chân I/O, ta sẽ đặt giá trị vào các thanh ghi PxIN Lưu ý là ta phải chỉnh P1DIR trước khi nhập giá trị
Thanh ghi PxOUT(x: 1 , 2) _Khi ta muốn xuất giá trị cho các chân I/O, ta sẽ đặt giá trị vào các thanh ghi PxOUT _Khi ta config thanh ghi PxREN sang chế độ pullup/pulldown resistor thì Lưu ý là ta phải chỉnh P1DIR trước khi xuất giá trị ra ngoài.
Tóm tắt: Để thực hiện xuất / nhập trên 1 chân (Pin): - Cài đặt đúng giá trị cho thanh ghi PxDIR - Đặt kiểu tín hiệu của pin là GPIO hay các chức năng khác qua thanh ghi PxSEL - Xuất tín hiệu bằng cách ghi giá trị “0” hoặc “1” vào port tương ứng (port P1OUT) - Đọc giá trị của chân bằng cách đọc mức logic trên port tương ứng.
Cách viết chương trình C với CCS và IAR #include <msp430g2231.h> //Khai báo biến toàn cục unsigned int a //Khai báo chương trình con void chuong_trinh_con(void) { //chương trình con ở đây }
//Chương trình chính void main(void) { // Phần khởi tạo //vòng lặp vô tận while(1) { //thực hiện lệnh }; }
#include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction P1SEL = 0; // Set P1 GPIO function P1SEL2 = 0; while(1) { P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR __delay_cycles(100); // Đối với IAR, còn với CCS thì chỉ cần _delay_cycles(100); } } //Chương trình thực hiện chớp tắt led tại P1.0