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 鈥瀙odtrzymuj膮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 鈥瀙yk pyk pyk鈥 uda艂o nam si臋 uzyska膰
czysto brzmi膮ce d藕wi臋ki 鈥瀌o re mi fa so la si do鈥