- •1 Pic16f8x микроконтроллерлерінің құрылымы
- •1.1 Pic16f84a микроконтроллерінің архитектурасы
- •1.1 Сурет
- •1.2 Бағдарлама жадысының ұйымдастырылымы
- •1.3 Дерек жадысының ұйымдастырылымы
- •1.4 Арнайы қызмет регистрлері
- •1.2 Сурет
- •2 Pic16f8x микроконтроллерлерінің командалары
- •1.5 Команда көрсеткіші
- •1.3 Сурет
- •2.1 Сурет
- •2.1 Байттармен істеуші командалар
- •2.2 Биттермен істеуші командалар
- •2.3 Басқару командалары және константамен жұмыс жүргізу
- •2.4 Pic микроконтроллерлерін бағдарлау ерекшеліктері
- •3 Pic микроконтроллерлерін бағдарлаудың қалыпты тәсілдері
- •3.1 Импульстер тізбесін қалыптастыру
- •3.1 Сурет
- •3.2 Сандар тізбесін қалыптастыру
- •3.2.1 Деректерді тура сілтеу.
- •3.2.2 Деректерді жанама сілтеу.
- •3.2 Сурет
- •3.3 Есептелімді ауыстырылымдар
- •3.3.1 Бағдарламаның goto командалары арқылы тарамдалуы.
- •3.3 Сурет
- •3.3.2 Кестелі түрлендірілімдер.
- •3.4 Сурет
- •3.4 Динамикалы көрсетілім
- •3.5 Сурет
- •3.5 Екілік-ондық түрлендірілімдер
- •3.6 Үзілістер
- •3.6.1 Сыртқы сигналға байланысты үзіліс.
- •3.6 Сурет
- •3.6.2 Tmr0 таймерінің асып түсуіне байланысты үзіліс.
- •4 Перифериялық модулдермекн жұмыс ұйымдастырылуы
- •4.1 Eeprom жадысы
- •4.1.1 Eeprom жадысымен жұмыс ұйымдастыру принциптері.
- •4.1.2 Eeprom жадысының қолданылуы.
- •4.2 Таймер модулдері
- •4.2.1 Tmr1 таймері.
- •4.2.2 Tmr2 таймері.
- •4.3 Ccp модулі
- •4.3.1 Ұсталым режимі. Период ұзақтығын өлшеу.
- •4.3.2 Салыстырым режимі. Шектеме құрылғысы.
- •4.3.3 Еим режимі. Қуыстықты өзгерту.
- •4.4 Аналогты-цифрлық түрлендіргіш
- •Әдебиеттер тізімі
- •Мазмұны
3.1 Импульстер тізбесін қалыптастыру
Қарастырылып отырылған микроконтроллер түрінің жұмыс бағдарламасының құрылу тәртібін суреттеу үшін және бағдарлау кезінде кең пайдаланылатын регистрлер мен олардың биттерінің қызметімен бастапқы таныстыру үшін жиілігі 5 kHz (меандр түріндегі) импульстер тізбесінің нақтылы ұзақтықты кідірістер қолдану арқылы қалыптастырылуын жүзеге асырушы бағдарламаны қарастырамыз.
; Meander 5.0 KHz
;============================
; Microcontroller PIC16F84A
; Clock Frequency 4.0 MHz
;============================
Sec equ 0Ch
;--------------------------------------------
org 0
goto Start
;--------------------------------------------
Start bsf STATUS,RP0
clrf TRISB
movlw .1
movwf TRISA
bcf STATUS,RP0
clrf PORTB
clrf PORTA
;--------------------------------------------
btfss PORTA,0
goto $-1
;============================
Pulse bsf PORTB,0
movlw .32
movwf Sec
nop
nop
decfsz Sec,F
goto $-1
;--------------------------------------------
bcf PORTB,0
movlw .31
movwf Sec
nop
decfsz Sec,F
goto $-1
btfss PORTA,0
goto Start
goto Pulse
;--------------------------------------------
end
Бағдарламаның жоғарғы бөлігінде «бағдарлама басы» орналастырылған. Онда жобаның (яғни, моделденуші құрылғының) аталымы, микроконтроллердің нақтылы түрі (біздің жағдайда, PIC16F84A) және микроконтроллерге қосылатын тактілік генератордың жиілігі көрсетіледі.
Бағдарламаның келесі бөлігінде бағдарламада пайдаланылатын жалпы қызмет регистрлеріне қолдануға ыңғайлы аталымдар қойылуы жүзеге асырылады (біздің жағдайда – 0Ch адресі бойынша орналастырылған регистрге). Ұзақтығы 100 мкс кідірісті жүзеге асыруға арналған бұл регистр бірлік деңгей қалыптастыру барысында да, нөлдік деңгей қалыптастыру барысында да пайдаланылады.
Одан кейін бағдарламаның бірінші командасының орналастырылу адресін анықтаушы директива (org 0) мен бағдарламаның орындалу басына ауыстыру командасы (әдетте, goto Start) орналастырылған. Goto Start командасы бірден org 0 директивасынан кейін орналастырылғандықтан және осы команданың бағдарлама жадысындағы орны нөлдік адреспен анықталатындықтан, бағдарламаның орындалуы осы команданың өзінен басталады.
Микроконтроллер түрі, регистрлердің аталымдарының қойылуы, бағдарламаның орындала басталуына рұқсат берілуі, оның аяқталу белгісі директивалармен енгізіледі. Күрделірек бағдарламалар үшін «бағдарлама басы», әрине, біздің жағдайдағыдан үлкенірек болуы және ондағы аталымдары қойылған регистрлер саны мен директивалардың (оның ішінде басқа тұрлері де) саны көбірек болуы мүмкін.
Порт шықпаларының жұмысын «шығысқа» немесе «кіріске» қою TRISA және TRISB регистрлері арқылы жүзеге асырылады. Бұл регистрлер 1-банкте орналасқандықтан, банктердің ауыстырылуын жүзеге асыру керек (микроконтроллер жұмысының басында, яғни, бастапқы жағдайда, 0-банк қойылған).
1-банк (RP0) STATUS регистрінің 5-битін (RP0) бірге қою арқылы таңдалады, ал оның тазартылуында 0-банк таңдалады (3.1 кесте). STATUS регистрінде RP0 битімен қатар RP1 биті микроконтроллердің жаңартылған түрлеріндегі төрт банкке байланысуға мүмкіндік береді.
3.1 кесте – STATUS регистрі
Бит |
Аталымы |
Суреттемесі |
7 |
IRP |
Дерек банкінің парағын таңдау (жанама сілтеу кезінде пайдаланылады): 0 – 0,1 банктері; 1 – 2,3 банктері |
6-5 |
RP1, RP0 |
Дерек банкінің парағын таңдау (тура сілтеу кезінде пайдала-нылады): 00 – 0-банк; 01 – 1-банк; 10 – 2-банк; 11 – 3-банк |
4 |
T0’ |
Бақылау таймерінің әрекеті: 0 – бақылау таймерінің қойылған уақытының біткенінде; 1 – қорек көзі қосылғаннан кейін, оған қоса clrwdt және sleep командаларымен |
3 |
RD’ |
Тұтынылушы энергияның кемуі: 0 – sleep командасымен; 1 – қорек көзі қосылғаннан кейін және clrwdt командасымен |
2 |
Z |
Нөлдік ту |
1 |
DC |
Үшінші разрядтан ауысу туы |
0 |
C |
Жетінші разрядтан ауысу туы |
Сонымен, STATUS регистрінің 5-битін бірге қою керек (bsf STATUS,5 немесе bsf STATUS, RP0). RB1…RB7 шықпаларының жұмыс бағыты бізге қажет болмағандықтан, TRISB регистрінің барлық битін нөлге қоя саламыз, яғни, бұл регистрді тазартамыз (бастапқы жағдайда, порттардың шықпалары «кіріс» ретінде реттелген). RA0 шықпасы генератор жұмысын басқару кірісі ретінде (импульстер тізбесінің қалыптастырылу режимін қосу/ажырату) белгіленген, сондықтан бұл шықпа, TRISA регистрінің сәйкесті битін бірге қою арқылы (movlw .1 және movwf TRISA) «кіріс» ретінде істеуге қойылған. Сонымен, RB0 шықпасы «шығыс» ретінде (оған индикатор немесе осциллограф қосылған), ал RA0 шықпасы «кіріс» ретінде істейді (оған құрылғының жұмыс режимін ауыстыру түймесі қосылған). Алдағы жұмыс 0-банкте жүргізілетіндіктен, 0-банкке қайтып келеміз (bcf STATUS, RP0).
Жоғарыда келтірілген операцияларды дайындық операциялары ретінде қарастыруға болады. Олар құрылғының шығыс сигналының бастапқы деңгейін және режим ауыстыру түймесін нөлдік жағдайға қоюмен аяқталады (clrf PORTB және clrf PORTA).
Бағдарламаның «жұмыс тәртібін» тиянақталық. Сигнал «меандр» түрінде болғандықтан, сәйкесті деңгейлердің қалыптастырылу ұзақтығы бірдей болу керек. біздің бағдарламада ол – 100 мкс. Құрылғының жұмыс режимін ауыстыру түймесін (RA0) күту режимінен импульстер тізбесін қалыптастыру режиміне ауыстырғаннан кейн RB0 шықпасында 100 мкс ұзақтығында бірлік деңгей, сосын келесі 100 мкс ұзақтығында нөлдік деңгей қалыптастыру керек.
Период шегінде екідеңгейлі сигнал қалыптастырушы автотербелісті мультивибратордың жұмыс принципіне байланысты, бағдарламаның жұмыс нүктесі нақтылы уақыт шамасында бір циклде (бағдарламаның 1 деңгейін қалыптастыру бөлігінде), ал сосын – екінші циклде (бағдарламаның 0 деңгейін қалыптастыру бөлігінде) кідіре тұру керек. Сонымен, құрылғы импульстер тізбесін қалыптастыру режимінде тұрғанда, бағдарламаның толық циклі периодты түрде айналымда болу керек.
Кідірістің қосалқы бағдарламасы, қарапайым жағдайда, decfsz командасынан басталады да, ол алдында нақтылы сан (константа) енгізілген жалпы қызмет регистріне шығады. Регистрдегі сан мөлшері кідіріс ұзақтығын («айналым» санын) анықтайды.
Бағдарламаның бірлік деңгей қалыптастыру бөлігінде Sec регистріне .32 саны (константа) енгізілген. Бағдарламаның жұмыс нүктесі, оның кідіріс бөлігіне кіргенінен кейін одан кідіріс толықтай біткенше шықпайды. Бұл «айналымның» мағынасын былай түсіндіруге болады. Decfsz командасының орындалуы мен декремент операциясында нөлдік нәтиже болмауында, ауысу decfsz командасының өзіне болады да, бұл процесс регистрдегі сан нөлге дейін кемігенше қайталана береді, нәтижесінде қажетті кідіріс қалыптасады. Операцияның нөлдік нәтижесінде бағдарламаның жұмыс нүктесі кідіріс бөлігінен шығады.
Машина циклінің ұзақтығы арқылы кідіріс ұзақтығын дәл есептеуге болады. Алдымен Sec регистрінің бастапқы құрамын анықтап алу керек. Біздің жағдайда Sec регистріне .32 саны (нүкте – ондық санау жүйесінің атрибуты) жазылады. Бұл операция W регистрі арқылы жүзеге асырылады (movlw .32 және movwf Sec). Жоғарыда суреттелгендей, RB0 шықпасында нөлдік деңгей қалыптастыру үшін Sec регистріне келесі константа (.31 саны) жазылады.
Сонымен, В портының RB0 шықпасын басқаруға бәрі дайын. RB0 шықпасында бірлік деңгей қалыптастыру үшін биттік bsf командасын қолданамыз да, онда PORTB регистрінің бір қойылуы керек нөлдік битін көрсетеміз (bsf PORTB,0). RB0 шықпасында нөл қою бір қойылуындай істеледі, тек қана оған bcf командасы қолданылады (bcf PORTB,0).
Бірлік деңгей қалыптастырылуын қамтамасыз етуші константаның мәні неге .32 болу керектігін түсіндірелік. Қолданылатын кварц жиілігі – 4 МГц, демек, бір машина циклі – 1 мкс. Сонымен, RB0 шықпасында бір қойылған мезеттен оны нөлге ауыстырғанша 100 машина циклі өту керек. Егер Sec регистрінің құрамын декременттеу нәтижесі нөлге тең болмаса, онда бағдарламаның бір «айналымы» 3 машина циклінде орындалады: decfsz командасы бір машина циклінде, ал goto командасы – екі машина циклінде.
Сонымен, Sec регистрінің құрамының бірге кемітілуі 3 машина циклінде (3 мкс) орындалады. Sec регистрінің құрамының декременттелу нәтижесі нөлге тең болғанда, онда goto командасы орындалмайды да, бұл бағдарламадан шығу 2 машина циклінде жүзеге асырылады. Демек,.32 константасына 32х3-1=95 машина циклі (95мкс) сәйкес келеді. Оған Sec регистріне RB0 шықпасында бірлік деңгейдің уақытын қалыптастырушы константа қою командаларының (movlw .32 және movwf Sec) 2 машина циклін және RB0 шықпасында нөл қою командасының (bcf PORTB,0) 1 машина циклін қосамыз. Алынған 98 мкс уақытына қосымша енгізілген екі nop командасының 2 машина циклін қосамыз да, нәтижесінде дәл 100 мкс аламыз.
Sec регистрінің құрамын декременттеу нәтижесі нөлге тең болғаннан кейін бағдарламаның жұмыс нүктесі «айналымнан» шығады.
Осы сияқты қалыптастырылатын импульстер тізбесінің нөлдік деңгейінің ұзақтығын есептеп, бағдарламаның осы бөлігінде қойылған константа мәнінде (.31) бұндағы кідірістің де 100 мкс құратынына көз жеткізуге болады.
Кезекті импульстің нөлдік деңгейі қалыптастырылып біткеннен кейін құрылғының жұмыс режимін ауыстыру түймесі тексеріліп (btfss PORTA,0), оның жағдайына байланысты импульстер тізбесінің қалыптастырылуы жалғастырылады (goto Pulse) немесе құрылғы күту режиміне ауыстырылады (goto Start).
Симуляторды пайдаланып және құрылғыны жұмыс режимін ауыстыру түймесінің (RA0 шықпасының) жағдайын өзгерту арқылы құрылғыны күту режимінен жұмыс режиміне ауыстырып, импульстер тізбесінің қалыптастырылуын бақылауға (3.1 сурет) және оған қоса (өлшеу арқылы) оның параметрлерінің жоспарланған мәндерге сәйкес келетініне көз жеткізуге болады.
