АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС ИНСТИТУТЫ

 

Электроника және компьютерлік технологиялар кафедрасы

 

МИКРОПРОЦЕССОРЛЕР ЖӘНЕ  МИКРОПРОЦЕССОРЛІК ЖҮЙЕЛЕР

 

Зертханалық жұмыстарды орындауға арналған әдістемелік нұсқаулар

 (350140 – Электрондық жүйелер және технологиялар және 050719 – Радиотехника, электроника және телекоммуникациялар мамандықтары бойынша оқудың барлық түріндегі студенттер үшін)

 

ҚҰРАСТЫРУШЫЛАР: С.Н.Петрищенко, Г.Д.Мусапирова. Микропроцессорлер және  микропроцессорлық жүйелер. 

350140 – Электрондық жүйелер және технологиялар, 050719 – Радиотехника, электроника және телекоммуникациялар мамандықтарының барлық оқу түрінің студенттері үшін зертханалық жұмысты орындауға арналған әдістемелік нұсқау.

 

Әдістемелік жазбада құралдарды қондырылған бақылау есептерін шешу үшін арналған, Intel фирмасының MCS-196 сериясының жоғары өндіруші 16-разрядты микроконтроллерінің жұмысын оқып зерттеуге арналған төрт зертханалық жұмыстың суреттеуі келтірілген. Суреттеу қарастырылатын сұрақтардың мәнін сипаттайтын жалпы мағұлматтардан, жұмыстың орындалу тәртібінен, бағдарламалардың фрагменттері мен мысалдарынан және орындалған жұмыс отчетін мазмұндау тәртібінен тұрады.

Әдістемелік жазба   «Электрондық жүйелер және технологиялар» және «Радиотехника, электроника және телекоммуникациялар» мамандықтарының студенттеріне арналған (бакалавриат).

 

1 № 1 Зертханалық жұмыс. «Микропроцессорлық жүйелер және жабдықтар» бағдарламалы-ақпараттық кешенін оқып үйрену

 

Жұмыстың мақсаты:

- «Микропроцессорлық жүйелер және жабдықтар» бағдарламалы-ақпараттық кешенінің функционалдық мүмкіндіктерін оқып үйрену;

- біртұтастандырылған ортаны қолданып бағдарлама дайындауда машық алу;

- адрестеу әдістерін оқып үйрену мысалында микроконтроллердің жұмыс істеу қағидалары мен бағдарламалау тәртібін оқып үйрену.

 

1.1 Жалпы мағлұмат

Біртұтастандырылған, бағдарламалы-аппараттық орта Intel фирмасының i80196КС микроконтроллері үшін бағдарламалық қамтамасыздандыруды жасау және реттеу үшін арналған. Оған кіретін модульдер:

-  қондырылған редактор;

- бағдарламаларды трансляциялауға және орындаушы файлдарды құруға арналған жабдықтар;

- реттеу жабдықтары;

- виртуалды осциллограф;

- анықтамалық ішіне жүйе.

Меню жүйесі келесі стандартты тармақтардан тұрады:

- файл – ашу, жабу және файлдарды басу жұмыстары;

- правка – ассемблерлік файлдарды редактрлеу жұмыстары;

- окно – терезелерді ретке келтіру;

- справка – анықтама шақыру.

Менюдің арнайы тармақтары:

- вид – реттегіш терезесін ашу, статустық жолақ және құралдар тақтасымен жұмыс;

- компиляция – компилятормен жұмыс;

- платформа – реттегіш платформасымен жұмыс.

Менюдің арнайы тармақтарының қызметін толығырақ қарастырамыз.

Вид менюінде келесі опциялар бар:

- SFR регистрлері  – SFR терезесін ашу/жабу;

- регистрлік файл (РФ) – РФ терезесін ашу/жабу;

- жады  – жады терезесін ашу;

- дисассемблер  –  дисассемблер терезесін ашу/жабу;

- осциллограф  –  осциллограф терезесін ашу/жабу;

- құралдар панелі құралдар панелін көрсету/жасыру;

- реттегіш панеліжұмыс істеуші реттегіш панелін көрсету/жасыру;

- статустық жолақ – статустық жолақты көрсету/жасыру;

- жаңарту – барлық терезелердегі мәліметтердің мәндерін жаңарту;

Компиляция менюінде келесі опциялар бар:

- компиляция  –  ассемблерлік файлды компиляциялау және орналастыру;                

- загрузка – HEX файлын реттегіш платаға жүктеу;

- компиляторды нақыштаунақыштау диалогтық терезесін шақыру.

Компелятордың нақыштауларын тек қана оқытушының рұқсатымен өзгертуге болады!

Платформа менюінде келесі опциялар бар:

- сброс – платформаны жаңарту және монитор бағдарламасын қайта іске қосу;

- стоп – реттеу немесе іске қосу режимдерінде бағдарлама жұмысын тоқтату;

- старт – бағдарламаны орындалуға жіберу;

- старт отладки – реттеу режимінде бағдарламаны іске қосу;

- выполнить инструкцию – реттеу режимінде бағдарламаның 1 нұсқауын орындау;

- состояние платформы – платформа күйінің диалогтық терезесін шығарады.

Біртұтастандырылған қабықшаның статустық жолағы мен екі панелі бар:

құралдар панелі;

реттеу панелі.

Құралдар панелі, жиірек қолданылатын менюдің негізгі опцияларының жұмысын қайталайды. Статустық жолақ, жүйе жұмысының жағдайын көрсетеді және қолданушыға меню және түймететік опцияларының функционалдық қызметтерінен көмек береді.

Бұл опцияларды қосымшаның негізгі терезесін мәнмәтіндік менюі қайталайды. Мәнмәтіндік менюді шақыру үшін бағдарламаның негізгі терезе шектеуіне тышқанды келтіріп, оң түймететігін басу керек.  

Біртұтастандырылған қабықта 6 жұмыс істеуші терезе бар:

а) ассемблерлік файлдарды редактрлеу терезесі қолданушыларға Windows стандартты жұмыс тәсілдерімен ассемблерлік файлдарды редактрлеуді іске асыру мүмкіндігін береді.  

Редактрленгеннен кейін дайын ассемблерлік файл Компилятор/Компиляция меню көмегімен компиляциялана алады. Компилятор жұмысының нәтижелері үш файл түрінде шығарылады:

1) компиляция туралы есеп файлы трансляция туралы ақпаратты және оның барысында пайда болған қатаң қателерін көрсетеді;

2) листинг, яғни қателері көрсетілген компилятор қалпындағы бағдарлама мәтіні;

3) жады картасының файлы мәліметтерге және бағдарламаға бөлінген жады туралы ақпарат көрсетілген бағдарламаны орналастыру нәтижелерінің файлы.

Егер компиляция қатесіз өтсе, Компилятор/Енгізу HEX файл опциясын қолданып микроконтроллер жадысына жүктеуге болатын, HEX форматындағы кодалы файл пайда болады;

б) SFR регистрлер терезесі SFR регистрлер сондай-ақ PC, SP және PSW регистрлер мәнін көрсетеді.

Монитор бағдарламасы бұл регистрлер мәнін өзінің ішкі буферінде сақтайды. Қолданушы бағдарламасын орындауға жіберу бұйырғы берілгенде, мәндер буферден SFR регистрлеріне жүктеледі. Қолданушы бағдарламасы жұмысын аяқтағаннан кейін SFR регистрлерінің мәндері қайтадан буферде сақталады. 

Регистрлер мәндерін өзгерту үшін SFR регистрлер терезесінде тышқанның оң жақ түймететігін басып мән мәтіндік менюді шақыру қажет. Контекстік менюде үш тармағы бар:

-  SFR регистрінің жаңа мәні;

-  PSW-нің жаңа мәні;

-  арнайы регистрлердің жаңа мәні (PC, SP).

SFR регистрлерінің біріне енгізілетін жаңа мән, 0-ден 0FFh-ке дейінгі аралықта жату керек.

PSW мәні «PSW» терезесінде жалаушалар орнатумен өзгереді.

Арнайы регистрлерге мәндерді енгізетін аралық 0-ден 0FFFh-ке дейін;

в) регистрлік файл (RF) терезесі адрестері 1Ah-тен 1FFh-ке дейінгі жалпыға арналған регистрлер мәндерін көрсетеді. Бұл регистрлер контроллердің ішкі жадысында орналасқан.

Регистрлер туралы ақпарат оналтылық код түрінде және ASCII мәтіні түрінде көрсетіледі. Мәліметтер әр қайсысы 16 байтты жолақтарға тізілген. Сол жақта бастапқы адрес оналтылық көрсетуде көрсетілген.

Регистрлер мәнін өзгерту үшін жалпыға арналған регистрлер терезесінде тышқанның оң жақ түймететігін басып мән мәтіндік менюді шақыру керек. Контексттік менюде бір пункт болады – регистрлердің жаңа мәні. Оны басқан кезде регистрлерді өзгерту диалогтық терезесі шақырылады.

«Адрес регистра» терезесінде 20h-тен 1FFh-ке дейінгі адрес енгізіледі. «Значение регистра» терезесінде 0h-тен 0FFh-ке дейінгі регистр мәні енгізіледі;

г) жады терезесі бұл 0h-тен 0FFFFh-ке дейінгі адресті жады ұяшықтары.

Ұяшықтар туралы ақпарат он алтылық код түрінде және ASCII мәтіні түрінде көрсетіледі. Мәліметтер әр қайсысы 16 байтты жолақтарға тізілген. Сол жақта бастапқы адрес оналтылық көрсетуде көрсетілген.

Терезеде біруақыт ішінде жадының 512 байты көрсетіледі (32 жолақ).

Терезені ашқанда үндемеу бойынша жады 8000h адресінен бастап көрсетіледі.

Басқа жады ұяшықтарын көру үшін Up, Down, PgUp, PgDn түймететікткрін  немесе тышқан арқылы қозғалтуға болады.

Тышқанның оң жақ түймететігін басқанда жады терезесінде екі пункттен тұратын контекстік меню ашылады:

жаңа адрес;

мәнін өзгерту.

«Новый адрес» терезесінде 0-ден FE00h-ке дейінгі жаңа мән енгізіледі. «ОК» түймететігін басқаннан кейін жады енгізілген адрестен бастап көрсетіледі. Егер FE00h мәнін енгізе, FE00h-тен FFFFh-ке дейінгі адресті жады блогы көрсетіледі.

«Изменить данные» терезесінде 0-ден FFFFh-ке дейінгі жады ұяшықтарының мәні және 0-ден FFh-ке дейінгі жады ұяшықтарының жаңа мәні енгізіледі. «OK» кнопкасын басқаннан кейін мән микроконтроллердің жадысына енеді де жады терезесінде көрсетіледі;

д) дисассемблер терезесі жадыны дисассемблерленген код түрінде көрсету үшін арналған және бағдарламаны реттеу процессінде қолданылады. Қолданушы 0h-тен FFFFh-ке дейінгі адресті кодтың көрінісін ала алады.

Ашқан кезде бастапқы адресінен бастап дисассемблерлеу және көрсету орындалады. Үндемеу бойынша бастапқы адресі 8100h. HEX файлды жадыға жүктеу жағдайында жүктелген мәліметтер блогының минималды адресі орнатылады.

Бағдарламаның бастапқы адресі терезенің сол жағында қызыл түсті қалың нүктемен белгіленеді.

Бағдарламалық қамтамасызды реттеу үшін қолданушыға бағдарламалы-аппараттық шешімдердің кең спектрі ұсынылған:

-  бағдарламаны реттегіш платада орындау;

-  бағдарламаны реттегіш платада реттеу режимінде орындау;

- бағдарламаны реттегіш платада адымдық режимде орындау.

Бағдарламаны реттегіш платада орындау үшін HEX файл түріндегі бағдарламаны реттегіш плата жадысына жүктеу қажет және бағдарламаны орындауға жіберу үшін  Платформа/Старт меню пунктін қолдану керек.

Қолданушы бағдарламасы өз жұмысын келесі жағдайларда тоқтатады:

егер бағдарлама соңында RET үзілістен қайта оралу бұйрығы тұрса;

-  Платформа/Стоп меню пунтін қолданған кезде.

Бағдарлама жұмысы аяқталғаннан кейін дисассемблер терезесі ағымды нұсқау адресінде қалыптасады.

Бағдарламаны реттегіш платаның реттеу режимінде орындау үшін бірнеше бақылау нүктелерін орнатуға болады – жады және регистрлер жағдайларын көруге мүмкіндік беретін, бағдарлама орындалуы автоматты тоқтатылатын тоқтау нүктелері.

Бұл режимде жұмыс істеу үшін HEX файл түріндегі бағдарламаны реттегіш плата жадысына жүктеп тоқтау нүктелерін орнату керек. Мұны үш тәсілмен істеуге болады:

- тышқан нұсқамасын бұйрыққа әкеліп манипулятордың сол жақ түймететігіне екі рет басу керек. Қайталай екіреттік басу тоқтау нүктесін жояды;

- тышқан нұсқамасын бұйрыққа әкеліп оң жақ түймететігін баса отырып мән мәтіндік менюді шақыру. Менюден тоқтау нүктесін Орнату/Болдырмау опциясын таңдау керек. Дәл сол командада бұл опцияны қайта қолдану тоқтау нүктесін жояды;

- жоғарыда көрсетілген негізгі менюіндгі Платформа/Тоқтау нүктелері диалогтық терезелерін қолдану.

Орнатылған тоқтау нүктелері жасыл түсті қалың нүктемен дисассемблер терезесінің сол жағында бұйрық адресінің қасында көрсетілді.

Реттеу режимінде бағдарламаны іске қосу үшін Платформа/Старт меню пункті немесе құралдар панеліндегі түймететік қолданылады.

Бағдарлама, тоқтау нүктесі орнатылған бұйрыққа жеткенге дейін алдыңғы режим секілді орындалады. Содан кейін басқару, монитор-бағдарламасына беріледі. Тоқтау нүктесіне жеткенде дисассемблер терезесіндегі бағдарламаны көрсету нүктесі (қызыл) тоқтау нүктесіне ығысады (жасыл).

Реттеу режимінде қолданушы бағдарламасын үзу үшін менюдің Платформа/Стоп пунктін қолдануға болады.

Бағдарламаны реттегіш платада адымдық режимде орындаған кезде біртұтастандырылған орта әр кезекті орындалатын нұсқауға тоқтау нүктелерін өзі қояды. Алдыңғы реттеу режимінен айырмашылығы бұл нүктелер дисассемблер терезеснде көрсетілмейді. Бұл режимде қолданушы, жұмысты әр нұсқау орындалғаннан кейінгі бағдарламаның тізбекті тоқтауы деп қабылдайды.

Кезекті нұсқауды орындау үшін менюдің Платформа/Нұсқауды орындау  опциясын немесе панелдегі түймететігін қолдану керек.

Платаның «жұмысы тоқтап қалуына» әкелетін,  реттегіштің жұмыс механизмін дұрыс қолданбаған кезде менюдің Платформа/Сброс опциясын немесе панелдегі реттегіш платаны босатып және қайта іске қосатын түймететікті қолдану керек.

Реттеудің ыңғайлы болуы үшін дисассемблер терезесінде тышқанның оң жақ түймететігімен шақырылатын контекстік меню бар. Ол үш пункттен тұрады:

жаңа адрес;

тоқтау нүктесін орнату/болдырмау;

бастапқы адресті орнату.

 

 

Дисассемблер кез келген мәліметтер блогын қабылдайды және оны код ретінде түсінеді, логика жүзінде ол код емес мәліметтер болса да!

е) осциллограф терезесі қосымша реттегіш жабдық болып табылады және қолданушының бағдарлама жұмысының нәтижесін графикалық түрде көрсету мүмкіндігін береді.

Осциллограф терезесінде келесі ақпарат көрсетіледі:

- координаттар осьтері. Көлденеңінде санақтар номерлері, тігінде 0-ден 255-ке дейін санақтар мәндері. Реттегіш платаның тізбекті интерфейсінен қабылданатын мәндер таңбасыз байттар ретінде түсініледі;

- негізінен осциллограф алаңына орналасқан санақ мәндері;

- осцилогроф жұмысының параметрлері және оның режимдері туралы ақпарат оның оң жағында орналасқан.

Осцилогроф жұмысы параметрлерінің нақыштаулары мен режимдерін таңдау үшін тышқанның оң жақ түймететігін баса отырып контекстік менюді шақып осцилограф Режимі пунктін таңдау керек. Графикалық санақтарды көрсетудің екі режимін нақыштау мүмкіндігін беретін диалогтық терезе пайда болады:

- гистограмма – санақтар мәні тікбұрышты тізгіндер түрінде келтірілген;

- сызықтық интерполяция – санақтар мәні сызықтық заң бойынша интерполяцияланады.

Екі режимнің біреуін таңдау санақтарды көрсету көрініс алаңында іске асады.

Мәліметтерді жаңарту режимі алаңында екі жаңарту режимінің біреуін таңдауға болады:

- берілген уақыт периодынан кейін (150мс-тен 5000мс-ке дейінгі уақыт интервалынан кейін);

- буферге мәліметтерді қабылдау шегімен (1-ден 1024-ке дейінгі санақ).

Режимді таңдау үшін режимді қосу алаңын орнатып берілген аралықтағы мәндерді енгізу керек. Егер ешқандай режим таңдалмаса мәліметтерді қайта салуға болмайды.

Нақыштауға рұқсат етілетін параметр – осцилографтың ішкі буферінің өлшемі. Ол 2-ден 1024-ке дейінгі аралықта өзгереді және ішкі буфердің Өлшем алаңына орнатылады  (2..1024).

Қайта салу кезінде Буферді тазалау жалаушасын орнату буфердің әрбір толуынан кейін тазартуды орындайды.

Осцилографтың барлық нақыштау параметрлері жүйемен сақталады және бағдарламаны қайта іске қосқаннан кейін қалпына келеді.

Тұрақты есте сақтау құрылғысы (ТЕСҚ) мәліметтер мен бағдарламаны сақтау үшін арналған. Көлемі 32 Кбайтқа дейін әр түрлі типті ТЕСҚ микросхемаларын қолдану мүмкіндігі қарастырылған.

Сондай-ақ көлемі 32 Кбайтқа дейінгі оперативті есте сақтау құрылғысын қолдануға болады.

Тізбекті арна интерфейсі RS-232 стандартындағы сигналдар деңгейімен жұмыс істейді. Микроконтроллер тізбекті арнада ТТЛ деңгейлі сигналдарды қабылдайды және шығарады. Ары қарай драйвер орналасқан, ол бұл сигналдарды RS-232 стандартты деңгейлеріне түрлендіреді. Схема RS-232 алмасуының барлық жылдамдықтарын қамтамасыз етеді.

Индикация блогы бағдарлама жұмысын реттеу және микроконтроллердің ағымды жағдайын көрсету үшін қызмет етеді. Бұл мақсаттар үшін сәйкесті светодиодтарға шығарылатын микропроцессордың 1 портының сегіз шығыстарындағы ақпарат қолданылады.

Платаға қоректену 9  контактты ажырыма тетік арқылы беріледі.

Компьютермен байланыс сондай-ақ тізбекті арнамен 9  контактты ажырыма тетік арқылы іске асады.

Микроконтроллердің ДЭЕМ-мен байланысын ұйымдастыру үшін ТЕСҚ-ға Монитор бағдарламасы тігілген, ол контроллерге ақпаратты жазу және одан оқу, қолданушы бағдарламасын іске қосып және оны тоқтау нүктелерімен адымдық режимде орындау мүмкіндігін береді.

8XC196KC микроконтроллерінде 1Ah-1FFh аралығында орналасқан көлемі 488 байтты регистрлік файл бар.

Монитор өзінің жұмысы үшін файлдық регистрдің кіші адресті (1Ah-1Fh) 6 байтын қолданады. Оны қоданушы бағдарламасының қолдануы  болжай алмайтын нәтижелерге әкелуі мүмкін.

Монитор 200h адресінен бастап стекті ынталандырады және оған қолданушы бағдарламасынан қайта оралу адресін (2222h) орналастырады. Қолданушы бағдарламасын адымдық режимде немесе тоқтау нүктелері арқылы орындаған кезде Монитор стектің ағымдық жағдайын қолданады, сондықтан ақпараттың жоғалуын алдын алу үшін стекті талаптағыдан 4 байтқа көбірек резервтеу керек.

Қолданушы бағдарламасын жүктеу және орындау үшін микроконтроллерде сыртқы ОЕСҚ болу керек (адрестер: 8000h-FFFFh).

 Сыртқы ОЕСҚ-ның 8060h-809Fh адресті облысы, қолданушы бағдарламасын және арнайы қызметті регистрлер жағдайын сақтау үшін Мониторда резервтелген.

Қолданушы үзілістер жүйесін қолдана алу үшін оның барлық векторлары (TRAP-үзілісінен басқа, вектор адресі 2010h) сыртқы ОЕСҚ-ға шығарылған. Үзіліс векторлары ТЕСҚ-дағыдай (базалық адрес 2000h) базалық адреске қатысты ығысулармен орналасады (8000h).

Бағдарлама мен мәліметтерді орналастыру үшін ОЕСҚ-ның 8000h-809Fh адрестерінен басқа барлық адрестер қолданылады.

Адрестік кеңістік ішінде операндтарды қолдану үшін микроконтроллер алты негізгі адрестеу тәсілдерін қолданады:

- регистрлік тура адрестеу;

- жанама адрестеу;

- автоинкрементті жанама адрестеу;

- тікелей адрестеу;

- қысқа индекстік адрестеу;

- ұзын индекстік адрестеу.

Регистрлік тура адрестеу 256-байтты төменгі регистрлік файлдың регистрін тікелей қолданады. Адрестелген регистр бұйрық ішіндегі 8-битті жолақпен анықталады. Бұйрыққа байланысты есептеу кезінде үш адреске дейін қатыса алады.

Жанама адрестеу адресі регистрлік файлдағы (RF) СӨЗ типті айнымалыдан алынған операндты қолданады. Жанама адресті RF-ті қоса отырып адрестік кеңістіктің кез келген жеріндегі операнд анықтай алатынына көңіл аударыңыз. Бұйрық ішіндегі 8-битті жолақ жанама адрес орналасқан регистрді анықтайды.

Автоинкрементті жанама адрестеу дәл жанама адрестеу тәсілі сияқты, бірақ жанама адрес орналасқан СӨЗ типті айнымалы, операндтты адрестеу үшін қолданғаннан кейін 1-ге ұлғаяды. Егер бұйрық БАЙТпен немесе ҚЫСҚА ТҰТАС САНмен жұмыс істесе адрестің жанама айнымалысы 1-ге ұлғаяды. Ал егер бұйрық СӨЗбен немесе ТҰТАС САНмен жұмыс істесе адрестің жанама айнымалысы 2-ге ұлғаяды.

Тікелей адрестеу тәсілі 8 немесе 16-битті операндты тікелей бұйрық жолағынан қолданады. Бұйрықта тек қана бір тікелей сілтеме болуы мүмкін; кез келген қосымша операндтар тура регистрлік сілтеме арқылы көрсетілу керек.

Қысқа индекстік адрестеуде операндтардың біреуінің адресі екі 8-битті жолақтан есептеледі. Бұйрықтағы бір 8-битті жолақ регистрлік файлдағы СӨЗ типті «базалық» адресі бар айнымалыны анықтайды. Бұйрықтағы екінші 8-битті жолақ операндтың орындаушы адресін құрау үшін «базалық» адреспен қосылатын «ығысуды» анықтайды. Орындаушы адрес «базалық» адреске қатысты -128-ден 127-ге дейінгі аралықта болуы мүмкін.

Ұзын индекстік адрестеу қысқа индекстік адрестеу режиміне ұқсайды, бірақ «ығысу» жолағы 16-битті.

Нөл регистрі арқылы адрестеу: RF-тағы бірінші екі байт нөл регистрін құрады. Бұл байттар нольге аппараттық құралдармен орнатылады. Есептеулер мен салыстырулар үшін тіркелген тұрақты нөл көзін қамтамасыз етуден басқа ұзын-индексті сілтемеде СӨЗдің «базалы» айнымалысы ретінде қолданыла алады. Мұндай нөл регистрін таңдау комбинациясы және адрестеу тәсілі жадының кез келген ұяшығын тікелей адрестеуге мүмкіндік береді.

Стек шыңын көрсетуші регистр арқылы адрестеу: төменгі RF-тің 18H және 19H байттары, 18H ретінде адрестелетін  SP стек шыңын көрсетуші жүйесін құрайды. Стек шыңын көрсетушісін ыңғайлы басқару басқа, SP сондай-ақ стек шыңын қолдануға арналған жанама сілтемедегі СӨЗ айнымалысы ретінде немесе стек ішіндегі мәліметтерге жету жолына арналған қысқа-индекстік сілтемеде қолданыла алады.

 

 

1.2 Жұмыстың орындалу тәртібі

1.2.1 Жаңа файл ашып, мысалға L1.mca атты, оған Lab1.mca.бағдарламасының мысалын көшіріңіз

1.2.2 Алынған файлды сақтағаннан кейін жасалған бағдарламаны трансляциялап пайда болған листингті көріңіз.

1.2.3 Қателер болмаған кезде орындаушы файл пайда болады.

1.2.4 .HEX кеңейтулі өз файлыңызды таңдап микроконтроллерге жүктеу үшін реттегішті жандандырыңыз.

1.2.5 Жады дампының, арнайы қызметті регистрлер және стек, сондай-ақ жалаушалар регистрінің құрамы қалай өзгеретініне көңіл аудара отырып бірнеше бұйрықты тоқтау нүктелерімен адымдық режимде орындаңыз.

1.2.6 Кейбір жады ұяшықтарын өзгертіп көріңіз.

1.2.7 Бағдарламаңызды аяғына дейін орындап оны аяқтаңыз.

1.2.8 Компилятор терезесін ашып бағдарламаңызды тағы бір рет компиляторы қолданбай орындап көріңіз. Егер сіз орындаған қимылдар дұрыс болса микроконтроллерде светодиодтардың белгілі тәртіппен жануы байқалып қолданушы экранына байттардың белгілі бір тізбектлігі шығады.

1.2.9 Жаңа файл ашыңыз, мысалға L2.mca атты.

1.2.10 Оған оқытушы көрсеткен, бастапқы шартты және әр түрлі адрестеу тәсілдерінің әректін анықтайтын бағдарлама фрагментін көшіріңіз.

1.2.11 Бағдарлама фрагменттерін бастапқы мәліметтерді енгізуге арналған бұйрықтармен толықтырып, осы фрагменттерден бағдарлама құрыңыз.

1.2.12 Алынған файлды сақтаңыз.

1.2.13 Бағдарламаны трансляциялап пайда болған листингті қараңыз.

          1.2.14  Қателер болмаған жағдайда орындаушы файл пайда болады.

 1.2.15 .HEX кеңейтулі өз файлыңыздың атын таңдап микроконтроллерге жүктеу үшін компиляторды жандандырыңыз.

1.2.16 Бағдарламаның әр фрагментінің қасына тоқтау нүктелерін қойып оны үзіліссіз режимде орындалуға жіберіңіз. Әр түрлі адрестеуді қолданатын бұйрықтардың әрекеттерін тексеріңіз және талдаңыз. Жады дампының, арнайы қызметті регистрлер және стек, сондай-ақ жалаушалар регистрінің құрамы қалай өзгеретініне көңіл аудараңыз.

1.2.17 Бағдарлмажұмысын аяғына дейін орындап оны аяқтаңыз.

1.2.18 Біртұтастандырылған орта жұмысын аяқтаңыз.

       

1.3 Бағдарлама фрагменттері

.include '8096.inc'     ;Арнайы регистрлер идентификаторларының бейнеленуі

;*********************************************************

;Бастапқы шарттарды анықтау:

rseg at (30h)          ; регистрлер сегменті

Reg_A:        .dsw 1; 30H адресі бойынша сөзді резервтеу

Reg_B:        .dsw 1; 32H адресі бойынша сөзді резервтеу

Reg_C:        .dsw 1; 34H адресі бойынша сөзді резервтеу

ALPHA:      .dsb 1          ; 36H адресі бойынша байтты резервтеу

BETA:         .dsb 1          ; 37H адресі бойынша байтты резервтеу

CL:              .dsb 1 ; 38H адресі бойынша байтты резервтеу

; Регистрлік тура адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) Reg_A=100   Reg_B=200   Reg_C=300  CL=5

ADD Reg_A,Reg_B,Reg_C ; Reg_A <- Reg_B+Reg_C

; b) Reg_A=500

MUL Reg_A,Reg_B   ; Reg_A <- Reg_A * Reg_B

; c) Reg_A=20000

INCB CL     ; CL <- CL + 1 --- CL=6

; Жанама адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) Reg_A=100(100)=20

LD Reg_A,[Reg_A]  ;     Reg_A <- MEM_WORD (Reg_A)

;Reg_A=20 (100)=20

; b) ALPHA=20  BETA=40 Reg_C=60 (60)=100

ADDB ALPHA,BETA,[Reg_C]

;ALPHA <-BETA+MEM_BYTE (Reg_C)

;ALPHA=140 BETA=40 Reg_C=60 (60)=100

; c) SP=190H  [SP]=5 [SP+2]=7 Reg_A=50 (50)=25

POP [Reg_A ] ; MEM_WORD (Reg_A) <- MEM_WORD (SP)

; SP < - SP + 2

;SP=192H  [SP]=7  Reg_A=50 (50)=5

; Автоинкрементті жанама адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) Reg_A=1 Reg_B=100 (100)=4

LD Reg_A,[Reg_B]+

; Reg_A < - MEM_WORD(Reg_B)

; Reg_B < - Reg_B + 2

; Reg_A=4 Reg_B=102 

; b) ALPHA=1 BETA=2 Reg_C=120 (120)=5

ADDB ALPHA,BETA,[Reg_C]+

;ALPHA< -BETA+MEM_BYTE (Reg_C);      Reg_C <- Reg_C + 1

;ALPHA=7 BETA=2 Reg_C=121 (120)=5

; c) SP=190H [SP]=5 [SP-2]=7 Reg_A=50 (50)=25

PUSH [Reg_A]+

; SP < - SP - 2

;MEM_WORD(SP)<-MEM_WORD(Reg_A)

; Reg_A < - Reg_A + 2

;SP=18EH  [SP]=25  Reg_A=52

; Тікелей адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) Reg_A=100

ADD Reg_A,#340 ;Reg_A<-Reg_A+340( ADD_2op )

;Reg_A=440

; b) SP=200H  [SP]=4444H

PUSH #1234H ; SP <- SP - 2

; MEM_WORD (SP) < - 1234H

;SP=19EH  [SP]=1234H

; c) Reg_A=105

DIVB   Reg_A, 10 ; “LowByte(Reg_A)”<-Reg_A/10

; “HighByte(Reg_A)”<-Reg_A MOD 10

; если адрес Reg_A-30H, то (30H)=10  (31H)=5

; Қысқа индекстік адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) Reg_A=10  Reg_B=100  (112)=23

LD  Reg_A,12[Reg_B] ; Reg_A < - MEM_WORD(Reg_B+12)

;Reg_A=23

; b) Reg_C=50   (53)=40   BETA=2

MULB  Reg_A,BETA,3[Reg_C]

;Reg_A<-BETA*MEM_BYTE(Reg_C+3);        Reg_A=80

; Ұзын индексті адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) Reg_C=100 TABLE=300 (400)=0AAH         Reg_B=55H     ;Reg_A=0FFH

AND Reg_A,Reg_B,TABLE[Reg_C]; Reg_A < - Reg_B AND           ;MЕM_WORD(TABLE+Reg_C)                          Reg_A=00H

; b) Reg_A=30 Reg_B=9000H  TABLE=50H  (9050H)=77

ST  Reg_A, TABLE[Reg_B]

          ;MEM_WORD(TABLE+Reg_B)<- Reg_A           (9050H)=30

; c) BETA=2 LOOKUP=5  Reg_C=100  (105)=21

ADDB ALPHA,BETA,LOOKUP[Reg_C]

;ALPHA <-BETA+MEM_BYTE(LOOKUP+Reg_C) ALPHA=23

; Ноль регистрі арқылы адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) Reg_A=10  (1234)=20

ADD  Reg_A,1234[ZER0_Reg]

          ; Reg_A<-Reg_A+MEM_WORD(1234)               Reg_A=30

; b) SP=192  [SP]=23  (5678)=45 

POP  5678[ZERO_Reg]

;MEM_WORD(5678)< - MEM_WORD (SP) SP < - SP + 2

;(5678)=23 SP=194

; Стек шыңын көрсетуші регистр арқылы адрестеуді қолданатын бұйрықтар әрекетін тексеру және талдау:

; a) SP=190   (18EH)=20H

PUSH  [SP]    ; Дубликат TOP_OF_STACK

          ;SP=18EH  (18EH)=18EH

; b) Reg_A=0  SP=190 (192)=34

LD   Reg_A, 2[SP ] ; Reg_A < - NEXT_TO_TOP    Reg_A=34

 

1.4 Есеп мазмұны

1.4.1 Біртұтастандырылған орта жұмысының қысқаша жазбасы.

1.4.2 L1.mca бағдарламасында берілген адымдар саны орындалғаннан кейінгі контроллер регистрлерінің жағдайы.

1.4.3 Оқытушы берген, әр түрлі адрестеу тәсілдерін көрсету үшін бағдарламаның жақсы коментацияланған фрагменттері.

 

2 № 2 Зертханалық жұмыс. MCS-96 макроассемблер тілінде бағдарламалау амалдарын оқып үйрену

 

Жұмыстың мақсаты:

- I8XC196KC микроконтроллері макроассемблерінің бұйрықтарын оқып үйрену;

-  микроконтроллердің ассемблер тілінде бағдарламалау тәжірибелерін алу.

 

2.1 Жалпы мағлұмат

Ассемблер бағдарламасы амалдардың мнемокодтарын тікелей машиналық кодқа трансляциялайды, олар белгілі амалды орындауға қатысты процестерді нұсқаулайды (инструкциялайды).

Ассемблердің кез келген бағдарламасы үш бөліктен тұрады:

- машиналық бұйрықтар;

- ассемблер директивтері;

- ассемблерді басқару құралдары.

Машиналық бұйрық машинамен орыналына алатын машиналық код.

Ассемблер Директивасы символдар мен бағдарламаларды анықтау үшін қолданылады және орындалмайтын кодты, мысалы хабарлар мен мәліметтерді өндіреді.

Ассемблерді басқару құралдары ассемблердің жұмыс режимін орнатады және трансляция процессін басқарады.

Кез келген тілдегідей ассемблер сөздік (элементтер жиынтығы)  пен граматикадан (белгілі бір әрекетті өндіру үшін тіл элементтері қандай түрде жазылу керектігін анықтайтын шарттар жинағы) тұрады.

ASM96 ASCII символдар жинағын қолданады. ASCII-дің барлық символдары өтеді, бірақ олардың кейбіреуі ассемблер үшін анықталған арнайы семнатикалық мағына білдіреді.

  2.1 Кесте

Сан

Келесі цифрлардан тұрады

      Мысал

Екілік

<0-1> B (b)

10101010B, 111b

Сегіздік

<0-7> O (o)

377O, 456Q, 23o, 34q

Ондық

<0-9> D (d)

100D, 234d, 678

Оналтылық

<0-9>, <A-F> H(h)

0AAH, 125h, 4FEh

 

Ұзын тұрақтылар (таңбасыз 32 битті сандар) DCL директивасымен анықталуы мүмкін.

Бөлгіштер ASM96 операторларының элементтерін бөлу үшін қызмет етеді.

2.2 Кесте

Символ

Анықтамасы

Бос орын

Бір немесе бірнеше бос орын енгізуге. Бос орындар символдар бөлгіші немесе жолақтар бөлгіші ретінде қызмет көрсетеді

,

Үтірлер операндтарды бөледі

Апостроф – Символдық жолдарды шектеу үшін қызмет көрсетеді

( )

Домалақ жақшалар өрнектерді шектейді

[ ]

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

< >

Бұрыштық жақшалар макропараметрлерді қосады

%

Пайыз белгісі, келесі макропраметр формалды параметрмен алмасу алдындағы өрнек ретінде бағалану керектігін көрсетеді.

!

Леп белгісі макроөңдеуде литерді алмастырушы ретінде қолданылады

&

& символы шектес текстінен формалды параметрлерді бөлу үшін қолданылады

LF

Жолды көшіру (ASCII 0AH) – жол соңының белгісі

CR

Каретканың қайта оралуы (ASCII 0DH)

HT

Горизонтальдік табуляция – бос орын ретінде өңделеді

;

Нүктелі үтір түсініктемелердің басталуын шектейді

#

Фунт белгісі тікелей адрестеу тәсілі кезінде тікелей мәнді көрсетеді.

:

Қос нүкте есімді қалған оператордан бөледі

 

Идентификаторлар қолданушымен анықталған есімдер, олар жады адрестерін, константаларды және т.б. көрсету үшін қолданылуы мүмкін. Идентификаторда 31 символға дейін болуы мүмкін. Бірінші символ әріп немесе арнайы символ болуы керек ( ? немесе _ ). Идентификатор ішіндегі ассемблермен қабылданылмайды.

Резервтелген сөздер – ассемблерде спецификалық мағынасы бар есімдер, сондықтан қолданушы анықтау үшін жету жолы жоқ. (Бұйрықтар мнемоникасы, ассемблер директивтері мен макродирективтер, STACK алдын ала анықталған идентификаторы).

Бағдарламаның активті сегменті (бағдарламалық санағыш көрсеткіші) ішіндегі ағымды ұяшық, операторда доллар белгісімен ($) көрсетіледі. Белгі ол көрсетілген бұйрықтың кіші байтының адресі (бастапқы) болып табылады.

Жолдар – ASCII символдарының тізбектілігі. Жол бастапқы және соңғы апострофтармен шектеледі.

Мысалдар

1 'STACK' – STACK резервтелген сөзі емес, S T A C K символдық жолы.

          2 ‘FFH’ – FF он алтылық сан емес, FFH символдық жолы.

          3  ‘$’ – бұйрықтар санағышы емес, доллардың литерлік белгісі.

Жолдар DCB директивасы үшін операндтар ретінде және сондай-ақ операндтардағы өрнектер ретінде де қолданыла алады. Жол DCB директивасы ндағы операнд ретінде қолданылған кезде, жол ұзындығы 0-ден 255-ке дейін болуы мүмкін. Жол өрнектегі операнд ретінде қолданылған кезде, жолда бір немесе екі символ ғана бола алады.

Базалық операндтар – сандар, идентификаторлар, бұйрықтар санағышына арналған алдын ала анықталған символдар ($), стек шыңына арналған алдын ала анықталған айнымалы (STACK) және бір немесе екі символдан тұратын жолдар.

Өрнек сандардан, идентификаторлардан, арнайы белгілерден және оларды  олардың белгілерін біріктіретін амалдардан тұрады, мысалы, 23, Data1, $;  – 25;  166/32.

Өрнектер 16-битты константаларды анықтау үшін қолданылады.

Бастапқы бағдарламаның операторы төрт жолақтан тұрады. Әр жолақ міндетті емес ([  ]).

        2.3 Кесте

Белгі жолағы

Амал жолағы

Операнд жолағы

Комментария жолағы

[Label:]

|Name][Operation]

[Operand,... ]

[;Comment] <CR,LF>

LOAD­ _Reg_A:

LD

Reg_A,#23

;Reg_A=23

 

Белгі жолағында белгі немесе (Label:) есім болады (Name). Белгі машиналық бұйрықтарға, макрошақыруларға, жадыны резервтеу директиваларына, кодты анықтау директиваларына және бос операторларға ілгерлеуді істей алады. Есім біршама есім атрибуттарына қойылу үшін қолданылады (макроанықтамалар, EQU директивасы).

Директива жолағында машиналық бұйрық мнемоникасы, қолданушы макроның есімі және амалдар болдады. Амал жолағының мазмұны орындалатын бұйрықты анықтайды (JUMP, ADD, LD...).

Операнд жолағы: синтаксисі және мазмұны – опрератордағы амалдандан тәуелді. Оперантар ретінде идентификаторлар, өрнектер, сандар, адрестеу тәсілін анықтайтын өрнектер болуы мүмкін. Бір бұйрықта үш операндтқа дейін болуы мүмкін.

Комментария жолағы әр оператордың әрекетін сипаттау мүмкіндігін береді. Жолақ “;”-ден басталады. “;”-ден орналасқан текст ассемблерленбейді.

Сегмент – қоданушы бағдарламасын қолдануға арналған жады бөлімінде немесе модуль ішінде анықталған жады франменті. Әр сегменттің белгілі қызметі бар.

Макроассемблерде сегменттің бес түрі бар:

- регистрлердің жылжымалы сегменті (REGS);

- регистрлердің басу сегменті (OSEG);

- мәліметтер сегменті (DATA);

- стек сегменті (STACK);

- код сегменті (CODE).

Сегментті таңдау директивасы сізге бір сегментті аяқтап (сегментті деактивтеу) және директивада көрсетілгендей, жаңа сегментті (code, data, regs) талдауға мүмкіндік береді.

Бағдарлама көрсетілген сегментте келесі сегментті таңдау директивасына немесе бағдарламаның соңына дейін жалғаса береді.

Сегментті анықтау директиваларының синтаксисі:

          .rseg <Сегмент есімі>, mem    ; басу регистрі

          .org $+<базалық адрес>

          .aseg < Сегмент есімі >, mem    ; басылмайтын регистр

          .org $+< базалық адрес >

Кез келген сегмент басу (.ASEG) немесе басылмайтын (.RSEG) болып беріле алады.

Регистрлер сегменті микроконтроллердің Register RAM бөлімін алып жатқан жадының бөлігі (30h-1FF). Регистрлер сегментіне жататын айнымалылар бағдарламада регистрлер ретінде қолданыла алады. Бұл сегмент ішінде жадыны резервтеуді ғана істеуге болады. Егер регистрлер сегменті басу (директивой OSEG) ретінде хабарланған болса, RL96  ығыстыру бағдарламасы және орналастырушы бұл сегментті басқа сегментпен басуға рұқсат ете алады, егер олар бір уақытта әрекетті болмаса. Басылмайтын сегменттер басу бола алмайды.

Мәліметтер сегментіоперативті жадыда (RAM) таралған жады бөлігі. Бұл сегментке жататын айнымалылар операнд ретінде қолданыла алады (тура, жанама, индекстік адрестеу түрлерін қолдана отырып). Бұл сегменттің ішінде тек қана жадыны сегменттеу анықталған.

Стек сегменті оперативті жадыда (RAM) таралған жады бөлігі. Бұл сегментке жататын айнымалылар кез келген көрсетуші ретінде қолданылатын регистрді немесе стек шыңын көрсетуші адрестеуді қолдана отырып шақырыла алады. Бағдарламада тек бір стек сегменті бола алады.

Код сегменті – ROM бөлімінде таралған жады бөлігі. Бұл сегмент бағдарлама константалары мен кодтарды сақтауға қолданылады. Код сегментіне жататын айнымалылар операндтар ретінде (тура, тікелей, жанама немесе индекстік адрестеу режимдерін қолдана отырып) немесе өту және бағдарламаны шақыру бұйрықтарының адресаты ретінде қолданыла алады.

Басылмайтын және басу сегменттері. Сіз сегментті басылмайтын немесе басу деп анықтай аласыз.

.aseg сегменттің басылмайтын екенін және көрсетілген базалық адрестен басталатынын көрсетеді.

.rseg сегменттің басу екенін және көрсетілген базалық адрестен басталатынын көрсетеді.

Сегмент басылмайтын ретінде анықталған кезде, жаңа сегмент жасалады. Сегмент басу ретінде анықталған кезде, осындай типті алдыңғы басу сегменті жалғасады  (егер ондай болған болса). Сонымен, объекттік модульде тек бір әр типті басу сегменті ғана және басылмайтын сегменттерінің шексіз саны болады.

Арифметикалық және логикалық амалдарды орындаған кезде, амал нәтижесімен қоса нәтиже белгілерінің мәні қалыптасады. I80C196KC микроконтроллерінде 6 нәтиже белгілері қолданылады:

- нөлдік нәтиже (Z);

- кері (N);

- разрядтық тордың толып кетуі (V);

- разрядтық тор толуының сақталатын белгісі (VT);

- көшіру(С);

- кодты оңға жылжытқандағы сақталатын көшіру (ST).

Нәтиже белгілерінің мәні PSW (Program Status Word) бағдарламасының жағдай сөзі регистрінің разрядтар жағдайымен көрсетіледі, ол 2.4 кестесінде көрсетілген.

2.4 Кесте

7

6

5

4

3

2

1

0

Z

N

V

VT

C

PSE

I

ST

            

Сақталатын көшіру белгісінде ST (Sticky Bit Flag) кодты оңға ығыстыру кезінде, егер кодты оңға ығыстыру амалын орындау кезінде разрядты тор шегінен ең болғанда бір «1» шығатын болса, онда бір мәні орнатылады. Көбейту бұйрығы орындалғаннан кейін бұл битте белгісіз мән болады.

I биті (Interrupt Disable) барлық маскаланған үзілістерге қызмет көрсетуді глобалды рұқсат етеді (I=1) немесе етпейді (I=0). EI бұйрығы осы битті орнатады, ал DI  бұйрығы оны босатады.

PSE биті PTS жұмысын глобалды (PTS Enable) рұқсат етеді (PSE=1, EPTS бұйрығы)  немесе етпейді (PSE=0, DPTS бұйрығы).

Көшіру жалаушасының мәні С (Carry):

- қосу операциясын орындау кезіндегі жоғары разрядтың көшу мәнімен сәйкес келеді;

- алу амалын орындау кезіндегі жоғары разрядтың көшу мәніне қарама қарсы болып келеді;

- оңға немесе солға ығыстыру амалдарын орындаған кездегі разрядтық тордың шегінен шығатын код битіне сәйкес келеді.

VT разрядтық тордың толуының сақталу белгісінің  жалушасы (Overflow-Trap Flag) V жалушасы орнатылған кезде орнатылады. Жалаушаның бір жағдайы JVT, JNVT шартты өту бұйрықтары орындалғанға дейін немесе сол бойынша бұл белгі нөлдік мәнді қабылдайтын, CLRVT басқару операциясының бұйрығын орындағанға дейін сақталады.

V (Overflow Flag) разрядтық тордың толу флагы  операцияларды орындау кезінде разрядтық тордың толуына сәйкесті нәтижелер немесе операндтардың жоғары бит мәндерінің комбинациясы пайда болғанда орнатылады.

Ығыстыру операциясы үшін V жалаушасы 2.5 кестесінде көрсетілгендей, ығыстыру кезінде операндтың жоғарғы биті өзгерген кезде орнанатылады.

2.5 Кесте

Жоғарғы бит

Операция

 

Қосу

Алу

1 Операнд

0

1

0

1

2 Операнд

0

1

1

0

Нәтиже

1

0

1

0

 

Бөлу операциясы үшін V жалаушасы 2.6 кестесімен сәйкесті орнатылады.

        2.6 Кесте

Бұйрық

Нәтиже

DIVU

>255

DIVUB

>65535

DIV

< -127 немесе> +127

DIVB

< - 32767 немесе> +32767

 

Кері нәтиже жалаушасы (N) нәтиженің жоғарғы бит мәнімен сәйкес келеді.

Нөл нәтижесінің жалаушасы нөл нәтижесін алған кезде орнатылады.

MCS-96 бұйрықтар жүйесінде 8 және 16-биттік мәліметтер үшін (БАЙТ, ҚЫСҚА БҮТІН САН, СӨЗ, БҮТІН САН) арифметикалық және логикалық операциялардың толық жиынтығы бар. Ол 32-битті мәліметтер түрін (ЕКІЛІК СӨЗ, ҰЗЫНБҮТІН) ығысу амалдарында тек қана операнд ретінде, 32 де 16 бөлу амалдарында бөлгіш ретінде және 16 да 16 көбейту операцияларында нәтиже ретінде ғана қолдайды. 32-битті айнымалылы қалған амалдар 16-битті операциялар комбинациясы арқылы орындала алады.

Мысалы, 16-битті операциялардың келесі тізбектілігі 32-биттілермен қосуды және сәйкесінше 32-биттілермен алуды орындайды: 
          ADD AX,CX; екі кіші сөзді қосу,

ADDC BX,DX;  көшіруді ескере отырып екі үлкен сөзді қосу,

SUB AX,CX; екі кіші сөзді алу,

SUBC BX,DX; қарызды ескере отырып екі үлкен сөзді алу.

Бұйрықтар жүйесі сондай-ақ мәліметтер түрлері арасындағы түрлендіруді қолдайды.

        Қосу, алу, салыстыру бұйрықтары таңбасыз сөздерді және таңбалы бүтін сандарды ажыртпайды. Бірақ шартты өту бұйрықтары таңбалы да таңбасыз да нәтижелерді өңдеуді мүмкін етеді. Мысалы, CMPB бұйрығы (байттарды салыстыру) таңбалы және таңбасыз 8-битті шамаларды салыстыру үшін қолданылады. Салыстыру операциясын орындағаннан кейін таңбасыз оперантар үшін JH бұйрығын (жоғары болса өту) немесе таңбалы оперантар үшін JGT бұйрығын (егер жоғарыдан жоғары болса өту) қолдануға болады.

 

2.2 Жұмыстың орындалу тәртібі

2.2.1 Жаңа файл ашыңыз, мысалы L3-1.mca есімді.

2.2.2 Оған оқытушының тапсырмасы бойынша төменде келтірілген микроконтроллердің бұйрықтар жүйесінің ерекшеліктерін анықтайтын фрагменттерден тұратын бағдарлама жазыңыз.

2.2.3 Алынған бағдарламаны сақтаңыз және трансляциялаңыз.

2.2.4 Пайда болған бағдарлама листингін қарап шығыңыз, қателер болмаған жағдайда орындаушы файл пайда болады.

2.2.5 .HEX кеңейтулі өз файлыңызды таңдап алып микроконтроллерге жүктеу үшін компиляторды іске қосыңыз.

2.2.6 Бұйрықтарды тоқтау нүктелерімен орындаңыз. Жады дампының, арнайы қызметті регистрлер және стек, сондай-ақ жалаушалар регистрінің құрамы қалай өзгеретініне көңіл аудара отырып талдау жасаңыз.

2.2.7 Бағдарлмаңызды аяғына дейін орындап оны аяқтаңыз.

  2.2.8 Төменде келтірілген екі 8-разрядты сандарды көбейту бағдарламасының мысалын қолдана отырып көбейтіндісі 32-разрядты болатын екі таңбасыз 16-разрядты сандарды көбейту бағдарламасын жазыңыз. Көбейтінді экранға тізбекті порт арқылы байттар арқылы шығу керек.

2.2.9 Бағдарламаны компиляциялап жоғарыда көрсетілген әдіс арқылы контроллерге жүктеңіз.

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

2.2.11 Біртұтастандырылған орта жұмысын аяқтаңыз.

 

2.3 Бағдарлама мысалдары

2.3.1 Микроконтроллер бұйрықтар жүйесінің ерекшеліктерін талдау

Төменде бұйрықтар жүйесінің негізгі ерекшеліктерін бағалауға мүмкіндік беретін бағдарлама фрагменттері келтірілген.

 

.include ‘8096.inc

;***********************************************

REGSET 30h    ; регистрлер сегменті

 

ptrs     .dsl   1                ;орынды резервтеу директивалары

count            .dsw 1                ;оперативті жадыда айнымалылар үшін:

r1        .dsl   1                ; dsl - екілік сөз типті айнымалыларға

r2        .dsl   1                ; орын резервтеу

cntset .dsw 1                ;dsw - сөз типті айнымалыларға

word1          .dsw  1      ; орын резервтеу

cntset1         .dsb   1      ;dsbбайт типті айнымалыларға

byte1 .dsb   1                ; орын резервтеу

dst      .dsb  14*2          ;ptrsқабылдаушыға (үлкен сөз)және

:жіберушіге (кіші сөз) сілтейтін

:ағымды мәндердің регистрі

;*******************************

 

CODESET 8100h ; бағдарлама кодының сегменті

 

; BMOV бұйрығы – блокты қайта жіберу

           ld      ptrs,#src      ; жіберуші массивтерінің базалық

 ; адрестерін орналастыру

           ld      ptrs+2,#dst  ; қабылдаушы массивтерінің базалық

 ; адрестерін орналастыру

           ld      count,#12    ; қайта жіберілетін байттар санағышы

           ldb    cntset1,#2    ; бұйрықтардың қайталану санағышы

BMOV

move: bmov ptrs,count    ; блокты қайта жіберу

           djnz cntset1,move ; cntset – 1және, байт ¹ 0 болса, онда move-ке бару

                                       ; EXT бұйрығы сөзді екілік сөзге дейін кеңейту                ld  r1,#8000h    ; таңбалы сан

           ext  r1

           ld  r2,#7000h        ; таңбасыз сан

           ext  r2

; JBC/JBS бұйрығы – бит жағдайын тексеру

           ld  count,#5

           ld  r2,#4

           jbs  r2,2,m1          ;екінші бит орнатылған болса, m1-ге өту           

 ld  count,#1

m1:     ldb  IOPORT1,#0FFH

           ld  cntset,#0FFFFh

           djnzw cntset,$      ;cntset – 1және, сөз ¹ 0 болса, онда ағымды адреспен

                                         ; жүру  ($), яғни cntset-ті тағы да 1-ге кеміту

           ldb  IOPORT1,#0H

           ld   cntset,#0FFFFh

           djnzw cntset,$

           djnzw count,m1

; NOTB и NEGB бұйрықтары-

           ldb  r1,#55H

           notb  r1                ;логикалық терістеу бұйрығы

           ldb  r2,#55H

           negb  r2                ;таңбаны инверттеу бұйрығы

; SHR и SHRA бұйрықтары

           ldb  r1,#80h

 shrb  r1,#5 `        ; r1-де байтты 5 рет логикалық оңға ығыстыру

           ldb  r2,#80h

           shrab r2,#5                    ; r2-де байтты 5 рет арифметикалық оңға ығыстыру

; ST и LD бұйрықтары

           ld   r1,#7               ;сөзді жүктеу

           st   r1,r2                ;r1-дегі сөздің мәні r2-ге жазылады

; LDBSE бұйрығы – таңбасын кеңейте отырып байтты сөзге жүктеу

          ldb  byte1,#80h

          ldbse word1,byte1 ;қысқа бүтін типті 1byte мәні таңбаны ескере

 ;отырып бүтін санға дейін кеңейтіледі және word1-ге

 ;жүктеледі       

ldb  byte1,#10h

          ldbse word1,byte1

; NORML бұйрығы екілік сөзді нормалау     

           ld   r1,#0

           ld   r1+2,#1h

 norml r1,byte1   ; r1-дегі ұзын бүтін типті сан, үлкен бит 1-ге тең

;болғанға        дейін солға ығысады немесе 31 ығысу

;болады, ығысулар саны byte1-де сақталады

           ret

 

 

;*********************************************

src:     .dcb  'ABCDEFGHIKLMNO'

           .dcb  '12345678123456'

;*********************************************

 

           .end

 

2.3.2 Бағдарламаны MCS-96 ассемблер тілінде өрнектеудің мысалы

Төменде бағдарламаны MCS-96 ассемблер тілінде өрнектеудің мысалы келтірілген. Мысал ретінде екі 8-битті санды көбейту бағдарламасы келтірілген.

 

.include ‘8096.inc’ ; Регистрлерді анықтау

;******************************************************

  REGSET 30h

 

RezL    .dsb   1  ; RezH&RezL cөз

RezH    .dsb   1 ; Нәтиже

M2       .dsb   1  ; Екінші көбейткіш

Count   .dsb   1  ; Разрядтар ығысуының санағышы

;*****************************************************

CODESET 8100h  ; Бағдарлама кодының сегменті

 ; 34*3 көбейтуі, 102 болу керек

                    ; RezH          RezL

      ld   RezL,#34       ;Сөзді жүктеу, яғни HL         34

      ldb   RezH,#0       ;Байтты жүктеу, яғни H          0 (H нөлденуі

      ldb   M2,#3          ; М2-ге 3 санын жүктеу

      ldb   Count,#9      ;Санағышқа (Count) 9 санын жүктеу

L1: shr   RezL,#1       ;сөзді 1 разрядқа оңға логикалық ығыстыру

      jnc   L2               ; С = 0 болса L2 белгісіне өту

      addb  RezH,M2    ;Байттарды қосу, яғни Н          Н + М2

L2: djnz  Count,L1    ; Count ¹ 0 болса санағыш мәнін 1-ге кемітіп

; L1белгісіне өту

      ret                        ;Бағдарламадан шығу

      .END

 

2.4 Есеп мазмұны

2.4.1 Техникалық тапсырма.

2.4.2 Оқытушы берген, бұйрықтарды оқып үйрену бағдарламасының жақсы коментацияланған фрагменттері.

2.4.3 Көбейту алгоритмінің механизмін жасап нақты коментариялы блок-сұлбасын құрыңыз.

 

3 № 3 Зертханалық жұмыс. Микроконтроллер таймерлерін оқып үйрену

 

Жұмыстың мақсаты:

 

- таймерлердің құрылымы мен функционалдық мүмкіндіктерін оқып үйрену;

- таймерлерді бағдарламалау тәртібін оқып үйрену;

- біртұтастандырылған ортаны қолдана отырып бағдарлама дайындау.

 

3.1 Жалпы мағұлмат

3.1.1 1 және 2 таймерлерінің қысқа сипаттамалары.

8XC196KC микроконтроллерінде екі   16 – битті таймері бар, енгізу/шығару тезәрекетті модульдің (High-Speed Input-Output; HSIO) құрамына кіретін 1 Таймері  және 2 Таймері.

1 Таймері  – әр сегіз такт сайын бір рет өсетін стандартты, еркін жету жолды 16-битті таймер. Тактілік жиілігі 8 МГц болғанда бір тактте 250 наносекунд болатынын ескертеміз. 1 Таймері – әр қашан HSI (High-Speed Input) модулі үшін уақыт датчигі. Ол сондай-ақ HSO (High-Speed Output) модулі үшін де уақыт датчигі болып таңдалына алады. TIMER1 регистрінің екі байты  1Таймерінің санағын орналастыру үшін тағайындалған. Жазу 0ВН (үлкен байт) және 0АН (кіші байт) адрестеріндегі HWindow 15 терезесі арқылы, ал оқу сол адрестердегі  Hwindow 0 арқылы орындалады.  

2 Таймері  – HSO модулі үшін уақыт датчигі ретінде де, қосушы/алушы санағыш немесе қосымша санағыш ретінде де қолданыла алатын 16-битті бағдарламаланатын санағыш. Ол сондай-ақ сыртқы оқиғаларды да тіркей алады.

2 Таймерін іштей немесе сырттай синхрондауға болады. Сыртқы синхрондау кезінде синхрондау көзі ретінде T 2CLK (P2.3) немесе HIS.1 түйіспесін таңдауға болады.

2 Таймерінің максималды санау жылдамдығы – жағдайдың әр уақыты (өсудің тез режимі) немесе жағдайдың әр сегіз уақыты (нормалық режим).

TIMER2 регистрінің екі байтында 2 Таймерінің мәні болады. Жазу және оқу 0DH (үлкен байт) және 0СН (кіші байт) адрестеріндегі Hwindow 0 терезесі арқылы орындалады. 2 Таймерін HSO үшін уақыт датчигі ретінде қолданған кезде HSO модулін инициализациялағаннан кейін TIMER2 мәнінің өзгеруі HSO-ның бұйрықтарды өткізіп жіберуіне әкелуі мүмкін.

3.1.2 2 Таймерін бағдарламалау

2 Таймерін бағдарламаладаған кезде келесілерді ескеру керек:

а) басқару регистрлерінің 2 Таймерінің жұмысы мен қызметіне әсер етуі:

1) енгізу/шығаруды басқаратын 0 регистрі (IOC0). Жазу HWindow 0 терезесі арқылы, ал оқу 15Н адресіндегі Hwindow 15  арқылы орындалады. 3.1 суретінде таймер жұмысына әсер ететін регистрдің төрт разряды көрсетілген;

 

IOC0

7

6

5

4

3

2

1

0

 T2CLK SCR

 

T2RSTSRC

 

T2RST_ENA

 

SW_T2RST

 

3.1Сурет

2) енгізу/шығаруды басқаратын 2 регистрі (IOC2). Жазу HWindow 0 терезесі арқылы, ал оқу 0ВН адресінде орналасқан Hwindow 15  арқылы орындалады. 3.2 суретінде таймер жұмысына әсер ететін регистрдің екі разряды көрсетілген;

 

IOC2

7

6

5

4

3

2

1

0

 

 

 

 

 

 

T2UD_ENA

FAST_T2_ENA

3.2 Сурет

3) енгізу/шығаруды басқаратын 3 регистрі (IOC3). Жазу HWindow 1 терезесі арқылы, ал оқу 0СН адресіндегі Hwindow 15  арқылы орындалады. 3.3 суретінде таймер жұмысына әсер ететін регистрдің бір разряды көрсетілген.

 

IOC3

7

6

5

4

3

2

1

0

R

R

R

R

 

 

 

T2_ENA

3.3 Сурет

3.1 кестесінде қызмет көрсетуші және басқарушы регистрлердің тағайындалуы берілген:  INT_MASK1, IOC0, IOC1, IOC2 және IOC3.

3.1 Кесте

TIMER2

2 Таймер мәнінің мазмұны

INT_MASK1

INT_MASK1 үзіліс маскасы 2 Таймерінің үзлісін рұқсаттайды немесе рұқсаттамайды.

IOC0

0 басқару регистрі. 2 Таймері үшін түсіру және синхрондаудың сыртқы көздерін таңдайды.

IOC1

1 басқару регистрі. «Таймердің толып кетуін» үзу үшін үзіліс көзін таңдайды (Timer Overflow interrupt (INT07))

IOC2

2 басқару регистрі. Инкременттеудің (өсіру) тез режимін, санағыштың қосу/алу қызметін және Timer 2 Overflow  interrupt (INT12) үзілісін шақыру үшін толып кету шекарасын рұқсаттайды немесе рұқсаттамайды.

IOC3

3 басқару регистрі. 2 Таймері үшін сыртқы немесе ішкі синхрондау көзін тадайды.

 

3.2 кестесінде индивидуалды биттер және 2 Таймерінің операцияларын басқаратын порт түйіспелері келтірілген. Екінші тік жол битті немесе порт түйіспесін орнату нәтижесін келтіреді. Үшінші тік жол битті немесе порт түйіспесін тазарту нәтижесін көрсетеді;

3.2 Кесте

Порт түйіспелері/ Регистр Биттері

 

Бит = 1

 

Бит = 0

IOC0.1

Осы битті орнатқан сайын 2 Тамерін түсіру

Әрекет жоқ.

IOC0.3

Сыртқы түсіруді өткізеді

Сыртқы түсіруді өшіреді

IOC0.5

HSI.0-түсірудің сыртқы көзі

T2RST (P2.4) - түсірудің сыртқы көзі

IOCO.7

HSI.1- сағаттың сыртқы көзі

T2CLK (P2.3) – сағаттың сыртқы көзі

IOC1.3

Өткізеді

Өшіреді

2 Таймері «Таймердің толып кетуін» үзу көзі ретінде (INT00)

IOC2.0

Тез өсу режимін өткзеді

Тез өсу режимін өшіреді

IOC2.1

Алу санағын өткізеді

Тек қана қосу санағы

IOC2.5

7FFFH/8000H шекарасында үзіліс

0FFFFH/0000H шекарасында үзіліс

T2UP-DN (P2.6)

Егер IOC2.1 = 1 болса алу санағы

 

Егер IOC2.1 = 1 болса қосу санағы

 

б) синхрондау көзін таңдау.

2 Таймері оң және теріс өтулерді де санайды. IOC3 регист (IOC3.0) ішіндегі T2_ENA бит жағдайына байланысты іштен де сырттан да синхродала алады. IOC3.0-ді орнату ішкі тактілер көзін таңдайды, ал тазалау сыртқыны.

2 Таймері іштей синхрондалғанда FAST_T2_ENA биті (IOC2.0) синхрондаудың кіріс жиілігін таңдайды. FAST_T2_ENA биті орнатылған кезде (өсудің тез режимі) синхрондау жиілігі Fosc/4-ге тең және 2 Таймері жағдайдың әр уақыты сайын бір рет өседі. FAST_T2_ENA битінен тазалаған кезде (нормалық режим) синхрондау жиілігі Fosc/32-ге тең және 2 Таймері жағдайдың әр сегіз уақыты сайын бір рет өседі.

Егер 2 Таймері – HSO модулі үшін уақыт датчигі болса нормалық режим қолданылады. HSO, жағдайдың әр сегіз уақыты сайын CAM файлындағы (Content-Addressable Memory – ассоциативті жады) барлық жазулардың таңдалуы (сканерлеу) орындалуын талап етеді. Егер 2 Таймері өсудің тез режимін қолданса HSO оқиғаларын жіберіп алуы мүмкін;

в) санақ бағытын орнату.

IOC2 регистріндегі T2UD_ENA биті  (IOC2.1) 2 Таймерінің санауын санамауын басқарады:

жоғары (қосу);

- жоғары (қосу) немесе төмен (алу).

Егер IOC2.1 тазаланған болса, 2 Таймері әрқашан жоғары қарай санайды. Егер IOC2.1 орнатылған және T2UP-DN = 0 болса 2 Таймері жоғары қарай санайды. Егер IOC2.1 орнатылған және T2UP-DN = 1 болса 2 Таймері төмен қарай санайды;

г) 2Таймерін түсіруді таңдау.

Бағдарламалық қаматама бұл таймерді SW_T2RST битін (IOC0.1) орната отырып түсіре алады.

HSO бұл таймерді 2 Таймрінің түсіру бұйрығын (CMD_TAG = 0EH) орындай отырып түсіре алады. Түсірудің бұл опциясы HSO модулін кең-импульсті модулденетін шығыстар (pulse width modulated (PWM) outputs) үшін қолданғанда ерекше пайдалы.

3.1.3 Таймер бойынша үзіліс

1 Таймері және 2 Таймерлерімен үш үзу векторлары байланысты:

-  таймер толуын үзу – Timer Overflow Interrupt (INT00, 2000H);

-  2 Таймерінің толуын үзу – Timer 2 Overflow Interrupt (INT12, 2038H);

- 2 Таймерінің тіркегішін үзу– Timer 2 Capture Interrupt (INT11,2036H).

IOS1 регистрінде қандай оқиға үзіліс шақырғанын көрсететін жалаушалар бар. JBC немесе JBS бұйрықтары бойынша IOS1 регистрінің биттеріне назар аудару 0-5 биттерін нольдейді. IOS1 регистрінің мазмұнын аралық регистрге көшіріп, одан кейін онда JBC немесе JBS типті разрядтарды тексеру бұйрықтарын орындау ұсынылады.

1 Таймері де, 2 Таймері де таймер толуының үзуін шақыра алады   (INT00). Бұл үзілісті аяқтау үшін INT_MASK.0 орнатыңыз. Үзу көзін таңдау үшін 3.4 суретінде көрсетілгендей IOC1.2 (1 Таймері) немесе IOC1.3-ті (2 Таймері) орнатыңыз.

IOC1

7

6

5

4

3

2

1

0

 

 

 

 

T2OVF_INT

T1OVF_INT

 

 

3.4 Сурет

Толып кету болған кезде IOS1 регистрінде жағдай жалаушасы орнатылады. 3.5 суретінде көрсетігендей 1 Таймерінің толып кетуін IOS1.5, ал 2 Таймерінің толып кетуін IOS1.4 орнатады. IOC1 және  IOS1 басқару регистрлеріне жазу  HWindow 0 терезесі арқылы, ал оқу 16Н адресінде орналасқан HWindow 15 терезесі арқылы орындалады.

IOS1

7

6

5

4

3

2

1

0

 

 

T1_OVF

T2_OVF

 

 

 

 

3.5 Сурет

Таймерлермен жұмыс істеу кезінде келесі абайлықтарды сақтау керек:

а) HSI модулін иницализациялағаннан кейін TIMER1 мәнінің өзгеруі HSI оқиғалары арасындағы қатысты сілтеулерді бұзуы мүмкін. Сондай-ақ HSO модулін иницализациялағаннан кейін сәйкесті таймерлер мәнінің өзгеруі (TIMER1 немесе TIMER2) HSO-ның бағдарламаланған оқиғаларды өткізіп алуына немесе олардың бұрыс тәртіп бойынша орындалуына әкелуі мүмкін;

б) 2 Таймерін нормалық режимде жұмыс істеу үшін  конфигурациялаңыз, ол үшін  FAST_T2_ENA битін (IOC2.0) тазарту керек;

в) 2 Таймері  тек бір бағытта санақ жүргізу үшін конфигурациялаңыз, оған 2 Таймерін қосу санағышы ретінде конфигурацилау үшін T2UD_ENA(IOC2.1) битін тазалаңыз;

г) Оның мәні CAM-да бағдарламаланған ең үлкен уақытқа жеткенге дейін 2 Таймерін түсірмеңіз.

 

3.2 Таймерді бағдарламалау мысалы

;*************************************************************

; Timer1-ді қолдана отырып бағдарламалық кідірулерді өқу

ldb     WSR,#15                     ; HWindow 15-не ауысу

ld      TIMER1,#0c000h         ; Timer1 санағышының мәнін жүктеу

ldb     WSR,#0                       ; HWindow 0-ке ауысу

jbc     IOS1, 5, $                    ; Timer1 толуын күту

;***********************************************************

 

3.3 Жұмыстың орындалу тәртібі

3.3.1 Құрылғыны және таймерлерді бағдарламалау тәртібін оқып үйрену.

3.3.2 «Жүгіруші от» сияқты светодиодтардың тізбекті циклдік қосылу бағдарламасын жазыңыз. Бірінші таймерді светодиодтардың жану уақытын құрастырушы ретінде қолданып, ал екінші таймермен светодиодтардың ауысып қосылу кідіруін орнатыңыз.

3.3.3 Бағдарламаны компиляциялап контроллерге жүктеңіз. Бағдарламаны орындалуға жіберіңіз. Нәтижені светодиодтардан бақылаңыз.    

3.3.4 3.4 мысалын қолдана отырып ноталар таблицасы келтірілген музыклық туынды фрагментін орындайтын бағдарлама жазыңыз.

3.3.5 Бағдарламаны реттеп контроллерге жүктеңіз. Бағдарламаны орындауға жіберіңіз. Нәтижені контроллердің динамигінен тыңдаңыз.

3.3.5 Контроллерде сәйкесінше әр светодиодқа дыбыстық тізбек нотасын қойып музыкалық франментке түстік қостауды іске асырыңыз.

3.3.6 Бағдарламаның барлық варианттарын оқытушыға орындап көрсетіңіз.

3.4 Бағдарламаны орындау мысалы

.include '8096.inc'

;*****************************************************************

REGSET  30h                ; Регистрлер сегменті

 

ADDR_FREQ        .dsw     1; жиіліктер индексінің таблицасына сілтеу ADDR_TIME        .dsw     1; Кідірістер таблицасына сілтеу задержек                

Freq             .dsw     1        ; Дыбыс шығу жиілігі Гц-те

Time             .dsw     1        ; Дыбыс шығу ұзақтығы

tmp              .dsw     1

nLoop            .dsb     1        ; Қайталанулар саны

;*****************************************************************

CODESET  8100h                     ; Бағдарлама кодының сегменті

LDB nLoop, #3                      ; Қайталанулар саны

N0:

    LD   ADDR_FREQ, #TOWN_FREQ     ; Адресті ноталар таблицасына жүктеу

    LD   ADDR_TIME, #TOWN_TIME     ; Адресті ұзақтылық таблицасына жүктеу

N1:

    LDBZE   Freq, [ADDR_FREQ]+      ; Келесі нотаны таңдау

    CMPB    Freq, #-1               ; бұл соңғы нота ма?

    JE      Once_more               ; Иә: Қайталауға көшеміз

    SHL     Freq, #1                ; Нота номері бойынша ығысуды

                                    ; есептейміз

    PUSH    FREQS[Freq]             ; Стекке нота жиілігін жазамыз

    LDBZE   Time, [ADDR_TIME]+      ; Нота ұзақтылығын таңдаймыз

    MULUB   Time, #15               ; 100 рет үлкейтеміз

    PUSH    Time                    ; Стекке нота ұзақтылығын жазамыз

    SCALL   SOUND                   ; SOUND процедурасын шақыру

    ADD     SP, #4                  ; Стекті параметрлерден тазартамыз

    SJMP    N1                      ; Келесі нотаға

Once_more:

    DJNZ    nLoop, N0               ; Мелодияны қайталаймыз

    RET

;*****************************************************************

SOUND:          ; Шақыру форматы : SOUND( Freq_Note, Time_Note)

;*****************************************************************

CounterT1       .equ     20H        ; Timer1 санағышы

Time_Note       .equ     22H        ; Дыбыс ұзақтылығы(mc)

    PUSHA

;------ SFR-регистрлер мен айнымалыларды дайындау

-------------

    LDB     WSR,#1                  ; HWindow 1-ге ауысуы

    ORB     IOC3,#1                 ; IOC3.0=1 – Timer2 ішкі санау көзі

    LDB     WSR,#0                  ; HWindow 0-ге ауысуы

    LDB     IOC2,#0h                ; IOC2.0=0 - Timer2-ні

; инкременттеудің нормалық режимі,

;IOC2.1=0 - Timer2 – тек инкремент

    LDB     IOC1,#29H               ; IOC1.3=1 - INT00-ні Timer2-ден

;рұқсаттаймыз

    LD      CounterT1,#T2OVF_ROUTINE; Үзу векторын құраймыз 

    LD      tmp,#8000h

    ST      CounterT1,[tmp]         ; INT00

    LD      CounterT1, #0D090H      ; CounterT1 = 8 МГц / 32

    LD      CounterT1+2, #3         ; 

    DIVU    CounterT1, 8[SP]        ; Санағыш мәнін есептейміз

    NEG     CounterT1               ; Timer1 үшін = -CounterT1 / ;Freq_Note

    LD      Time_Note, 6[SP]        ; Дыбыс шығу уақытын аламыз мс

    LD      TIMER2,#-2500           ; Timer2 санағышының мәнін жүктеу

    LD      TIMER2,#-5000           ; Timer2 санағышының мәнін жүктеу

;2500 clk = 10mc

    ORB     INT_MASK, #1            ; INT00 рұқсаттаймыз

    EI                             

;------ Дыбыс генерациясы-----------------------------------

GO_GO:

    ORB     IOPORT2,#40H            ; P2.6=1

    LDB     WSR, #15                ; HWindow 15-ке ауысу

    LD      TIMER1, CounterT1       ; Timer1 санағыш мәнін

; инициализизациялаймыз  

 LDB     WSR, #0                    ; HWindow 0-ге ауысу

    JBC     IOS1, 5, $              ; Timer1 толып кетуін күту

    ANDB    IOPORT2,#0BFH           ; P2.6=0

    LDB     WSR, #15                ; HWindow 15-ке ауысу

    LD      TIMER1, CounterT1       ;  Timer1 санағыш мәнін

; инициализизациялаймыз  

  LDB     WSR, #0                   ; HWindow 0-ге ауысу

    JBC     IOS1, 5, $              ; Timer1 толып кетуін күту

    SJMP    GO_GO

NO_SOUND:

    DI

    POPA

    RET

;*****************************************************************

T2OVF_ROUTINE:

    DEC     Time_Note

    JE      S1

    LD      TIMER2,#-2500           ; Timer2 санағышының мәнін жүктеу

    LD      TIMER2,#-5000           ;  Timer2 санағышының мәнін жүктеу

;2500 clk = 10mc

  RET

S1:

    ADD     SP, #2

    PUSH    #NO_SOUND

    RET

;*****************************************************************

MARY_FREQ:

        .dcb     16,14,12,14,16,16,16,14,14,14,16,19,19,16,14,12,14,16,16,16,16,14,14,16,14,12,-1

MARY_TIME:

        .dcb      2, 2, 2, 2, 2, 2, 4, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8

;**********************************************************************

MARSH_FREQ:

        .dcb     17,17,17,16,17,19,21,19,17,12,21,21,21,19,21,22,19,-1

MARSH_TIME:

        .dcb      4, 4, 2, 2, 2, 2, 6, 2, 4, 4, 4, 4, 2, 2, 2, 2,16

;*****************************************************************

TUSH_FREQ:

        .dcb     0,4,7,12,12,12,12,12,12,12,12,14,14,14,14,14,14,14,14,16,14,12,7,12,-1

TUSH_TIME:

        .dcb     8,4,4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 4,4, 8

;*****************************************************************

TOWN_FREQ:

        .dcb     4,12,11,9,8, 9,4,16,14,12,11,12,9,17,16,14,12,11,12,14,17,16,14,12,11, 9,-1

TOWN_TIME:

        .dcb     4, 4, 4,4,4,12,4, 4, 4, 4, 4,12,4, 6, 2, 4, 4, 2, 2, 8, 4, 4, 4, 4, 4,12

;*****************************************************************

GIRL_FREQ:     

        .dcb     16,16,16,14,12,16,14,16,17,19,14,14,14,12,11,19,21,19,17,16,14,16,16,16,14,12,16,14,16,17,19,19,24,19,19,16,16,14,14,12,24,24,-1

GIRL_TIME:

        .dcb      4, 4, 3, 1, 4, 3, 1, 2, 2, 8, 4, 4, 3, 1, 4, 6, 2, 2, 2, 2, 2, 4, 4, 3, 1, 4, 3, 1, 2, 2, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 8  

;*****************************************************************

KAN_KAN_FREQ:     

        .dcb     12,14,17,16,14,19,19,19,21,16,17,14,14,14,17,16,14,12,24,23,21,19,17,16,14,-1

KAN_KAN_TIME:

        .dcb      8, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2  

;*****************************************************************

;     1-ші және 2-ші актавалар үшін жиілік сұлбасы (Гц)

;*****************************************************************

FREQS:  .dcw     131     ; До

        .dcw     139     ; До-диез, Ре-бемоль            1-я

        .dcw     147     ; Ре

        .dcw     156     ; Ре-диез, Ми-бемоль             о

        .dcw     165     ; Ми                             к

        .dcw     175     ; Фа                             т

        .dcw     185     ; Фа-диез, Соль-бемоль           а

        .dcw     196     ; Соль                           в

        .dcw     208     ; Соль-диез, Ля-бемоль           а

        .dcw     220     ; Ля

        .dcw     233     ; Ля-диез, Си-бемоль

        .dcw     247     ; Си

        .dcw     262     ; Среднее До            --------------------

        .dcw     277     ; До-диез, Ре-бемоль

        .dcw     294     ; Ре                            2-я

        .dcw     311     ; Ре-диез, Ми-бемоль

        .dcw     330     ; Ми                             о

        .dcw     349     ; Фа                             к

        .dcw     370     ; Фа-диез, Соль-бимоль           т

        .dcw     392     ; Соль                           а

        .dcw     415     ; Соль-диез, Ля-бимоль           в

        .dcw     440     ; Ля                             а

        .dcw     466     ; Ля-диез, Си-бемоль

        .dcw     494     ; Си

        .dcw     523     ; До

;*****************************************************************

.end

3.5 Есепмазмұны

3.5.1Таймерлерді бағдарламалау.

   3.5.2 Динамикті басқару алгоритмі.

   3.5.3 Жақсы коментацияланған бағдарлама тексті.

 

4 №4 Зертханалық жұмыс. Микроконтроллердің ендік-импульстік модуляторын оқып үйрену

 

Жұмыстың мақсаты:

 

- микроконтроллердің ендік-импульстік модуляторының функционалдық мүмкіндіктерін оқып үйрену;

- микроконтроллердің импульстік-ендік модуляторын бағдарламалау тәртібін және қолданылуын оқып үйрену.

 

4.1 Жалпы мағлұмат

i8XC196KC/KD типті микроконтроллердің импульстік-ендік модуляторында (PWM-Pulse Windth Modulation) үш PWM модулі болады. Әрбір шығыс тіркелген жиілікті айнымалы ұзақтылықты импульс шығаруды қамтасыз етеді. Бұл шығыстар сүзбесіз РWM импульстарымен оптималды жұмыс істеу үшін қолданыла алады. Осы импульстер сондай-ақ тегіс аналогтық сигналдар алу үшін сүзбеден өте алады.

4.1 суретінде келесі негізгі компонеттерден тұратын PWM – модулінің блок-схемасы келтірілген:

сегіз битті санағыш (8 Bit Counter);

жиілікті бөлгіш (синхронизации);

үш компаратор (Comparator);

үш басқару регистрі (PWMx Control Register);

үш буферлік регистрі (Holding Register);

үш RS триггері.

SLOW_PWM биті (IOC2.2) жиілік ұзақылығын қосып немесе өшіре отырып PWM-ның шығу периодын басқарады. Жиілік бөлгішінің қосылуы сегізбитті санағыштың жағдайдың әр екі уақыты сайын өсуіне әкеледі; оның өшірілуі  санағыштың жағдайдың әр уақыты сайын бірге өсуін әкеледі. 8 МГц-ті тактілік жиілікте жағдайдың бір уақыты 250 нс-тан тұрады.

Әрбір басқару регистрінде (PWM Control Register) 8-битті санағыш толып кеткенде буферлік регистрге жүктелетін 8-биттік мән болады. Санағыш мәні нөлге тең болғанда PWMx шығысы «1» болады (Санағыштың толып кету сигналы RS-триггердің “S” кірісіне түседі. Компараторлар буферлік регистрлердің мазмұнын санағыштың ағымды мәнімен салыстырады. PWMx шығысы санағыш мәні буферлік регистр мәніне теңескенге дейін «1» болып қала береді. Санағыш мәні буферлік регистр мәніне теңескенде PWM шығысы нольге тең болады. Санағыштың кезекті толып кетуі болған кезде шығыс қайтадан «1»-ге тең болады (PWMx_CONTROL-ге 00H-ты жүктеу PWM шығысын нольге тең деп тіркейді).

 

 

 

4.2 суретінде PWM шығысындағы сигналдардың формалары келтірілген

 

PWMx_CONTROL регистрі, SLOW_PWM битімен (IOC2.2) бірге, импульс кезінде «1»-ге тең жағдайда PWMx шығысы қаншалқты ұзақ кідірілетінін анықтайды, яғни саңылаумен басқару мүмкіндігін береді. PWMx_CONTROL регистріне жазылған мән 0-ден 255-ке дейінгі жағдайлар уақыты болу мүмкін (0 %-дан 99.6 % -ға дейінгі саңылау).

4.3 Суретінде оларды бағдарламалауға арналған басқару сөз форматы келтірілген.

 

SLOW_PWM битін орнату (IOC2.2) PWM тактілік импульстер жиілік бөлгішін қосады. Бұл жағдайда кіріс импульсінің жалпы ұзындығы 512 жағдай уақытынан тұрады, және PWMx_CONTROL мәні 4-ке көбейтіледі. IOC2.2-ні тазалау жиілік бөлгішін өшіреді. Бұл жағдайда шығыс импульсінің жалпы ұзындығы 256 жағдай уақытынан тұрады, және PWMx_CONTROL мәні 2-ге көбейтіледі.

4.1 кестесінде тактілік генератордың белгілі жиіліктеріндегі PWM-ның кіріс жиіліктері келтірілген.

4.1 Кесте

IOC2.2

8 MГц

10 MГц

16 MГц

20 MГц

 

XTAL1 (FOSC)-дегі жиілік

0

15.6 KГц

19.6 KГц

31.25 KГц

39.1 KГц

1

7.8 KГц

9.8 KГц

15.63 KГц

19.5 KГц

 

4.2 кестесінде PWM =  «1» кезіндегі PWM периоды мен уақытын есептеуге арналған формулалар келтірілген.

           4.2 Кесте

Жиілік бөлгіші өшірілген (IOC2.2=0)

Жиілік бөлгіші қосылған (IOC2.2=1)

PWM  периоды (микросекундте)

=512 / Fosc

=1024 / Fosc

PWMx =“1” (микросекундте)

=PWMx_CONTROL x 2 / Fosc

=PWMx_CONTROL x 4 / Fosc

 

Мысалы, егер Fosc = 16 MГц және IOC2.2=0 болса, онда PWM шығысындағы сигнал периоды – 32 микросекунд. Егер PWM0_CONTROL-ға  8AH (138 ондық саны) жазылған және IOC2.2 =0 болса, PWM0 «1» жағдайында болады, периодтың барлық 32 микросекундынан 17.25 микросекунды (және 14.8 микросекунд «0» жағдайы), бұл кезде саңылау шамамен 54 %. IOC2.2 бір жағдайында болғанда дәл сол мәндер 64 микросекундты периодты генерациялайды және PWM0 «1» жағдайында болады – 34.5 микросекунд (және «0»-ге етң жағдай 29.5 микросекунд), бұрынғы саңылау шамамен 54 %.

 

PWMx_CONTROL – 8-битті мән және Fosc –резонатордың тактілік жиілігі MГц-те.

4.4 Суретінде ИЕМ-генератор жұмысының уақыттық диаграмасы келтірілген.

 

PWMx шығысы

 

PWMx= «1»

 

 

 

 

 

      PWM

периоды

 

 

 

 

 

Санағыштың толып кетуі

 

 

 

 

 

 

4.4 Сурет

 

PWM –нің әр шығысы порт түйіспесімен мультиплексерленеді. 4.3 кестесінде альтернативті функциясы – ендік-импультік модулятор шығысына сәйкесті енгізу/шығару порттарының түйіспелері келтірілген. Сондай-ақ басқару регистрі келтірілген, оның бір битін порт қызметінің орнына орнату порттың альтернативті қызметін - PWM шығысын таңдайды. PWM1 немесе PWM2-ні таңдаған кезде шығару функциясы 1 Портының квази-екібағытты функциясын өшіреді.

4.3 Кесте

PWM  шығыс

Порттың «PWM  шығыс» альтернативті функциясы осы жағдайларда мүмкін:

PWM0  P2.5

IOC1.0 = 1 (PWM_SEL)

PWM1  P1.3

IOC3.2 = 1 (PWM1_SEL)

PWM2  P1.4

IOC3.3 = 1 (PWM2_SEL)

 

4.5 – 4.7 суреттерінде PWM басқару регистрлерін бағдарламалауға арналған және және оларға терезелер арқылы жету жолдары туралы ақпарат келтірілген.

Input/Output Control Register

Енгізу/шығаруды басқаратын 1 Регистрі

 

 

Input/Output Control Register 1

IOC1

16H

   Hwindow 0 (Write), Hwindow 15 (Read)

 

IOC1

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

PWM_SEL

 

4.5 Сурет

 

Енгізу/шығаруды басқаратын 2 Регистрі

 

 

Input/Output Control Register 2

IOC2

0BH

Hwindow 0 (Write), Hwindow 15 (Read)

 

IOC2

7

6

5

4

3

2

1

0

 

 

 

 

 

SLOW_PWM

 

 

 

4.6 Сурет

 

 

Енгізу/шығаруды басқаратын 3 Регистрі

 

Input/Output Control Register 3

IOC3

0CH

Hwindow 1 (Read/Write)

 

IOC3

7

6

5

4

3

2

1

0

R

R

R

R

PWM2_SEL

PWM1_SEL

 

SEL

 

4.7 Сурет

 

PWM модулі сияқты, шығарудың тезәрекетті модулі (HSO) де әр түрлі периодты және саңылауы тік бұрышты импульстер тізбегін шығара алады. Бұл импульстерді сүзбеден өткізу тегіс аналогтық сигналдарды жасайды.

Рұқсат етілген аналогтық аралықта шығыс сигналдарының толқындарын жасау үшін, бірінші сигналды буферлеп және оны сүзбелден өткізу керек.

4.8 Суретінде тегіс аналогты сигналда жасауға керекті құрылымдық схема келтірілген. Сүзбе ретінде қарапайым RC-тізбегі немесе активті фильтр қолданылады.

4.8 Сурет

 

4.2 Жұмыстың орындалу тәртібі

4.2.1 Микроконтроллердің PWM блогының құрылуын оқып үйрену. PWM басқару регистрлерін бағдарламалауға және оларға терезе арқылы қол жеткізуге аса көңіл бөліңіз.

4.2.2 Микроконтроллердің ЕИМ жабдықтарымен аналогтық сигналды құру бағдарламасын жазыңыз. PWM1 арансын қолдана отырып (зертханалық макетті схемалық іске асырумен шартталған) төменде келтірілгендерден оқытушы көрсеткен формалы аналогты сигнал өзгеруін құрыңыз.

4.2.2      Бағдрламаны компиляциялап контроллерге жүктеңіз. Бағарламаны орындалуға жіберіңіз. Нәтижені светодиодтар мен виртуалды панельдерден бақылаңыз. Ол үшін сіз жазған бағдарламаға ad.mca файлындағы арнайы модульді қойыңыз, ол процесстерді экранда виртуалдық құрылғылар ретінде көрсетуді қамтамасыз етеді. Бағдарламаны компиляциялап контроллерге жүктеңіз. Содан кейін біртұтастандырылғпн қаптан шығып виртуалды құрылғылар бағдарламасын жіберу керек, яғни «Осциллограф» іштер жүйесін ашу.

4.2.3 ЕИМ жұмыс істеу режимі мен аналогты сигнал құру параметрлерін өзгертіңіз.

4.2.4      Қолданылған басқару регистріне көңіл аудара отырып алған нәтижелерді тіркеңіз.

4.2.5      Жұмысты оқытушыға жасап көрсетіңіз.

4.3 Аналогты сигналдар формалары

4.9 суретінде бір периодқа (Т) сәйкесті сигналдардың формалары көрсетілген. Жұмыс кезінде периодтар шексіз қайталану керек. Суреттер номері тапсырма варианттарына сәйкесті. Х осі бойынша периодтағы сигналдар санағының номері, Y осі бойынша санақтар амплитудасы көрсетілген. Бірқатар тапсырма варианттарында периодта сигнал өзгеру тәуелділігінің формулалары келтірілген.

 

 

4.9 Сурет

 

 4.4 Есеп мазмұны

4.4.1 ЕИМ блогын бғдарламалау. 8XC196KC терезелерінде басқару регистрлерін табу.

4.4.2          PWM1_COMMAND басқару сөз форматы.

4.4.3          Алгоритм схемалары және оларды іске асыратын бағдарламалар.

 

Әдебиеттер тізімі

1.        Бойко В.И. и др. Микропроцессоры и микроконтроллеры. – СПб.: БХВ – Петербург, 2004. – 464 с.

2.        Козаченко В.Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS – 196/296 во встроенных системах управления. – М.: ЭКОМ, 1997. – 688 с.

 

Мазмұны

1 № 1  Зертханалық  жұмысы

1.1 Жалпы мағлұмат

1.2 Жұмыстың орындалу тәртібі1

1.3 Бағдарлама фрагменттері

1.4 Есеп мазмұны

2 № 2  Зертханалық жұмысы

2.1 Жалпы мағлұмат

2.2 Жұмыстың орындалу тәртібі

2.3 Бағдарлама мысалдары

 2.3.1Микроконтроллердің бұйрықтар жүйесінің ерекшеліктерін

талдау

2.3.2 Бағдарламаны MCS-96 асемблер тілінде өрнектеу мысалы

2.4 Есеп мазмұны

3 № 3 Зертханалық жұмысы

3.1 Жалпы мағлұмат

3.1.1 1 және 2 таймерлерінің қысқа сипаттамалары

3.1.2 2 Таймерін бағдарламалау

3.1.3 Таймер бойынша үзіліс

3.2 Таймерді бағдарламалау мысалы

3.3 Жұмыстың орындалу тәртібі

3.4 Бағдарламаны орындау мысалы

3.5 Есеп мазмұны

4 № 4 Зертханалық жұмысы

4.1 Жалпы мағлұмат

4.2 Жұмыстың орындалу тәртібі

4.3 Аналогты сигналдар формалары

4.4 Есеп мазмұны

Әдебиеттер тізімі