Mục lục:

Bộ đếm giây MSP430: 10 bước
Bộ đếm giây MSP430: 10 bước

Video: Bộ đếm giây MSP430: 10 bước

Video: Bộ đếm giây MSP430: 10 bước
Video: Đếm sản phẩm dùng MSP430G2553 hiện giá trị đếm được lên lcd 16x2 | Đam mê điện tử 2024, Tháng mười một
Anonim
Bộ đếm giây MSP430
Bộ đếm giây MSP430

Chào mừng! Tạo bộ đếm giây: Sử dụng CCStudio 8 và MSP430F5529 cho dự án.

Ngôn ngữ C để viết mã bộ điều khiển vi mô. Áp dụng Chế độ nguồn điện thấp, Bộ hẹn giờ và Ngắt. Đầu ra được hiển thị qua 7 Segment.

Bước 1: Thông tin chi tiết

Cái nhìn sâu sắc
Cái nhìn sâu sắc

Hãy bắt đầu nào!

Khởi tạo bộ đếm thời gian cơ quan giám sát sang trạng thái TẮT bằng cách sử dụng mật khẩu cần thiết cho bộ định thời cơ quan giám sát (Nó giúp kiểm tra các vòng lặp vô hạn, giữ cho bộ xử lý an toàn).

#bao gồm

/** * C chính */

int main (void)

{

WDTCTL = WDTPW | WDTHOLD; // dừng bộ đếm thời gian của cơ quan giám sát

trả về 0;

}

Bước 2: Khởi tạo cổng

{

P3DIR = 0xFF; // P3DIR = 0x00;

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 cho chúng ta biết rằng toàn bộ PORT-3 được khởi tạo để nhận đầu vào.

P3DIR | = 0xFF cho chúng ta biết rằng toàn bộ PORT-3 được khởi tạo để đưa ra kết quả đầu ra.

P3DIR | = 0x01 chỉ có chân P3.0 được khởi tạo để xuất trong PORT-3. Điều này tuân theo ánh xạ Cổng thập lục phân.

P4REN | = 0xFF, điều này chỉ ra rằng các chân của PORT-4 đã bật điện trở kéo lên / xuống.

Để chọn chúng giữa Kéo lên hoặc Kéo xuống, lệnh P $ OUT | = 0xFF được sử dụng.

Nếu 0xFF được sử dụng, chúng định cấu hình làm điện trở Kéo LÊN và nếu 0x00, chúng định cấu hình là Kéo XUỐNG.

Bước 3: Công suất cực thấp

MSP430F5529 cho phép chúng tôi giảm tổn thất điện năng từ bộ xử lý. Điều này rất hữu ích trong các ứng dụng độc lập.

Điều này yêu cầu khai báo tất cả các pin hoặc Cổng để xuất.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Bước 4: HẸN GIỜ

Sử dụng bộ hẹn giờ để tạo độ trễ một giây. Điều này sử dụng SMCLK 1MHz, đồng thời cũng chạy ở Chế độ nguồn điện thấp (trong bước tiếp theo, sau khi quá trình đếm của nó bị gián đoạn từ LPM). Quá trình này tiết kiệm điện năng và gánh nặng cho bộ xử lý

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Giá trị là 999, vì cần thêm một lần đếm nữa để quay trở lại 0 trong thanh ghi hẹn giờ.

Bước 5: Chế độ nguồn điện thấp

_BIS_SR (LPM0_bits + GIE);

Điều này cho phép Kích hoạt ngắt chung (GIE) và đặt CPU đến LPM0, nơi MCLK hỗ trợ cpu bị tắt và SMCLK và ACLK chạy để giữ cho bộ đếm thời gian hoạt động. vì vậy chúng ta có thể thấy CPU bị tắt, ở đó tiết kiệm điện năng.

Bước 6: ISR-Timer

ISR-Timer
ISR-Timer

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

if (z> delay)

{

P3OUT = mã [x];

P6OUT = mã1 [y];

x ++;

nếu (x == 10)

{

x = 0;

y ++;

}

nếu (y == 6)

y = 0;

z = 0;

}

}

vectơ pragma dành cho biểu diễn ISR trong C embd.

code [x] và code1 [y] là các mảng chứa các giá trị đầu ra cho hai bảy đoạn, để hiển thị bộ đếm 60 giây.

Bước 7: Ngắt phần cứng

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Ở đây P2.1 được khai báo là ngắt phần cứng, nếu nhấn nút, bộ đếm sẽ đặt lại giá trị.

chương trình còn lại được viết bên trong ISR của ngắt này.

Bước 8: ISR- Đặt lại / Nút nhấn

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = mã [x];

P6OUT = mã1 [y];

v ++;

cho (i = 0; i

{

P1OUT | = BIT0; //P1.0 = chuyển đổi

_ Xe_may_day (1048576);

P1OUT & = ~ BIT0; // P1.0 = chuyển đổi

_ Xe_may_may (1048576);

}

ISR này đặt lại bộ đếm và đếm số lần phần còn lại được nhấn.

(Đây là màn hình được thực hiện thông qua bật tắt đèn led, cũng có thể sử dụng một mảng và bộ đếm thời gian khác, để hiển thị các giá trị đó dưới dạng đầu ra trong 7 phân đoạn).

Bước 9: MÃ

MÃ SỐ
MÃ SỐ

#bao gồm

#define độ trễ 1000

mã char = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

mã char1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

biến không dấu int x = 0, y = 0, z = 0;

biến không dấu int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // dừng bộ đếm thời gian của cơ quan giám sát

P7DIR | = 0xFF;

P7OUT | = 0x00;

P8DIR | = 0xFF;

P8OUT | = 0x00;

P4DIR | = 0xFF;

P4OUT | = 0x00;

P5DIR | = 0xFF;

P5OUT | = 0x00;

P1DIR = 0xFF;

P3DIR = 0xFF;

P6DIR = 0xFF;

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

_BIS_SR (LPM0_bits + GIE);

}

// Quy trình dịch vụ ngắt Timer A0

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

if (z> delay)

{

P3OUT = mã [x];

P6OUT = mã1 [y];

x ++;

nếu (x == 10)

{

x = 0;

y ++;

}

nếu (y == 6)

y = 0;

z = 0;

}

}

// Quy trình dịch vụ ngắt phần cứng

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = mã [x];

P6OUT = mã1 [y];

v ++;

cho (i = 0; i

{P1OUT | = BIT0; // P1.0 = chuyển đổi

_ Xe_may_day (1048576);

P1OUT & = ~ BIT0; // P1.0 = chuyển đổi

_ Xe_may_may (1048576);

}

}

Bước 10: Mã tham chiếu

Mã tham chiếu
Mã tham chiếu

Kho lưu trữ GitHub

Đề xuất: