MC9S12C128 микроконтроллерінің перифериялы модульдері

Автор работы: Пользователь скрыл имя, 29 Ноября 2013 в 21:58, дипломная работа

Краткое описание

Қазіргі заманда микропроцессорларды қолданбайтын техника аймағын табу қиын. Олар есепетеулер жүргізу, басқару функцияларын жүргізу үшін, сонымен қатар дыбыстар мен бейнелерді қолданған кезде де пайдаланылады. Қолдану аймағына қарай микропроцесоарларға деген талаптар да өзгере береді. Бұл микропроцессордың ішкі құрылымына байланысты. Контроллер термині ағылшынның control – басқару сөзінен шыққан. Микроконтроллерлер әртүрлі жұмыс принциптарына негізделіп механикалық немесе оптикалық құрылғылардан бастап электронды аналогтық немесе цифрлық құрылғыларға дейін пайдаланылуы мүмкін. Қазіргі кезде кеңінен тараған басқару схемаларының бірі ол, сандық микросхема негізінде құрылғандар.

Содержание

КІРІСПЕ 5
1 HCS12 БІР КРИСТАЛДЫ МИКРОКОНТРОЛЛЕРЛЕР КЛАСЫ 7
1.1 Кластардың жалпы сипаттамасы 7
2 ELVIS_S12C128ЭКСПЕРИМЕНТАЛДЫ – ЛАБОРАТОРИЯЛЫҚ ҚОНДЫРҒЫСЫ 11
2.1 Қондырғының жалпы сипаттамасы 11
2.2 Микроконтроллердің тақшасы 12
2.3 CSMB12C128 тақшасы + PBMCUSLK тақшасы 17
2.4 CSMB12C128 тақшасы + PBMCUSLK тақшасы + ELVIS II платформасы 20
3 МИКРОПРОЦЕССОРЛЫҚ ЖҮЙЕЛЕРГЕ АРНАЛҒАН CODEWARRIOR ПРОГРАММАЛЫҚ ОРТАСЫ 21
3.1 Өңдеу ортасының жалпы сипаттамасы 21
3.2 CodeWarrior ортасында жоба құру техникасы 23
4 МК MC9S12C128 ПЕРИФИРИЯЛЫ МОДУЛЬДЕРІН ЗЕРТТЕУ 28
4.1 Микроконтроллерлер жайлы жалпы түсінік 28
4.2 Elvis II қондырғысыныңвиртуальды құралдарының жиыны 30
4.4 Микроконтроллердің ШИМ(кең импульсті модуляция) модулін зерттеу 37
4.5 Берілген параметрлері бар жекелеген импульстер генерациясын зерттеу 40
4.6 Аналогты-цифрлы түрлендіргіштің модулі 42
4.7 SPI тізбекті синхронды интерфейсін зерттеу 44
4.8 SCI тізбекті асинхронды интерфейсін зерттеу 46
ҚОРЫТЫНДЫ 48
ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР ТІЗІМІ 49
ҚОСЫМША 50

Прикрепленные файлы: 1 файл

dip_3079.doc

— 2.89 Мб (Скачать документ)

Two Channel Generatorқұралынан тікбұрышты импульстердің тізбегі микроконтроллердің Т портының 0 аяғына келіп түседі. Параллельді кодта  А портына микросекундпен шығаратын және келетін сигналдың периоды өлшенетін программаны жазу керек.Код T out виртуальды құралын қабылдауы керек.

#include <hidef.h>// EnableInterrupts макроанықтамасы бар басты

//файлдың қосылуы. 

#include "derivative.h"     // Қызметтік регисторлар  анықтамасы  бар файлдың

                                         //  қосылуы.

unsigned int TCNT_NEW, TCNT_OLD;    //Таймер санағышының жаңа және 

                                                      //ескі мәндерін сақтайтын 

                 //айнымалылар.

unsigned char T;                                             //өлшенген периодтың мәнін

                                                                      //сақтайтын айнымалы.  

void main()  {                    //Программаның басты функциясы.

         PPST &= ~0x01;       // Т портының 0 аяғына резисторді қосу, PPST0 = 0.

PERT |= 0x01;           //Т портының 0 аяғына резисторді  қосу, PERT0 = 1.

        TCTL4 = 0x01;        //0 каналында  сигналдың  үдемелі  

                                          //ағынының қосылуы EDG0B = 0, EDG0A = 1.

TFLG1 = 0xFF;        //Кірістің ұстап алуындағы барлық жалаушаларды

                                          //алып тастау.

         TFLG2 |= 0x80;       //Таймер  толуының жалаушасын алып тастау

                                          //TOF = 1.                                    

         TIE = 1;                    //0 каналындағы оқиғалар бойынша үзүлулер

                                          //рұқсаты C0I = 1.

         TSCR2 = 0x01;        //1/2-ге  тең таймер санағышының  бөлгіш

                                          //жиіліктерінің тактілеуін орнату,

//  fCT = fBUS/2 =1МГц.

TSCR1 = 0x80;       //Таймердің қосылуы, TEN = 1.

PUCR |= 0x01;      //А  портында резисторлардың қосылуы, 

// PUPAE =1.

DDRA = 0xFF;     // Шығысқа  А портының барлық 

                             //сызықтарының инициализациясы.                                                

EnableInterrupts;  //Микроконтроллерде үзүлулер  рұқсаты.

for(;;) { }               //Шексіз бос цикл.

}

interrupt 8 void IC0() {  //Таймердің  ішкі  жүйесінің 0 каналында

                                        //оқиғалар үзүлуінің ішкі программасы.

                                          // Interrupt  сөзінен кейін үзүлулер векторының

//нөмері көрсетіледі.          

TFLG1 = 0x01       // 0 каналындағы оқиғалардың жалаушасын

                              //алып тастау.   

TCNT_NEW = TCNT; //Таймер санағышының  жаңа мәнін алу.

T = TCNT_NEW – TCNT_OLD;  //Периодты  есептеу.

TCNT_OLD = TCNT_NEW; //Таймер санағышының  ескі мәнінінің 

                                                 //жаңартылуы.                                     

PORTA = T;                           // Алған мәліметтерді А портына

                                                //шығару.     

}       

CodeWarrior ортасында жаңа жобаны құру  төменде көрсетілген. Ең алдымен басты мәзірдегі File →New Project пунктін таңдаймыз.

 

4.3.1 cурет - Жаңа жоба құру мастерінің бірінші терезесі

 

 

Жаңа жобаны құру мастерінің бірінші терезесі пайда болады. Осы жерден өзіннің программалайтын микроконтроллердің типін таңдау қажет(4.3.1 суретте көрсетілген). Осы жұмысты және келесі жұмыстарды ойдағыдай орындау үшін 3-ші конфигурация қондырғының ерекшеліктерімен танысу қажет. Екі тақшада да ұстатқыштар мен тіркеуіштердің дұрыс қойылуын қадағалау қажет, себебі олардың дұрыс қойылмауы жабдықтың бұзылуына әкеп соғуы мүмкін. Барлық қосымша құрылған 8 құралдар бір орнату пакетіне біріктірілген және осы практикумға қоса тіркелген.

 

 

4.3.2 cурет - Жаңа жоба құру мастерінің екінші терезесі

 

 

Алда жоба файлдарының орналасуын көрсету қажет (4.3.2сурет). Мұны “Set” батырмасының көмегімен жасау ыңғайлы. Прогаммалау тілі ретінде С тілін таңдаңыз үшінші терезеде бұрын игерілген файлдарды жаңа жобаға қосуға болады. Бұл мүмкіндіктен бас тартыңыз және “Next >” -ті басыңыз.

 

4.3.3 сурет - Жаңа жоба құру мастерінің үшінші терезесі

 

 

Осы терезеде қосымшаларды өңдеуді жылдамдату үшін құрал таңдау мүмкіндігі туады. Қазір біз оны пайдаланбаймыз, сондықтан да “None” тармағын таңдау қажет. Болашақта өзіндік жұмыс ретінде Device Initialization құрылымымен танысуға болады. Мұның көмегімен микроконтроллердің перифериялы инициализациялық процесін басқа анықтама қағазындағы көптеген қызметтік регистрлерді зерттеу әдісіне қарағанда жеңіл және тез орындауға болады [11].

 

4.3.4 сурет - Жаңа жоба құру мастерінің төртінші терезесі

 

 

ANSI форматындағы бастапқы кодты, Small жадының үлгiсiн және 32 разрядты айнымалыны таңдау қажет. Әйтсе де, қосымшаларда соңғы опциядан және бөлшек сандарға қатысты операциялардан бас тарту ұсынылады.

 

4.3.5 сурет - Жаңа жоба құру мастерінің бесінші терезесі

 

 

Енді C тілінің ерекшелiктеріне қатысты жобаның параметрлерiн орнату керек (4.3.5 сурет). Қазір біз оны пайдаланбаймыз, сондықтан да “None” тармағын таңдау қажет. Екі тақшада да ұстатқыштар мен тіркеуіштердің дұрыс қойылуын қадағалау қажет, себебі олардың дұрыс қойылмауы жабдықтың бұзылуына әкеп соғуы мүмкін.

 

4.3.6 сурет - Жаңа жоба құру мастерінің алтыншы терезесі

 

 

Осы терезеде (4.3.6 сурет) PC-lint бастапқы кодтағы қате іздеу құрылымынан бас тартыңыз.

 

4.3.7 сурет - CodeWarriorортасының негізгі терезесі

 

Жаңа жоба конфигурациясының аяқталуымен CodeWarrior ортасындағы негізгі терезе 4.3.7 суреттегідей көрінуі қажет. Қондырғыдағы контактілерді қосу қажет.

 

4.3.8 сурет - Қондырғыдағы контактілердің қосылуы

 

               MCU_PORT(J6 немесе J7)                J4тіркеуіші


 


 



 


 


 


 




 



 


 

Жоғарыда келтірілген  программалар дұрыс істеуі үшін 4.3.8 суретте көрсетілгендей  өткізгіштерді кейбір контактілерге қолмен қосу қажет.

Қондырғыдағы манипуляциялардан (қимылдан) кейiн құрылған сигналдың керектi параметрлерiн таңдау үшін Two Channel Generator құралы iске қосылады. Сондай-ақ ,микроконтроллерден алынған мәліметтерді компьютердің экранына шығаратын T out утилиті іске қосылады. Енді осыларды орындау үшін жоғарыда жазылған программа іске қосылады.          

 

4.4 Микроконтроллердің ШИМ(кең импульсті  модуляция) модулін зерттеу

 

Осы жұмыста микроконтроллердің кең импульстік модуляциясының модулі зерттеледі. Бұл жұмысқа дайындалу барысында таймер кірісінің ұстап алу функциясын қайталау, микроконтроллердің ШИМ (КИМ) модулімен танысу және төменде келтірілген мысалдарды қарастыру ұсынылады [1].

1. Микроконтроллердiң T портының 0 аяғына Two Channel Generator құралынан тiкбұрыштыимпульстер тізбегі келіп түседі.Микроконтроллермен құрылған ШИМ-сигналды басқаратын сигнал үшін программа жазу. ШИМ-сигналының жиілігі – 15 кГц.Басқару келесі ереже бойынша жүзеге асады: 50 мкс ≤ T ≤ 100 мкс: 0 ≤ γ ≤ 1, Т – кіріссигналының периоды, γ – шығыстың салыстырмалы ұзақтығы. Екі импульстің тізбегін Scope осциллографына шығару.

#include <hidef.h>                  // EnableInterrupts макроанықтамасы бар  басты

                                                //файлдың қосылуы .

#include "derivative.h"          // Қызметтік регисторлар анықтамасы бар 

                                                //файлдың қосылуы. 

#define Tmin 50                      //Периодтың минимальды мәнінің                           

             //қолданыстық макроанықтамасы, мкс

#define Tmax 100                   //Периодтың максимальды мәнінің                        

//қолданыстық макроанықтамасы,мкс.          

unsigned int TCNT_NEW, TCNT_OLD;    //Таймер санағышының ескі және 

                                                                    // жаңа мәндерін сақтайтын 

                                                                   //айнымалылар.

unsigned char T, g = 50;                              //Өлшенген  периодтың  мәнін

                                                                    //сақтайтын айнымалы,импульстің

                                                                    //салыстырмалы ұзақтығы пайыз-

                                                                    //бен көрсетілген.  

void main(){//Программаның басты функциясы.

    PERT |= 0x01;                          //Т портының 0 аяғына резистордің  қосылуы, 

                                                    //PERT0 = 1.

   TCTL4 = 0x01;                        //0 каналында сигналдың үдемелі

//ағымдарының  қосылуы.

     TFLG1 = 0xFF;                       // Кірістің ұстап алуындағы барлық жалауша-

                                                   //ларды алып тастау.

     TFLG2 |= 0x80;                    //Таймер толуының жалаушаларын алып

                                                  //тастау TOF = 1.

     TIE = 1;                               // 0 каналындағы оқиғалар бойынша үзүлулер

                                                  //рұқсаты, C0I = 1.

     TSCR2 = 0x01;                  //1/2-ге тең таймер санағышының  бөлгіш

                                                  //жиілігінің тактілеуін орнату. 

                                                 //fCT = fBUS/2 = 1МГц

     TSCR1 = 0x80;                    //Таймердің қосылуы, TEN = 1. 

     PWMPOL = 0x08;               //Ең алдымен импульс ұзақтығының  мезетінде 

                                                  //жоғарғы деңгей,одан кейін логикалық  0-дің

                                                  //күйі.

      PWMCLK = 0;                     //3 каналы үшін В тактілеу көзі, PCLK3 = 0.

      PWMCAE = 0;                     //3 каналы үшін ШИМ фронт бойынша,

                                                   // CAE = 0.

       PWMDTY3 = 100;              //Импульстің бастапқы ұзақтығы.

       PWMPRCLK = 0;                 //1-ге тең В тактілеу көзі  үшін жиілік бөлгішін

                                                   //орнату. fB= fBUS= 2МГц.

PWMPER3 = 133;//ШИМ модулінің санағыш периоды ,

                                                   //fPWM= fB/133 = 15 кГц.

       PWME = 0x08;                   //Конфигурацияланған каналдың қосылуы,

                                                   // PWME3 = 1. 

         asm CLI;                            //Микроконтроллерде үзүлулер рұқсаты.

       for(;;) { }                              //Шексіз бос цикл.

}

interrupt 8 void IC0() {               //Таймердің ішкі жүйесінің 0 каналындағы

                                                      //оқиғалар бойынша үзүлулердің ішкі

                                                       //программасы.

                                                     //Interrupt сөзінен кейін үзүлулер

                                                     // векторының нөмері көрсетіледі.

       TFLG1 = 0x01;                      //0 каналыңдағы оқиғалар жалаушаларын

                                                      //алып тастау.

       TCNT_NEW = TCNT;          //Таймер санағышының жаңа мәндерінің

                                                      //алынуы.

       T = TCNT_NEW – TCNT_OLD;      // Периодтың  есептілуі.

       TCNT_OLD = TCNT_NEW;            //Таймер есептеуішінің ескі мәнінің 

                                                                    //жаңартылуы.

Информация о работе MC9S12C128 микроконтроллерінің перифериялы модульдері