1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo tiểu luận MSP430

27 502 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Báo cáo tiểu luận MSP430

Đại học Bách Khoa Đà Nẵng Khoa Điện Tử - Viễn Thông Báo cáo tiểu luận MSP430 Thành viên: Võ Thị Mẫn Lê Bá Tuấn Bùi Hữu Tri Nguyễn Hữu Anh Khoa GVHD: Phạm Xuân Trung Chương : Lý thuyết 1.1 Tổng quan MSP430 (Mixed Signal Controller) 1.1.1 - Chip MSP430G2x31 Nguồn cung cấp: 1.8V – 3.6V Công suất tiêu tán cực thấp chế độ tiết kiệm lượng Wake-up nhanh từ chế độ Standby P7 o Mỗi port gồm chân o Mỗi chân làm đầu vào hay đầu ra,có thể đọc hay ghi riêng lẻ o Port P1 P2 có khả ngắt o Mỗi ngắt cấu hình theo cạnh lên,cạnh xuống sườn xung theo tín hiệu vào tương ứng với vector ngắt o o o o o o o 1.6.2 Đặc tính xuất nhâp: o chức chân không phụ thuộc vào việc lập trình o làm input hay output o P1 P2 cấu hình riêng cho ngắt o không phụ thuộc vào ghi input hay output o cấu hình có điện trở kéo 1.6.3 Hoạt động xuất nhập: o Được lập trình phần mềm 1.6.4 Thanh ghi input o Bit=0:đầu vào mức thấp o Bit =1:đầu vào mức cao 1.6.5 Thanh ghi output: o Khi không sử dụng điện trở kéo,giá trị ghi tương ứng: o Bit=0:đầu vào mức thấp o Bit =1:đầu vào mức cao o Khi không sử dụng điện trở kéo,giá trị tương ứng: o Bit=0: điện trở kéo xuống o Bit =1: điện trở kéo lên 1.6.6 Thanh ghi định hướng PxDIR: Các chân làm đầu vào hay đầu định hướng bit ghi PxDIR Bit=0:chân định hướng làm đầu vào(chú ý dễ nhầm lẫn với PIC) Bit =1:chân định hướng làm đầu 1.6.7 Thanh ghi cho phép điện trở kéo PxREN: Mỗi bit ghi PxREN cho phép hay không cho phép điện trở kéo Bit=0: điện trở kéo xuống Bit =1: điện trở kéo lên 1.6.8 Thanh ghi lựa chọn chức PxSEL PxSEL2: Các bit ghi PxSEL PxSEL2 sử dụng để lựa chọn chức Port xuất nhập hay chức đặc biệt khác PxSEL2 0 1 PxSEL 1 Chức chân Chức xuất nhập Module lựa chọn Đăng kí trước Module ngoại vi thứ lựa chọn Lưu ý: PxSEL=1,các ngắt P1 P2 bị cấm 1.6.9 Các ngắt P1 P2: o Mỗi chân P1 P2 có khả ngắt o Ngắt đươc cấu hình ghi PxIFG, PxIE PxIES o Sử dụng ghi PxIFG để xác định nguyên nhân ngắt P1 P2 a) Thanh ghi cờ ngắt P1IFG P2IFG o Mỗi bit ghi PxIFGx cờ ngắt tương ứng với chân xuất nhập có cạnh xung tín hiệu chân.tất cờ ngắt ghi PxIFGx đòi hỏi ngắt tương ứng với bit PxIE GIE đươc set o Mỗi cờ ngắt reset phần mềm o Phần mềm set cờ ngắt o Bit=0: cờ ngắt o Bit =1: có ngắt chờ 1.6.10 Thanh ghi lựa chọn ngắt sườn xung P1IES P2IES o Bit=0: cờ ngắt set lên có cạnh lên xung o Bit =1: cờ ngắt set lên có cạnh xuống xung 1.6.11 Thanh ghi cho phép ngắt P1IE P2IE o Bit=0: cấm ngắt o Bit =1: cho phép ngắt 1.7 Timer_A 1.7.1 Giới thiệu Timer_A: Timer_A có: o 16bit timer/counter với chế độ hoạt động: Stop, Up, Continuous, Up/Down o Nguồn xung clock lựa chọn cấu hình từ nhiều nguồn khác o ghi Capture/Compare (TACCRx) o PWM o vector ngắt : TACCR0 TAIV 1.7.2 1.7.3 Sơ đồ phần cứng Timer_A Các ghi sử dụng Timer_A: 1.7.4 Lựa chọn nguồn xung clock cho Timer_A: Nguồn xung clock cho timerA lựa chọn từ nguồn xung clock : ACLK, SMCLK hay từ nguồn bên TACLK, INCLK thông qua việc lựa chọn bit TASSELx(TACTL) Cụ thể: TASSELx Nguồn lựa chọn 00 TACLK 01 ACLK 10 SMCLK 11 INCLK o Các nguồn xung clock lựa chọn sử dụng trực tiếp cho hoạt động Timer_A hay chia 2, 4, cách sử dụng bit IDx(TACTL) Cụ thể: IDx Nguồn clock chia 00 /1 01 /2 10 /4 11 /8 o 1.7.5 Các chế độ hoạt động Timer_A: TimerA có chế độ hoạt động : Stop, Up, Continuous, Up/Down lựa chọn bit MCx(TACTL).Cụ thể: MCx Mode Description 00 Stop TimerA không hoạt động 01 Up Timer_A đếm lặp lại từ đến giá trị ghi TACCR0 10 Continuous Timer_A đếm lặp lại từ đến giá trị FFFFh 11 Up/Down Timer_A đếm lặp lại từ 0TACCR00 Timer_A hoạt động giá trị bit MCx khác 00 nguồn xung clock chọn cho Timer_A hoạt động Khi TimerA hoạt động chế độ Up Up/Down, timer dừng hoạt động ghi giá trị vào ghi TACCR0 1.7.5.1 Up Mode: Thay đổi giá trị ghi TACCR0 timer hoạt động: + Nếu giá trị hay lớn giá trị cũ hay lớn giá trị tại, Timer đếm đến giá trị + Nếu giá trị bé giá trị tại, timer đếm lại từ giá trị o Cấu hình Timer_A hoạt động chế độ Up: Cho phép ngắt TACCR0 CCIFG:  CCIE =1 ghi TACCTL0 Nạp giá trị vào ghi TACCR0: TACCR0 = xxxx Lựa chọn nguồn xung clock dùng cho Timer_A  thiết lập giá trị bits TASSELx ghi TACTL Thiết lập giá trị chia cho xung clock:  thiết lập bits IDx ghi TACTL (mặc định IDx = 00 -/1) Lựa chọn timer_A hoạt động chế độ Up:  thiết lập MCx = 01 TACTL  Code cho chương trình ngắt… 1.7.5.2 Continuous Mode: Cấu hình Timer_A hoạt động chế độ Continuous: Tương tự 1.7.5.3 Up/Down Mode: - 1.8.1 Phần cứng hoạt động: ADC10 cấu hình ghi ADC10CTL0 ADC10CTL1 ghi thay đổi ENC = 0; bắt đầu lấy mẫu phai đưa ENC = 1; - Nadc = 1023 - Lựa chọn kênh ADC: ADC10AEx bits Voltage Reference Generator: Nguồn nội 1.5V 2.5V Vcc lựa chọn dựa vào bit REFON REF2_5 REFOUT Sample and Conversion Timing: SHTx lựa chọn chu kì lấy mẫu 16 64xADC10CLK, - - Conversion Mode: CÓNEQx 00 01 10 11 - - - MODE Single chanel – Single Conversion Sequence of channels Repeat single channels Repeat Sequence of channels 1.8.2 Mode Single Chanel – Single Conversion Sau bật chuyển đổi ADC10 (ADC10ON) thiết lập kênh lấy ADC (INCHx) Đợi ENC ADC10SC kích hoạt bắt đàu chuyển đổi Lấu mẫu liệu vào tín hiệu SAMPCON mức cao với tốc độ 4/8/16/64x ADC10CLK Quá trình chuyển đổi liệu sau thêm 12xADC10CLK Lưu kết vào ADC10MEM set cờ ADC10IFG thêm ADC10CLK Trong trình thực bược có thay đổi tín hiệu SHS, ENC ADC10SC trình nhảy trạng thái đợi tất tín hiệu set trở lại - 1.8.4 Các bit hay dùng ADC Trong ghi ADCCTL1 1.8.3 Mode Single of Sequence Được phân tích giống mode khác chỗ trình tự kết thúc kênh lựa chọn lấy mẫu hết điều báo tín hiệu EOS.x tín hiệu trình chuyễn đổi kênh xong o o o o o o o o o o o INCHx (4bits) : lựa chọn kênh lấy ADC ADC10DIVx (2bits) : ADC10 Clock Divider ADC10SSELx (2bits): Clock source select Trong ghi ADCCTL0 SREFx (3bits): Chọn nguồn áp tham chiếu ADC10SHTx (2bits): chọn thời gian sample hold ADC10SR (1bits) : tốc độ lấy mẫu (200kbps) 1(150kbps) REFOUT (1bit): Có chọn nguồn tham chiếu hay không REFON (1bit): bật nguồn tham chiếu nội ->REF2_5V (1bit) nguồn nội 1.5V hay 2V ADC10ON: Bật ADC10 ADC10IE: cho phép ngắt ADC10 Trong ghi ADC10AE0 ADC10AE0x (Bit 7-0) cho phép chân ngõ vào ngõ vào Analog Cách cấu hình đơn giản cho ADC hoạt động - - 1.8.5 ADC10 DATA TRANFER CONTROLLER Được kích hoạt giá trị ghi ADC10DTC1 khác không Khi ADC10 chuyên đổi xong giá trị đẩy vao ADC10MEM, chuyển liệu kích hoạt.Mỗi DTC tranfer cần chu kỳ MCLK Có chế độ: One block two block tranfer 1.8.6 ADC10 Interupt Một ngắt vector ngắt kèm với ADC10 Khi DTC không dùng ADC10IFG set trình chuyển đổi ADC xong liệu load vào ADC10MEM Khi dùng DTC ADC10IFG set khi việc chuyển vào nhớ block hoàn thành.Nếu bit GIE ADC10IE set ADC10IFG set tạo ngắt 1.9 UART 1.9.1 Giới thiệu : o Là truyền nhận liệu nối tiếp bất đồng o Khi kết hợp với thiết bị chuyển đổi điện áp khác tạo chuẩn giao tiếp khác ( vd: chuẩn RS232 thông qua MAX232,…) o Dữ liệu đóng gói thành khung truyền trước truyền đi, khung truyền bao gồm : o Start bit (=0): báo cho thiết bị nhận chuẩn bị có liệu truyền đến o Data : phần liệu gửi sau start bit o Parity bit : bit thêm vào để kiểm tra liệu sau truyền o Stop bit : thường bit bit dùng để báo kết thúc khung truyền o Tốc độ baud ( số bit truyền 1s) thiết bị truyền nhận phải giống 1.9.2 Hoạt động: o USCI_UART reset PUC set bit UCSWRST o USCI_UART hoạt động clear bit UCSWRST o Hoạt động nhận liệu UART o Sau clear bit UCSWRST, nhận liệu tốc độ baud sẵn sàng trạng thái chờ o Khi phát start bit trình nhận liệu bắt đầu ngược lại không phát start bit quay trạng thái chờ o Hoạt động truyền liệu UART o Sau clear bit UCSWRST, nhận truyền liệu tốc độ baud sẵn sàng trạng thái chờ o Khi có liệu ghi vào ghi UCAxTXBUF trình truyền liệu bắt đầu o Dữ liệu truyền vào Transmit shift register ghi rỗng tiếp tục truyền sang thiết bị nhận o Cờ UCAxTXIFG set mà UCAxTXBUF sẵn sàng cho liệu o Nếu liệu không ghi vào UCAxTXBUF UART lại tiếp tục vào trạng thái chờ 1.9.3 Thiết lập tốc độ baud : Có chế độ thiết lập, lựa chọn bit UCOS16 BITCLK = tốc độ baud Tốc độ baud tính từ xung BRCLK qua hệ số chia N = (fBRCLK / Baud rate), hệ số N thường số nguyên.Vì để tăng độ xác, chia divider có điều biến modulator o Để thiết lập tốc độ baud với độ xác khác nhau, ta sử dụng bảng o “ Commonly used Baud Rates“ msp430 để thiết lập giá trị cho UCBRx, UCBRFx, UCBRSx 1.9.4 Ngắt UART : +Transmit interrupt o Cờ ngắt UCAxTXIFG set ghi UCAxTXBUF sẵn sàng nhận liệu cần truyền o Để xảy ngắt cờ UCAxTXIE GIE cần set o Cờ ngắt UCAxTXIFG tự động reset liệu ghi vào UCAxTXBUF + Receive interrupt o Cờ ngắt UCAxRXIFG set liệu nhận chứa ghi UCAxTXBUF o Để xảy ngắt cờ UCAxTXIE GIE cần set o Cờ ngắt UCAxRXIFG tự động reset liệu đọc khỏi UCAxRXBUF Thanh ghi : o o o o o o o UCAxCTL0 : ghi điều khiển UCAxCTL1 : ghi điều khiển IE2 : ghi điều khiển ngắt UCAxBRO : ghi tạo hệ số chia tần UCAxBR1 : ghi tạo hệ số chia tần UCA0MCTL : điều khiển modulation Kích hoạt UART : o Việc thay đổi giá trị ghi kể kích hoạt UART với nhiều mode khác nhau, chẳng hạn muốn UART cấu hình : Baud rate = 9600 , nhận liệu nối tiếp truyền từ máy vi tính o Chọn nguồn cung cấp clock thiết lập tốc độ baud theo bảng datasheet o 1.9.5 BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1MHz/104 ~ 9600 , UCBRx = 104 UCA0BR1 = 0; UCA0MCTL = UCBRS0; // UCBRSx = o Bắt đầu kích hoạt UART UCA0CTL1 &= ~UCSWRST; // Turn on UART o Kích hoạt ngắt nhận IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt 1.10 SPI 1.10.1 Giới thiệu : o Cung cấp giao thức nối tiếp đồng kép MCU thiết bị ngoại vi o Giao tiếp SPI thực thông qua bus dây MISO, MOSI, SCK, SS MISO: Master Input Slave Output MOSI: Master Output Slave Input SCK : Serial Clock SS : Slave Select 1.10.2 Hoạt động: o Tín hiệu SCK cung cấp Master nhằm tạo xung đồng cho phép liệu truyền o đọc liệu nhận Tốc độ liệu truyền thay đổi theo thay đổi SCK ( thay đổi tốc độ truyền o o không ảnh hưởng đến liệu ) Master Slave có ghi dịch nối tiếp bên Master bắt đầu việc trao đổi liệu cách truyền byte vào ghi dịch nó, sau o byte liệu đưa sang Slave theo đường tín hiệu MOSI Slave truyền liệu nằm ghi dịch ngược trở Master thông qua đường tín hiệu MISO + Như liệu hai ghi trao đổi với Việc đọc ghi liệu vào Slave diễn lúc nên tốc độ trao đổi liệu diễn nhanh Do đó, giao thức SPI giao thức có hiệu + Chỉ có thiết bị Master cấp xung SCK, liệu không truyền Master không cung cấp xung SCK + Tất thiết bị Slave điều khiển xung nhịp phát từ Master (Slave khả phát xung) + Thường tín hiệu SS dùng để chọn Slave tác động mức thấp để Slave truy cập Tín hiệu phải sử dụng có nhiều Slave hệ thống thường không sử dụng đến mạch có Slave 1.10.3 Thanh ghi ảnh hưởng SPI + USICKCTL : USI clock control register + USICNT : USI bit counter register + USICTL0 : USI control register + USICTL1 : USI control register 1.10.4 Kích hoạt SPI + Việc thay đổi giá trị ghi kể kích hoạt SPI với nhiều mode khác nhau, chẳng hạn muốn SPI cấu hình : SPI Master + xung clock ACLK / + USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; + USICTL1 |= USICKPH + USIIE; + USICKCTL = USIDIV_2 + USISSEL_1; // chia 2, ACLK + USICTL0 &= ~USISWRST; + USICNT = 8; 1.10.5 Ngắt SPI : + USIIFG set bit USICNTx = (tự động giảm truyền hết liệu tự nạp giá trị 0) + USIIFG bị xóa bit USICNTx > USIIFGCC = ,hoặc xóa trực tiếp code Chương 2: Thực hành 2.1 PORT1 : //****************************************************************************** // MSP430G2xx1 Demo - Software Poll P1.4, Set P1.0 if P1.4 = // // Description: Poll P1.4 in a loop, if hi P1.0 is set, if low, P1.0 reset // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430F2x32 // // /|\| XIN|// || | // |RST XOUT|// /|\ | | // o |P1.4 P1.0| >LED // \|/ // //****************************************************************************** #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction while (1) // Test P1.4 { if ((0x10 & P1IN)) P1OUT |= 0x01; // if P1.4 set, set P1.0 else P1OUT &= ~0x01; // else reset } } 2.2 PORT1 & INTERRUPT: //****************************************************************************** // MSP430G2xx1 Demo - Software Port Interrupt Service on P1.4 from LPM4 // // Description: A hi/low transition on P1.4 will trigger P1_ISR which, // toggles P1.0 Normal mode is LPM4 ~ 0.1uA LPM4 current can be measured // with the LED removed, all unused P1.x/P2.x configured as output or inputs // pulled high or low, and ensure the P1.4 interrupt input does not float // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430G2x32 // // /|\| XIN|// || | // |RST XOUT|// /|\ | | // o |P1.4 P1.0| >LED // \|/ //****************************************************************************** #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction P1IE |= 0x10; // P1.4 interrupt enabled P1IES |= 0x10; // P1.4 Hi/lo edge P1IFG &= ~0x10; // P1.4 IFG cleared _BIS_SR(LPM4_bits + GIE); // Enter LPM4 w/interrupt } // Port interrupt service routine #pragma vector=PORT1_VECTOR interrupt void Port_1(void) { P1OUT ^= 0x01; // P1.0 = toggle P1IFG &= ~0x10; // P1.4 IFG cleared } 2.3 Ví dụ hoạt động Timer_A : #include void ConfigWDT(void); void ConfigClocks(void); void ConfigLEDs(void); void ConfigTimerA2(void); void main(void) { ConfigWDT(); ConfigClocks(); ConfigPINs(); ConfigTimerA2(); _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt } void ConfigWDT(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer } //Configure Clock void ConfigClocks(void) { if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) FaultRoutine(); // If calibration data is erased // run FaultRoutine() BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO IFG1 &= ~OFIFG; // Clear OSCFault flag BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8 } void FaultRoutine(void) { P1OUT = BIT0; // P1.0 on (red LED) while(1); // TRAP } void ConfigPINs(void) { P1DIR = BIT6 + BIT0; P1OUT = 0; } // P1.6 and P1.0 outputs // LEDs of void ConfigTimerA2(void) { CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 62500; TACTL = TASSEL_2 + MC_2; // SMCLK, contmode } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR interrupt void Timer_A (void) { P1OUT ^= 0x01; // Toggle P1.0 CCR0 += 62500; // Add Ofset to CCR0 } Sơ đồ nguyên lý: Trong ví dụ trên, Timer_A hoạt động chế độ continuous, xảy ngắt giá trị ghi TAR đếm đến giá trị ghi TACCR0, chương trình phục vụ ngắt lật trạng thái chân P1.0 làm đèn led sáng tắt theo Với chế độ hoạt động khác Timer_A, ta cần thay đổi cấu hình chương trình ConfigTimerA2 2.4 PWM: CCR0 = 1001; CCTL1 = OUTMOD_7; CCTL0 = OUTMOD_4; CCR1 = 501; TACTL = TASSEL_2 + MC_1; #include void FaultRoutine(void); void ConfigWDT(void); void ConfigClocks(void); void ConfigPINs(void); void ConfigTimerA2(void); void main(void) { ConfigWDT(); ConfigClocks(); ConfigPINs(); ConfigTimerA2(); _BIS_SR(LPM0_bits); } // Enter LPM0 w/ interrupt void ConfigWDT(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer } //Configure Clock void ConfigClocks(void) { if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) FaultRoutine(); // If calibration data is erased // run FaultRoutine() BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO IFG1 &= ~OFIFG; // Clear OSCFault flag BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8 } void FaultRoutine(void) { P1OUT = BIT0; while(1); } void ConfigPINs(void) { P1DIR = BIT2 + BIT1; P1SEL = BIT2 + BIT1; } void ConfigTimerA2(void) { // P1.0 on (red LED) // TRAP // P1.2 and P1.1 outputs // P1.2 < > OUT1 and P1.1 < > OUT0 Sơ đồ nguyên lý: // PWM Period // CCR1 reset/set // CCR0 toggle // CCR1 PWM duty cycle 50% // SMCLK, Up mode, No divide Trong ví dụ trên, ta tạo xung PWM chân P1.1 P1.2 Xung PWM chân P1.1 lối OUT0 (thanh ghi TACCR0) hoạt động mode 4(toggle) Xung PWM chân P1.2 lối OUT1 (thanh ghi TACCR1) hoạt động mode (reset/set), độ rộng 2.5 ADC10 & Interupt //****************************************************************************** // MSP430G2x31 Demo - ADC10, Sample A1, AVcc Ref, Set P1.0 if > 0.5*AVcc // // Description: A single sample is made on A1 with reference to AVcc // Software sets ADC10SC to start sample and conversion - ADC10SC // automatically cleared at EOC ADC10 internal oscillator times sample (16x) // and conversion In Mainloop MSP430 waits in LPM0 to save power until ADC10 // conversion complete, ADC10_ISR will force exit from LPM0 in Mainloop on // reti If A1 > 0.5*AVcc, P1.0 set, else reset // // MSP430F2x32 // // /|\| XIN |// || | // |RST XOUT|// | | // > -|P2.1/A1 P1.1| >LED // //****************************************************************************** #include "msp430F2132.h" SD O Q Q Q Q Q Q Q Q Phần thực hành giao tiếp SPI : 15 2.6 H G F E D C B A 74H C 595 // Giao tiếp msp430g2232 với 74hc595 qua chuẩn giao tiếp SPI // Dữ liệu từ msp430 truyền qua 595 để tạo hiệu ứng sáng led led đoạn // Phần cứng thực kit launch pad theo sơ đồ hình bên 10 VC C Vcc1 p g f e d c b a #include int i=0; Vcc2 S e g m e n t m in i VC C 14 SD I 11 12 SR C LK R C LK G C LR 13 10 void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled ADC10CTL1 = INCH_1; // input A1 ADC10AE0 |= 0x02; // PA.1 ADC option select P1DIR |= BIT1 + BIT2; // Set P1.1, 1.2 to output direction for (;;) { P1OUT |= 0x04; delay_cycles(1000); P1OUT &= ~0x04; delay_cycles(1000); ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit if (ADC10MEM < 0x1FF) P1OUT &= ~0x02; // Clear P1.1 LED off M SP430G 2231 C hot else P C lk P D a ta P1OUT |= 0x02; // Set P1.1 LED on P } VC C } // ADC10 interrupt service routine #pragma vector=ADC10_VECTOR interrupt void ADC10_ISR(void) { bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) G N D VC C U U 16 int b[10]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF}; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= 0x01; // P1.0 is output USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master USICTL1 |= USICKPH + USIIE; // Counter interrupt, flag remains set USICKCTL = USIDIV_2 + USISSEL_1; // /4 ACLK USICTL0 &= ~USISWRST; // USI released for operation USISRL = b[i]; USICNT = 8; // init-load counter bits _BIS_SR(LPM3_bits + GIE); // Enter LPM3 + interrupt } #pragma vector=USI_VECTOR // USI interrupt service routine interrupt void USI_ISR(void) { // create positive edge clock on p1.0 P1OUT &= ~0x01; delay_cycles(100000); P1OUT |= 0x01; USISRL = b[i] ; if(i==5) { i=0; } else{ i++; } USICNT = 8; // re-load counter } 2.7 Phần thực hành giao tiếp UART // Giao tiếp msp430g2553 với máy vi tính qua chuẩn giao tiếp UART // Dữ liệu truyền từ máy vi tính xuống msp430 phần mềm Advanced Serial Port Terminal // Nếu liệu truyền số, msp430 xử lý bật tắt led kit launch pad // Nếu liệu chữ msp430 truyền ngược lại cho máy vi tính để hiển thị lên hình Advanced Serial Port Terminal // Phần cứng thực kit launch pad rev 1.4 , ý ghép nối jump để thực UART kit #include "msp430g2553.h" #define UART_TXD 0x02 #define UART_RXD 0x04 unsigned int t1; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2; UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1MHz / 104 ~ 9600 UCA0BR1 = 0; UCA0MCTL = UCBRS0; // Modulation = UCA0CTL1 &= ~UCSWRST; // Turn on UART (USCI) IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt P1DIR = 0xFF & ~UART_RXD; // Set all pins but RXD to output P1OUT = 0x00 ; bis_SR_register(LPM0_bits+GIE); //Enable ngat ngoai vi t1=0; } #pragma vector=USCIAB0RX_VECTOR interrupt void USCI0RX_ISR(void) { if(UCA0RXBUF > '/' && UCA0RXBUF < ':') t1 = t1*10 + (UCA0RXBUF-'0') ; else { if(UCA0RXBUF == ':') { switch(t1) { case 11: P1OUT |= BIT0; break; // bat led p1.0 case 12: P1OUT |= BIT6; break; // bat led xanh p1.6 case 91: P1OUT &=~ BIT0; break; // tat led p1.0 case 92: P1OUT &=~ BIT6; break; // tat led xanh p1.6 default: break; } t1 = ; } else while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready? if(UCA0RXBUF != ':') UCA0TXBUF = UCA0RXBUF; } } 2.8 WDT //****************************************************************************** // MSP430G2xx1 Demo - WDT, Toggle P1.0, Interval Overflow ISR, DCO SMCLK // // Description: Toggle P1.0 using software timed by the WDT ISR Toggle rate // is approximately 30ms based on default DCO/SMCLK clock source // used in this example for the WDT // ACLK = n/a, MCLK = SMCLK = default // // MSP430G2xx2 // // /|\| XIN|// || | // |RST XOUT|// | | // | P1.0| >LED // //****************************************************************************** #include void main(void) { WDTCTL = WDT_MDLY_32; IE1 |= WDTIE; P1DIR |= 0x01; _BIS_SR(LPM0_bits + GIE); // Set Watchdog Timer interval to ~30ms // Enable WDT interrupt // Set P1.0 to output direction // Enter LPM0 w/ interrupt } // Watchdog Timer interrupt service routine #pragma vector=WDT_VECTOR interrupt void watchdog_timer(void) { P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR } [...]... reset // // MSP430F2x32 // // /|\| XIN |// || | // |RST XOUT|// | | // > -|P2.1/A1 P1.1| >LED // //****************************************************************************** #include "msp430F2132.h" SD O Q Q Q Q Q Q Q Q Phần thực hành giao tiếp SPI : 7 6 5 4 3 2 1 15 2.6 9 H G F E D C B A 74H C 595 0 // Giao tiếp msp430g2232 với 74hc595 qua chuẩn giao tiếp SPI // Dữ liệu từ msp430 sẽ truyền... 8; // re-load counter } 2.7 Phần thực hành giao tiếp UART // Giao tiếp msp430g2553 với máy vi tính qua chuẩn giao tiếp UART // Dữ liệu được truyền từ máy vi tính xuống msp430 bằng phần mềm Advanced Serial Port Terminal // Nếu dữ liệu truyền là số, thì msp430 sẽ xử lý và bật tắt các led trên kit launch pad // Nếu dữ liệu là chữ thì msp430 sẽ truyền ngược lại cho máy vi tính để hiển thị lên màn hình của... //****************************************************************************** // MSP430G2xx1 Demo - Software Poll P1.4, Set P1.0 if P1.4 = 1 // // Description: Poll P1.4 in a loop, if hi P1.0 is set, if low, P1.0 reset // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430F2x32 // // /|\| XIN|// || | // |RST XOUT|// /|\ | | // o |P1.4 P1.0| >LED // \|/ // //****************************************************************************** #include ... //****************************************************************************** // MSP430G2x31 Demo - ADC10, Sample A1, AVcc Ref, Set P1.0 if > 0.5*AVcc // // Description: A single sample is made on A1 with reference to AVcc // Software sets ADC10SC to start sample and conversion - ADC10SC // automatically cleared at EOC ADC10 internal oscillator times sample (16x) // and conversion In Mainloop MSP430 waits in LPM0 to save power until ADC10... thành các khung truyền trước khi truyền đi, một khung truyền bao gồm : o Start bit (=0): báo cho thiết bị nhận chuẩn bị có dữ liệu truyền đến o Data : là phần dữ liệu gửi đi ngay sau start bit o Parity bit : là bit được thêm vào để kiểm tra dữ liệu sau khi truyền o Stop bit : thường là 1 bit hoặc 2 bit dùng để báo kết thúc một khung truyền o Tốc độ baud ( số bit truyền trong 1s) ở cả 2 thiết bị truyền... or low, and ensure the P1.4 interrupt input does not float // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430G2x32 // // /|\| XIN|// || | // |RST XOUT|// /|\ | | // o |P1.4 P1.0| >LED // \|/ //****************************************************************************** #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0... //****************************************************************************** // MSP430G2xx1 Demo - WDT, Toggle P1.0, Interval Overflow ISR, DCO SMCLK // // Description: Toggle P1.0 using software timed by the WDT ISR Toggle rate // is approximately 30ms based on default DCO/SMCLK clock source // used in this example for the WDT // ACLK = n/a, MCLK = SMCLK = default // // MSP430G2xx2 // // /|\| XIN|// || | // |RST XOUT|//... độ hoạt động khác của Timer_A, ta chỉ cần thay đổi cấu hình trong chương trình con ConfigTimerA2 2.4 PWM: CCR0 = 1001; CCTL1 = OUTMOD_7; CCTL0 = OUTMOD_4; CCR1 = 501; TACTL = TASSEL_2 + MC_1; #include void FaultRoutine(void); void ConfigWDT(void); void ConfigClocks(void); void ConfigPINs(void); void ConfigTimerA2(void); void main(void) { ConfigWDT(); ConfigClocks(); ConfigPINs(); ConfigTimerA2();... hay dùng trong ADC Trong thanh ghi ADCCTL1 1.8.3 Mode Single of Sequence Được phân tích giống mode trên nhưng khác ở chỗ là quá trình tự kết thúc khi các kênh lựa chọn đã được lấy mẫu hết điều này được báo bằng tín hiệu EOS.x nếu tín hiệu này bằng 1 quá trình chuyễn đổi các kênh đã xong o o o o o o o o o o o INCHx (4bits) : lựa chọn kênh lấy ADC ADC10DIVx (2bits) : ADC10 Clock Divider ADC10SSELx (2bits):... ((0x10 & P1IN)) P1OUT |= 0x01; // if P1.4 set, set P1.0 else P1OUT &= ~0x01; // else reset } } 2.2 PORT1 & INTERRUPT: //****************************************************************************** // MSP430G2xx1 Demo - Software Port Interrupt Service on P1.4 from LPM4 // // Description: A hi/low transition on P1.4 will trigger P1_ISR which, // toggles P1.0 Normal mode is LPM4 ~ 0.1uA LPM4 current can ... #include "msp430F2132.h" SD O Q Q Q Q Q Q Q Q Phần thực hành giao tiếp SPI : 15 2.6 H G F E D C B A 74H C 595 // Giao tiếp msp430g2232 với 74hc595 qua chuẩn giao tiếp SPI // Dữ liệu từ msp430 truyền... UART // Giao tiếp msp430g2553 với máy vi tính qua chuẩn giao tiếp UART // Dữ liệu truyền từ máy vi tính xuống msp430 phần mềm Advanced Serial Port Terminal // Nếu liệu truyền số, msp430 xử lý bật... (=0): báo cho thiết bị nhận chuẩn bị có liệu truyền đến o Data : phần liệu gửi sau start bit o Parity bit : bit thêm vào để kiểm tra liệu sau truyền o Stop bit : thường bit bit dùng để báo kết

Ngày đăng: 22/11/2015, 16:15

Xem thêm: Báo cáo tiểu luận MSP430

TỪ KHÓA LIÊN QUAN

w