Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ERSARY 5 ILIPBAEVA.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

5 Сурет. «eeprom жадысымен жұмыс» орындалатын программа

3 мысал. Математикалық операция: ішкі бағдарлама көбейтуі

Компилятор, ассемблер және ретке келтіруші жұмыстары. Бұл мысалда екі сан көбейтіледі: 123 (он алтылық 7B) және 234 (он алтылық EA), 28782 нәтижесін аламыз (он алтылық 706E). Программа мәтіні келесідей болады:

Dim a As Word

'бірінші санды сақтау үшін айнымалы

Dim b As Word

'екінші санды сақтау үшін айнымалы

Dim x As Word

'нәтижені сақтау үшін айнымалы

a = 123

'бірінші мәнді орнатамыз

b = 234

'екінші мәнді орнатамыз

x = a * b

'нәтижені есептейміз және х айнымалысына саламыз

Бұл программаны PIC Simulator IDE жібереміз, 1 мысалдың алғашқы төрт әрекетін орындап, жалғастырамыз:

1. multiply.bas файлын таңдаймыз және Open (редакторе бұл программа редакторда көрсетіледі) батырмасын басамыз;

2.Tools|Compile (компилятор multiply.asm файлын ассемблердегі бастапқы мәтінмен түрлендіреді) басамыз;

3.BASIC Compiler терезесін жабамыз;

4.Tools|Assembler басамыз;

5.File|Open басамыз;

6.multiply.asm файлын таңдаймыз және Open (ассемблердегі программа редакторда көрсетіледі) батырмасын басамыз;

7.Tools\Assemble (операция аяқталғаннан кейін, ассемблер екі файлды түрлендіреді: multiply.lst және multiply.hex; multiply.lst шығыс файлы редакторда көрсетіледі) басамыз;

8. Assembler терезесін жабу;

9. File|Load Program басу;

10.multiply.hex файлын таңдаймыз және Open батырмасын басамыз;

11. Tools|Breakpoints Manager (Breakpoints Manager терезесі ашылады) басамыз;

12. «Да» басамыз,файл берген ассемблерді пайдалану үшін;

13. 0018 адресіне сәйкесті жолды басамыз,осы командадағы бақылау нүктесін анықтау үшін;

14. Hold PC In Focus option таңдаймыз;

15. Rate|Extremely Fast simulation rate таңдаймыз;

16. Simulation|Start (модельдеу басталады) басамыз.

Бұл математикалық ішкі бағдарлама біткен кезде, программа 0018 адрестегі шексіз циклға кіреді, бірақ бақылау нүктенің кесірінен PIC Simulator IDE автоматты түрде Step by step модельдеу режиміне қосылып кетеді. PIC Simulator IDE жұмысын Simulation|Stop батырмасын басып тоқтатуға болады немесе оның орындалуын бақылау нүктесін кетіріп және Rate|Extremely батырмасын басып жалғастыруға болады. 19 және 18 регистрлер бірінші параметрді құрайды: 007B. 1BH және 1AH регистрлер екінші параметрді құрайды: 00EA. 706E нәтижесі 1DH және 1CH регистрлерінде болады. Орындалатын программа 6 суретте көрсетілген.

6 Сурет. « Математикалық операция: ішкі бағдарлама көбейтіндісі» орындалатын программа

4 мысал. Мәліметтердің 7 сегментті дисплейде көрсетілуі

Бұл программа 0-ден 99-ға дейінгі санды 7 сегментті дисплейде көрсетіледі, олар параллельді қосылған және екі линиямен басқарылады. Қайта қосылу үшін TMR0 үзілістің мультиплекстеу процедурасы пайдаланылады. 7segment.bas файлынан программаның мәтіні келесідей болады:

Dim digit As Byte

'GETMASK ішкі бағдарламасы үшін кірісті айнымалы

Dim digit1 As Byte

'жоғары сандардың қазіргі мәні

Dim digit2 As Byte

'кіші сандардың қазіргі мәні

Dim mask As Byte

'GETMASK ішкі бағдарламасы үшін шығысты айнымалы

Dim mask1 As Byte

'жоғары сандардың қазіргі мәні

Dim mask2 As Byte

'кіші сандардың қазіргі мәні

Dim i As Byte Dim phase As Bit Symbol d1enable = PORTC.0

'7- сегментті дислейдің жоғары элементі үшін линия басқаруы

Symbol d2enable = PORTC.1

' 7- сегментті дислейдің кіші элементі үшін линия басқаруы

TRISB = %00000000

' PORTB портын шығуға баптау

TRISC.0 = 0

' RC0 портын шығуға баптау

TRISC.1 = 0

' RC1 портын шығуға баптау

d1enable = False

d2enable = False

mask1 = 0

mask2 = 0

phase = 0

INTCON.T0IE = 1

' үзілісті қосамыз

Timer0 INTCON.GIE = 1

' барлық үзілісті қосамыз

OPTION_REG.T0CS = 0

' Timer0 ішкі генераторға орнатамыз

loop:

For i = 0 To 99 digit1 = i / 10

' жоғары сандар үшін қазіргі санды аламыз

digit2 = i Mod 10

' кіші сандар үшін қазіргі санды аламыз

TMR0 = 0

'Timer0 лақтырамыз, оның үзілісін алдын алу үшін

digit = digit1 Gosub getmask

' жоғары сандар үшін мәндер аламыз

mask1 = mask digit = digit2 Gosub getmask

' кіші сандар үшін мәндер аламыз

mask2 = mask Gosub show1

' жоғары сандардың жаңа мәндерін көрсетеміз

Gosub show2

' кіші сандардың жаңа мәндерін көрсетеміз

WaitUs 500

'модельдеу үшін кідіріс

'шынайы құрылғы үшін үлкен кідірісті пайдаланыңыз, мысалы WAITMS 500

Next i

Goto loop End On Interrupt

'Timer0 үзілістің ішкі бағдарламасы кідіріссіз бірінші және екінші дисплейді қосады

If phase = 0 Then

phase = 1

Gosub show1

Else

phase = 0

Gosub show2

Endif

INTCON.T0IF = 0

'үзіліске рұқсат береді

TMR0 Resume getmask:

'кіріс сандар үшін 7 сегментті дисплейдің сәйкесті мәнін аламыз

mask = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), digit

Return

show1:

'жоғары санды дисплейге шығарамыз

d2enable = False

PORTB = mask1

d1enable = True Return

show2:

'кіші санды дисплейге шығарамыз

d1enable = False

PORTB = mask2

d2enable = True

Return

Бұл программаның нәтижесін PIC Simulator IDE қарайық. Ол үшін 1 мысалдың алғашқы үш әрекетін орындаймыз, микроконтроллердің PIC16F877 моделін таңдаймыз:

1. 7segment.hex файлын таңдаймыз және Open (программа жүктелді) батырмасын басамыз;

2. Tools|7Segment LED Displays Panel (төрт 7 сегментті дисплей терезесі ашылады) басамыз;

3. Setup батырмасын басамыз, «2» нөмір дисплейден төмен;

4. Дисплейдің қасындағы қызғылт сары аймақты басамыз, осы дисплейді қосып/ өшіру үшін;

5. «4»енгіземіз, PORTC таңдау үшін және кейін ОК басамыз;

6. «0»енгіземіз, RC0 шығуды таңдау үшін және кейін ОК басамыз;

7. Setup батырмасын басамыз, «1» нөмір дисплейден төмен;

8. Дисплейдің қасындағы қызғылт сары аймақты басамыз, осы дисплейді қосып/ өшіру үшін;

9. «4»енгіземіз, PORTC таңдау үшін және кейін ОК басамыз;

10. «1»енгіземіз, RC0 шығуды таңдау үшін және кейін ОК басамыз;

11. Hide Setup батырмасын басамыз, экранды кеңістікті аз ғана сақтау үшін;

12. Rate|Ultimate (No Refresh) таңдаймыз;

13. Simulation|Start (программаны орындау басталады) басамыз.

Программа 0-ден 99-ға дейінгі санды екі 7 сегментті дисплейде көрсетеді, ол үшін TMR0 үзілісті мультиплекстеу процедурасын пайдаланады.Экранда мәліметтерді сақтай отырып, Keep Last Display опциясымен эксперимен жасау керек. Орындалатын программа 7 суретте көрсетілген.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]