Mündəricat:

MSP430 Saniyə Sayacı: 10 addım
MSP430 Saniyə Sayacı: 10 addım

Video: MSP430 Saniyə Sayacı: 10 addım

Video: MSP430 Saniyə Sayacı: 10 addım
Video: Лекция 6. Обзор контроллера MSP-430 2024, Noyabr
Anonim
MSP430 Saniyə Sayacı
MSP430 Saniyə Sayacı

Xoş gəldiniz! Saniyələrin sayğacının hazırlanması: Layihə üçün CCStudio 8 və MSP430F5529 istifadə olunur.

Mikro nəzarətçini kodlaşdırmaq üçün C dili. Aşağı Güc Modu, Taymer və Fasilələrin tətbiqi. Çıxış 7 Segment vasitəsilə göstərilir.

Addım 1: Anlayış

Anlayış
Anlayış

Başlayaq!

Gözətçi taymeri üçün lazım olan şifrəni istifadə edərək gözətçi taymerini OFF vəziyyətinə salın (Bu, prosessoru təhlükəsiz saxlayaraq sonsuz döngələri yoxlamağa kömək edir).

#daxil edin

/** * əsas.c */

int main (boş)

{

WDTCTL = WDTPW | WDTHOLD; // gözətçi taymerini dayandırın

qaytarma 0;

}

Addım 2: Limanın işə salınması

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 bizə PORT-3-ün hamısının giriş əldə etmək üçün başladığını bildirir.

P3DIR | = 0xFF bizə bildirir ki, PORT-3-ün hamısı nəticələr vermək üçün işə salınır.

P3DIR | = 0x01, yalnız P3.0 pimi PORT-3-də çıxarmaq üçün işə salınır. Bu, onaltılıq bir Port xəritəsini izləyir.

P4REN | = 0xFF, bu, PORT-4 pinlərinin yuxarı/aşağı müqavimətlərinin aktiv olduğunu göstərir.

Onları Pull UP və ya POW DOWN arasında seçmək üçün P $ OUT | = 0xFF təlimatı istifadə olunur.

0xFF istifadə edilərsə, Pull UP rezistorları kimi konfiqurasiya edirlər və 0x00 isə POW DOWN olaraq konfiqurasiya edirlər.

Addım 3: Ultra Aşağı Güc

MSP430F5529, prosessordan enerji itkisini azaltmağa imkan verir. Bu müstəqil tətbiqlərdə faydalıdır.

Bu, bütün pinlərin və ya Limanların çıxışı elan edilməsini tələb edir.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Addım 4: TIMER

Bir saniyənin gecikməsi üçün taymerin istifadəsi. Bu, 1MHz olan SMCLK -dən istifadə edir, həmçinin taymer Aşağı Güc rejimində işləyir (növbəti addımda LPM -dən kəsildikdən sonra). Bu proses prosessorun gücünü və yükünü azaldır

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Taymer qeydində sıfıra dönmək üçün daha bir say lazım olduğu üçün dəyərlər 999 -dur.

Addım 5: Aşağı Güc rejimi

_BIS_SR (LPM0_bits+GIE);

Bu, Ümumi kəsilmə Enable (GIE) imkan verir və CPU -nu CPU -nu dəstəkləyən MCLK -nin söndürüldüyü LPM0 -a və timerin işləməsini təmin edən SMCLK və ACLK işinə qoyur. buna görə də enerjiyə qənaət edərək CPU -nun söndürüldüyünü görə bilərik.

Addım 6: ISR-Taymer

ISR-Taymer
ISR-Taymer

#praqma vektoru = TIMER0_A0_VECTOR

_ fasilə boşluğu Timer_A (boş)

{

z ++;

əgər (z> gecikmə)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

əgər (x == 10)

{

x = 0;

y ++;

}

əgər (y == 6)

y = 0;

z = 0;

}

}

pragma vektoru C embd -də ISR -in təqdimatı üçündür.

code [x] və code1 [y], 60 saniyə sayğacını göstərmək üçün iki yeddi seqment üçün çıxış dəyərləri olan seriallardır.

Addım 7: Hardware Interrupt

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Burada P2.1 bir hardware kəsilməsi olaraq elan edilir, düyməyə basıldığı təqdirdə sayğac yenidən dəyərinə qayıdır.

qalan proqram bu fasilənin ISR daxilində yazılmışdır.

Addım 8: ISR- Sıfırlama/ Push Button

#praqma vektoru = PORT2_VECTOR

_ ara vermə boşluğu port_2 (boş)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

üçün (i = 0; i

{

P1OUT | = BIT0; //P1.0 = keçid

_gecikmeli dövrlər (1048576);

P1OUT & = ~ BIT0; // P1.0 = keçid

_gecikmeli dövrlər (1048576);

}

Bu ISR sayğacı sıfırlayır və qalan hissənin neçə dəfə basıldığını hesablayır.

(Budur, ekran keçid açarı ilə edilir, bu dəyərləri 7 seqmentdə çıxış olaraq göstərmək üçün başqa bir sıra və taymerdən istifadə edə bilərsiniz).

Addım 9: KOD

KOD
KOD

#daxil edin

#gecikməni 1000 təyin edin

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

char kodu1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

uçucu işarəsiz int x = 0, y = 0, z = 0;

uçucu işarəsiz int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // gözətçi taymerini dayandırın

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

}

// Taymer A0 fasilə xidmət qaydası

#praqma vektoru = TIMER0_A0_VECTOR

_ fasilə boşluğu Timer_A (boş)

{

z ++;

əgər (z> gecikmə)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

əgər (x == 10)

{

x = 0;

y ++;

}

əgər (y == 6)

y = 0;

z = 0;

}

}

// Avadanlıqların kəsilməsi xidməti

#praqma vektoru = PORT2_VECTOR

_ ara vermə boşluğu port_2 (boş)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

üçün (i = 0; i

{P1OUT | = BIT0; // P1.0 = keçid

_gecikmeli dövrlər (1048576);

P1OUT & = ~ BIT0; // P1.0 = keçid

_gecikmeli dövrlər (1048576);

}

}

Addım 10: İstinad kodu

İstinad kodu
İstinad kodu

GitHub Deposu

Tövsiyə: