Systemy wybudowane
Sprawozdanie: Kontroler 8051-dźwięk
Wstęp teoretyczny
Podczas laboratorium zapoznaliśmy się z obsługą oraz zasadą działania głośnika oraz przerwań .
Naszym zadaniem było napisanie programu w języku C, dzięki któremu po naciśnięciu jednego z 8 ustalonych przycisków, usłyszymy z głośnika dźwięk o ustalonej częstotliwości.
częstotliwość dźwięku |
wartości zmiennych |
---|---|
523 | FC8F |
587 | FCEF |
659 | FD45 |
698 | FD6C |
784 | FDB4 |
880 | FDF4 |
988 | FE2E |
1046 | FE48 |
Wartości zmiennych z tabeli po podziale na pół (czyli po 8 bitów) są przypisywane do wart1 i wart2, które są wykorzystane przez nas w programie. Są one obliczone z poniższego wzoru.
wartości zmiennych = 65536-(częstotliwość zegara(11059200)/(24*częstotliwość dźwięku))
Jak działa głośnik oraz jak powstaje dźwięk ???
Do umieszczonej w polu magnetycznym cewki dostarczany jest prąd. Odpowiednia częstotliwość impulsów elektrycznych powoduje wychylanie się karkasu cewki w górę i w dół, a wraz z nim membrany głośnika. Jej wychylanie się powoduje poruszenie cząsteczek powietrza. Dokładnie tak powstają fale dźwiękowe.
Kod programu
#include "8051.h"
#define TH0_RELOAD 0x49
#define TL0_RELOAD 0x49
#define TIK 9
typedef unsigned char BYTE;
int i;
int wart1;
int wart2;
void timer_isr (void) __interrupt (1) __using (0)
{
TH0= wart1;
TL0= wart2;
P1_0=!P1_0;
}
int main()
{
EA=0;
TMOD= 0x01;
EA=1;
while(1)
{
if (P3_0==0)
{
wart1=0xFC;
wart2=0x8F;
TR0=1;
ET0=1;
while (P3_0==0);
TR0=0;
ET0=0;
}
if (P3_1==0)
{
wart1=0xFC;
wart2=0xEF;
TR0=1;
ET0=1;
while (P3_1==0);
TR0=0;
ET0=0;
}
if (P3_2==0)
{
wart1=0xFD;
wart2=0x45;
TR0=1;
ET0=1;
while (P3_2==0);
TR0=0;
ET0=0;
}
if (P3_3==0)
{
wart1=0xFD;
wart2=0x6C;
TR0=1;
ET0=1;
while (P3_3==0);
TR0=0;
ET0=0;
}
if (P3_4==0)
{
wart1=0xFD;
wart2=0xB4;
TR0=1;
ET0=1;
while (P3_4==0);
TR0=0;
ET0=0;
}
if (P3_5==0)
{
wart1=0xFD;
wart2=0xF4;
TR0=1;
ET0=1;
while (P3_5==0);
TR0=0;
ET0=0;
}
if (P3_6==0)
{
wart1=0xFE;
wart2=0x2E;
TR0=1;
ET0=1;
while (P3_6==0);
TR0=0;
ET0=0;
}
if (P3_7==0)
{
wart1=0xFE;
wart2=0x48;
TR0=1;
ET0=1;
while (P3_7==0);
TR0=0;
ET0=0;
}
}
return 0;
}
Omówienie kodu:
W głównej pętli programu sprawdzamy po kolei każdy przycisk jeżeli, któryś jest wciśnięty następuje przypisanie zmiennym wart1 i wart2 odpowiednich wartości, które po połączeniu stanowią odpowiednią częstotliwość(spowodowane jest to tym, że rejestry do których potem trafią są ośmiobitowe, a wartość częstotliwości zapisana jest w postaci 16 bitowej ) . Włączane są przerwania oraz następuje pętla „podtrzymująca” while. Po zwolnieniu przycisku wyłączane są przerwania. Samo odtwarzanie dźwięku następuje w funkcji przerwania (1), gdzie do odpowiednich rejestrów są przypisane wartości zmiennych wart1 i wart2.
Wnioski
-Układ działa zgodnie z oczekiwaniami
-Naciskając kolejno przyciski można usłyszeć całą gamę.
-Mimo początkowego wydobywającego się z głośniczka „pyk pyk pyk” udało nam się uzyskać
czysto brzmiące dźwięki „do re mi fa so la si do”