สารบัญ:

ตัวนับ MSP430 วินาที: 10 ขั้นตอน
ตัวนับ MSP430 วินาที: 10 ขั้นตอน

วีดีโอ: ตัวนับ MSP430 วินาที: 10 ขั้นตอน

วีดีโอ: ตัวนับ MSP430 วินาที: 10 ขั้นตอน
วีดีโอ: 12.4 - MSP430 Timers - Generating PWM Signals using Timer Compares 2024, พฤศจิกายน
Anonim
MSP430 วินาทีเคาน์เตอร์
MSP430 วินาทีเคาน์เตอร์

ยินดีต้อนรับ! การสร้างตัวนับวินาที: การใช้ CCStudio 8 และ MSP430F5529 สำหรับโครงการ

ภาษา C เพื่อเข้ารหัสไมโครคอนโทรลเลอร์ การใช้โหมดพลังงานต่ำ ตัวจับเวลา และอินเตอร์รัปต์ เอาต์พุตจะแสดงผ่าน 7 Segment

ขั้นตอนที่ 1: ข้อมูลเชิงลึก

ข้อมูลเชิงลึก
ข้อมูลเชิงลึก

เอาล่ะ!

เริ่มต้นตัวจับเวลาจ้องจับผิดเป็นสถานะ OFF โดยใช้รหัสผ่านที่จำเป็นสำหรับตัวจับเวลาจ้องจับผิด (ช่วยในการตรวจสอบการวนซ้ำที่ไม่สิ้นสุด ทำให้โปรเซสเซอร์ปลอดภัย)

#รวม

/** * main.c */

int หลัก (เป็นโมฆะ)

{

WDTCTL = WDTPW | WDTHOLD; // หยุดนาฬิกาจับเวลา

กลับ 0;

}

ขั้นตอนที่ 2: การเริ่มต้นพอร์ต

{

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

P6DIR=0xFF;

P4DIR |=0x00;

P4REN |=0xFF;

P4OUT |=0xFF;

}

P3DIR |=0x00 บอกเราว่า PORT-3 ทั้งหมดถูกเตรียมใช้งานเพื่อรับอินพุต

P3DIR |=0xFF บอกเราว่า PORT-3 ทั้งหมดถูกเตรียมใช้งานเพื่อให้เอาต์พุต

P3DIR |=0x01 เฉพาะพิน P3.0 เท่านั้นที่เริ่มต้นเพื่อส่งออกใน PORT-3 สิ่งนี้เป็นไปตามการแมปพอร์ตเลขฐานสิบหก

P4REN |=0xFF แสดงว่าพินของ PORT-4 เปิดใช้งานตัวต้านทานแบบดึงขึ้น/ลง

ในการเลือกระหว่าง Pull UP หรือ Pull DOWN จะใช้คำสั่ง P$OUT |=0xFF

หากใช้ 0xFF จะกำหนดค่าเป็นตัวต้านทานแบบดึงขึ้น และหาก 0x00 จะถูกกำหนดค่าเป็นแบบดึงลง

ขั้นตอนที่ 3: พลังงานต่ำเป็นพิเศษ

MSP430F5529 ช่วยให้เราลดการสูญเสียพลังงานจากโปรเซสเซอร์ สิ่งนี้มีประโยชน์ในแอปพลิเคชันแบบสแตนด์อโลน

สิ่งนี้เรียกร้องให้มีการประกาศพินหรือพอร์ตทั้งหมดเพื่อส่งออก

{

P7DIR |= 0xFF;

P6DIR |= 0xFF;

P5DIR |= 0xFF;

P4DIR |= 0xFF;

P3DIR |= 0xFF;

P2DIR |= 0xFF;

P1DIR |= 0xFF;

}

ขั้นตอนที่ 4: TIMER

การใช้ตัวจับเวลาสำหรับการสร้างการหน่วงเวลาหนึ่งวินาที สิ่งนี้ใช้ SMCLK ที่ 1MHz และตัวจับเวลาจะทำงานในโหมดพลังงานต่ำ (ในขั้นตอนต่อไป หลังจากนับถูกขัดจังหวะจาก LPM) กระบวนการนี้ช่วยประหยัดพลังงานและภาระของโปรเซสเซอร์

TA0CCTL0=CCIE;

TA0CCR0=999;

TA0CTL = TASSEL_2 + MC_1;

ค่าคือ 999 เนื่องจากต้องใช้เวลาอีกหนึ่งครั้งเพื่อย้อนกลับเป็นศูนย์ในการลงทะเบียนตัวจับเวลา

ขั้นตอนที่ 5: โหมดพลังงานต่ำ

_BIS_SR(LPM0_bits+GIE);

สิ่งนี้จะเปิดใช้งาน General interrupt Enable (GIE) และทำให้ CPU เป็น LPM0 โดยที่ MCLK ที่รองรับ cpu ปิดอยู่ และ SMCLK และ ACLK จะทำงานเพื่อให้ตัวจับเวลาทำงานต่อไป ดังนั้นเราจึงสามารถเห็นได้ว่า CPU ถูกปิด โดยการประหยัดพลังงาน

ขั้นตอนที่ 6: ISR-Timer

ISR-ตัวจับเวลา
ISR-ตัวจับเวลา

#pragma vector=TIMER0_A0_VECTOR

_interrupt โมฆะ Timer_A (โมฆะ)

{

z++;

ถ้า(z>ล่าช้า)

{

P3OUT=รหัส[x];

P6OUT=code1[y];

x++;

ถ้า(x==10)

{

x=0;

ย++;

}

ถ้า(y==6)

y=0;

z=0;

}

}

เวกเตอร์ Pragma ใช้สำหรับการแสดง ISR ใน C embd

code[x] และ code1[y] คืออาร์เรย์ที่มีค่าเอาต์พุตสำหรับสองเซ็กเมนต์เจ็ดส่วน สำหรับการแสดงตัวนับ 60 วินาที

ขั้นตอนที่ 7: ฮาร์ดแวร์ขัดจังหวะ

P2DIR=0x00;

P2REN=0x02;

P2OUT=0x02;

P2IE |=BIT1;

P2IES |=BIT1;

P2IFG &= ~BIT1;

ที่นี่ P2.1 ถูกประกาศเป็นการขัดจังหวะของฮาร์ดแวร์ หากกดปุ่ม ตัวนับจะรีเซ็ตเป็นค่า

โปรแกรมที่เหลือเขียนอยู่ใน ISR ของการขัดจังหวะนี้

ขั้นตอนที่ 8: ISR- รีเซ็ต/ กดปุ่ม

#pragma vector=PORT2_VECTOR

_interrupt โมฆะ port_2(โมฆะ)

{

P2IFG &=~BIT1;

x=0; y=0;

P3OUT=รหัส[x];

P6OUT=code1[y];

วี++;

สำหรับ(i=0;i

{

P1OUT |= BIT0; //P1.0 = สลับ

_delay_cycles(1048576);

P1OUT &=~BIT0; // P1.0 = สลับ

_delay_cycles(1048576);

}

ISR นี้จะรีเซ็ตตัวนับ และนับจำนวนครั้งที่กดที่เหลือ

(นี่คือการแสดงผลโดยใช้การสลับแบบ LED นอกจากนี้ยังสามารถใช้อาร์เรย์และตัวจับเวลาอื่นเพื่อแสดงค่าเหล่านั้นเป็นเอาต์พุตใน 7 เซ็กเมนต์)

ขั้นตอนที่ 9: รหัส

รหัส
รหัส

#รวม

#define ดีเลย์ 1000

รหัสถ่าน={0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

รหัสถ่าน1={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

int ที่ไม่ได้ลงนามที่ระเหยได้ x=0, y=0, z=0;

int ที่ไม่ได้ลงนามผันผวน v=0, i=0;

เป็นโมฆะหลัก ()

{

WDTCTL = WDTPW | WDTHOLD; // หยุดนาฬิกาจับเวลา

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);

}

// ตัวจับเวลา A0 ขัดจังหวะบริการประจำ

#pragma vector=TIMER0_A0_VECTOR

_interrupt โมฆะ Timer_A (โมฆะ)

{

z++;

ถ้า(z>ล่าช้า)

{

P3OUT=รหัส[x];

P6OUT=code1[y];

x++;

ถ้า(x==10)

{

x=0;

ย++;

}

ถ้า(y==6)

y=0;

z=0;

}

}

// ฮาร์ดแวร์ขัดจังหวะบริการรูทีน

#pragma vector=PORT2_VECTOR

_interrupt โมฆะ port_2(โมฆะ)

{

P2IFG &=~BIT1;

x=0;

y=0;

P3OUT=รหัส[x];

P6OUT=code1[y];

วี++;

สำหรับ(i=0;i

{ P1OUT |= BIT0; // P1.0 = สลับ

_delay_cycles(1048576);

P1OUT &=~BIT0; // P1.0 = สลับ

_delay_cycles(1048576);

}

}

ขั้นตอนที่ 10: รหัสอ้างอิง

รหัสอ้างอิง
รหัสอ้างอิง

GitHub Repository

แนะนำ: