Алгоритм выполнения расчетного задания

Основы микропроцессорной техники.

Методические указания к выполнению расчетно – графической части.

Шифр и наименование дисциплины:

ЕН.В.01.01 Основы микропроцессорной техники.

 

Специальность, для которой читается дисциплина (шифр группы): 140203.65

 

Написание рефератов, расчетно-графических, курсовых, дипломных (проектов) работ – является составной частью учебного процесса, и направлено на более полное знакомство, изучение цифровых систем релейной защиты и автоматики, микропроцессорных терминалов релейной защиты.

Микропроцессорные терминалы релейной защиты пришли на смену электромеханических реле, на смену полупроводниковых реле. История внедрения микропроцессорных терминалов имеет несколько этапов.

1. На первом этапе, при появлении на рынке новых цифровых систем, стояла задача убедить потребителей в том, что новая техника способна выполнять те же задачи, что и существующие, главным образом электромеханические реле. Поэтому логика работы микропроцессорных терминалов просто копировала, повторяла логику работы электромеханических реле. В качестве примера, обратно зависимая время – токовая характеристика срабатывания МТЗ цифровых терминалов копировала эту характеристику электромеханических токовых реле. Это стандартная обратнозависимая выдержка времени SIT/A по стандарту МЭК. Это облегчало процесс внедрения новой техники, замены электромеханических реле на микропроцессорные терминалы, сопряжение в одной системе электромеханических реле и новых терминалов цифровой защиты. 

2. Второй этап происходит в настоящее время, когда развитие цифровых систем защиты привело к появлению большого числа новых защит, новых, не известных для электромеханических реле, возможностей.

· Цифровые системы широко используют амплитуды высших гармоник (вплоть до 13 - ой гармоники основной частоты 50 Гц). Высшие гармоники используются для обнаружения переходных процессов. Существуют и защиты по напряжению высших гармоник: например, защита по минимальному напряжению третьей гармоники, код ANSI 27TN / 64G2 (терминалы SEPAM фирмы «Шнейдер Электрик»).

· Используются сложные методы обработки сигналов, невозможные для электромеханических, полупроводниковых реле. В качестве примера можно привести использование нейронной сети для обработки сигналов в дифференциальной защите трансформаторов код ANSI 87T (терминалы SEPAM фирмы «Шнейдер Электрик»).

3. Третий этап, будущее микропроцессорных терминалов защиты, будет определятся несколькими направлениями:

· Расширением номенклатуры, увеличением числа различных по стоимости, микропроцессорных терминалов. Появление на рынке простых микропроцессорных терминалов, цифровых реле прямого действия (питающихся от сигнальных цепей, не требующих оперативного питания), предназначенных для замены одиночных электромеханических, полупроводниковых реле.

· Размещение микропроцессорных терминалов вне подстанций, вдоль распределенной сети электроснабжения. Это позволяет более качественно производить коммерческий учет электроэнергии, позволяет ускорить поиск места повреждения. Данное направление носит название Smart grid, и связано с широким использованием цифровых линий связи (проводных, оптоволоконных, беспроводных – GSM модемов). 

 

Тематика рефератов, расчетно-графических, курсовых, дипломных (проектов) работ.

1. Проектирование микропроцессорных устройств релейной защиты.

2. Программирование периферийных устройств микроконтроллера.

3. Разработка алгоритма функционирования микропроцессорной системы релейной защиты.

4. Разработка микропроцессорной системы.

5. Разработка программного обеспечения канала связи микроконтроллера и компьютера.

6. Разработка программы цифровой фильтрации входного сигнала микроконтроллера.

 

1. Проектирование микропроцессорных устройств релейной защиты.

    Проектирование заключается в разработке структурной схемы микропроцессорных устройств релейной защиты:

· Аналоговой части,

· цифровой части,

· элементов питания,

· входных промежуточных преобразователей аналоговых сигналов,

· входных фильтров низкой частоты аналогового сигнала,

· входных, выходных цепей логических сигналов,

· входных, выходных цепей цифровой связи,

подбора необходимых элементов (микросхем, устройств):

· микроконтроллеров,

· АЦП,

· ЦАП,

· ОЗУ,

· ПЗУ,

· алфавитно-цифровых дисплеев,

· графических дисплеев,

· входных аналоговых фильтров,

· входных цепей логического сигнала,

· входных промежуточных преобразователей аналогового сигнала,

· выходных цепей логического сигнала (цепей управления выключателем, цепей сигнализации)

· выходных цифровых интерфейсов,

· интерфейса связи с внешним компьютером.

 

2. Программирование периферийных устройств микроконтроллера. Разработка программного обеспечения канала связи микроконтроллера и компьютера. Разработка программы цифровой фильтрации входного сигнала микроконтроллера.

    Программирование заключается в разработке алгоритмов, программ на языке С, на ассемблере – взаимодействия микропроцессора с периферийными устройствами:

· измерение входных аналоговых сигналов, программирование работы АЦП,

· формирование выходных аналоговых сигналов, программирование ЦАП,

· алгоритмы взаимодействия микроконтроллера с внешними цифровыми устройствами (компьютер, цифровая сеть),

 

3. Разработка алгоритма функционирования микропроцессорной системы релейной защиты. Разработка микропроцессорной системы.

    Микропроцессорные терминалы релейной защиты работают в составе большой цифровой системы защиты, контроля и управления электроэнергетическими сетями. В последнее время подобные цифровые системы в энергетике называют Smart grid. "Настало время поднять Россию на новую ступень цивилизации", - заявил в начале своей речи президент России Дмитрий Медведев, в своем обращении к Федеральному собранию 12 ноября 2009. По его мнению, России в XXI веке необходима всесторонняя модернизация. И повышение энергоэффективности - один из приоритетов модернизации экономики. Важную роль «Smart grid» технологий отмечают ведущие мировые лидеры. In 2009 President Barack Obama asked the United States Congress "to act without delay" to pass legislation that included doubling alternative energy production in the next three years and building a new electricity "smart grid". Разработка и описание различных аспектов функционирования системы Smart grid и посвящен данный пункт.

    Существует две стороны системы Smart grid:

· Первая связана с поставщиками электроэнергии, с развитием рыночных отношений в распределительных сетях, с установкой пунктов коммерческого учета электроэнергии (ПКУ) вдоль линий распределенной сети, с установкой приборов контроля качества электроэнергии, для ускорения поиска места повреждения в сети.

· Вторая связана с потребителями электроэнергии, с системами «Умный дом», с продолжением систем АЧР внутрь сети потребителя (что позволяет отключать не всего потребителя, а часть его мощностей).

 

Выполнение рефератов, расчетно-графических, курсовых, дипломных (проектов) работ необходимо выполнять на основе описаний микропроцессорных терминалов релейной защиты Российских и зарубежных компаний.

 

Расчетное задание.

 

Записать программу на языке СИ для AVR- контроллера AT90S2313 c использованием генератора программного кода компилятора CodeVisionAVR, реализующую следующий алгоритм. Пусть номер студента по журналу (d) и номера группы (четырехзначный год поступления) (k).

k=2004;

d=10;               

x1=k*d;

x=x1+x1/2+x1/4+x1/8+x1/16+x1/32;

Вычисленный байт (x) записать в один из четырех выделенных именованных ячеек ОЗУ bait1, bait2, bait3, bait4, в соответствии с содержанием двух младших битов вычисленного байта (x). Проверить работу программы в пакете AVRStudio.

В отчете о выполнении расчетного задания привести:

· тексты программы на языке СИ, 

· и ее аналога на языке Ассемблер,

· вычисленный байт (х),

· и адрес ячейки ОЗУ, куда он записался.

Уметь объяснять использованные команды как на языке СИ, так и на языке Ассемблер.

Описать структуру области машинных кодов, записанных в ПЗУ, пользуясь окном “Disassembler” пакета AVRStudio.

Привести адреса и функциональное назначение каждой области.

 

Пример программы.

 

void main()

{int k,x1;

short int a,d,b;

unsigned char bait1=0x00,bait2=0x00,bait3=0x00,bait4=0x00;

unsigned short int x;

k=2004;

d=10;               

x1=k*d;

x=x1+x1/2+x1/4+x1/8+x1/16+x1/32;

b=0b00000011;

a=(b)&(x);

if(a==0b00000000)

{bait1=x;   //=0b00000000;

}

if(a==0b00000001)

{bait2=x;   //=0b00000001;

}

if(a==0b00000010)

{bait3=x;   //=0b00000010;

}

if(a==0b00000011)

{bait4=x;   //=0b00000011;

}

x=x;

}

 

Вместо операторов if можно использовать оператор switch:

 

switch (a) {

case 0b00000000: bait1=x; break;

case 0b00000001: bait2=x; break;

case 0b00000010: bait3=x; break;

case 0b00000011: bait4=x; break;

}

 

Алгоритм выполнения расчетного задания.

1. Открыть программу CodeVisionAVR: (Пуск\Все программы)

2. Создать новый проект:

3. , нажать «OK»,

4. Использовать мастер CodeWizardAVR:

5. Выбрать тип микроконтроллера

6. Создать проект

7. Сохранить файлы проекта (например, в папке C:\temp\), задавая для разных файлов одно имя. При этом в именах файлов, папок - необходимо использовать только латинские буквы, и длина имени не должна быть больше 8 букв.

8. Создается заготовка программы, дорабатываем программу – добавляем свой код внутрь скобок while (1) { … }.

9. Компилируем проект .

10. В нижнем окне сообщений – не должно быть сообщений об ошибках.

11. Запускаем отладку программы .

12. Открывается программа AVRStudio, в которой необходимо открыть файл проекта с расширением .COF .

13. Необходимо выбрать AVRsimulator, тот же тип микроконтроллера .

14. Откроется файл проекта, появится желтая стрелка, указывающая текущую команду.

15. Для наблюдения за переменными необходимо открыть окно Watch: .

16. Нажимая правую клавишу мыши в окне Watch – добавить переменные, значения которых будем наблюдать: .

17. Нажимая F10 (выполнение одного шага программы) – наблюдаем, как меняются переменные при исполнении команд программы.

18. В конце программы – видим результат, который необходимо сохранить в виде картинки (нажимая PrintScreen, открыть Пуск\Все программы\Стандартные\Paint, вставить картинку из буфера, вырезать необходимый фрагмент, вставить в файл отчета – документ Word - .doc).

19. Текст программы на языке Assembler можно просмотреть, открыв окно Disassembler: .

20. Содержимое памяти можно наблюдать, открыв окно Memory .

 

Набор команд ассемблера

 

 Мнемоника Операнды Описание          Действие   Флаги Циклы

 

 АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ

 

 ADD  Rd, Rr Сложить два регистра Rd=Rd+Rr   Z,C,N,V,H 1

 ADC  Rd, Rr Сложить с переносом Rd=Rd+Rr+C Z,C,N,V,H 1

 ADIW Rd,K Сложить слово с конст Rdh,l<Rdh,l+K Z,C,N,V,S 2

 SUB  Rd, Rr Вычесть два регистра Rd=Rd-Rr   Z,C,N,V,H 1

 SUBI Rd, K Вычесть константу Rd=Rd-K    Z,C,N,V,H 1

 SBIW     Rdl,K6 Вычесть слово из конст Rdh,l<Rdh,l-K Z,C,N,V,S 2

 SBC  Rd, Rr Вычесть с переносом Rd=Rd-Rr-C Z,C,N,V,H 1

 SBCI Rd, K Вычесть с переносом Rd=Rd-K-C  Z,C,N,V,H 1

 AND  Rd, Rr Логическое И      Rd=Rd AND Rr Z,N,V 1

 ANDI Rd, K Логическое И      Rd=Rd AND K Z,N,V 1

 OR   Rd, Rr Логическое ИЛИ    Rd=Rd OR Rr Z,N,V 1

 ORI  Rd, K Логическое ИЛИ    Rd=Rd OR K Z,N,V 1

 EOR  Rd, Rr Исключающее ИЛИ   Rd=Rd XOR Rr Z,N,V 1

 COM  Rd  Дополнение до 1   Rd=$FF - Rd Z,C,N,V 1

 NEG  Rd  Дополнение до 2   Rd=$00 - Rd Z,C,N,V,H 1

 SBR  Rd,K Установ. бит(ы) в рег. Rd=Rd OR K     Z,N,V 1

 CBR  Rd,K Сброс. бит(ы) в рег. Rd=RdAND(FFh-K) Z,N,V 1

 INC  Rd  Увеличить на 1    Rd=Rd+1    Z,N,V 1

 DEC  Rd  Уменьшить на 1    Rd=Rd-1    Z,N,V 1

 TST  Rd  Провериить на 0 или - Rd=Rd AND Rd Z,N,V 1

 CLR  Rd  Очистить регистр  Rd=Rd XOR Rd Z,N,V 1

 SER  Rd  Установить регистр Rd=$FF     None  1

 

 КОМАНДЫ ВЕТВЛЕНИЯ

 

 RJMP k   Относительный переход  PC=PC+k+1  None  2

 LJMP          Переход по адресу (Z) PC=Z       None  2

 RCALL k   Относ. вызов подпрогр. PC=PC+k+1  None  3

 ICALL         Вызов подпр по адр (Z) PC=Z       None  3

 RET           Выход из подпрограммы PC=STACK   None  4

 RETI          Выход из прерывания PC=STACK   I     4

 CPSE Rd,Rr Сравнить,пропуск если if(Rd==Rr)

               равно             PC=PC+2 или 3 None  1/2

 CP   Rd,Rr Сравнить          Rd-Rr      Z,N,V,C,H 1

 CPC  Rd,Rr Сравнить с переносом Rd-Rr-C    Z,N,V,C,H 1

 CPI  Rd,K Сравнить с константой Rd-K       Z,N,V,C,H 1

 SBRC Rr,b Пропуск если бит  if(Rr(b)==0)

               в регистре сброшен PC=PC+2 или 3 None 1/2

 SBRS Rr,b Пропуск если бит  if(Rr(b)==1)

               в регистре установлен PC=PC+2 или 3 None 1/2

 SBIC P, b Пропуск если бит в рег if(P(b)==0)

               ввода/выв. сброшен PC=PC+2 или 3 None 1/2

 SBIS P, b Пропуск если бит в рег if(P(b)==1)

               ввода/выв. установлен PC=PC+2 или 3 None 1/2

 BRBS s, k Переход если установл. if(SREG(s)==1)

               флаг s            PC=PC+k+1  None 1/2

 BRBC s, k Переход если сброшен if(SREG(s)==0)

               флаг s            PC=PC+k+1  None 1/2

 BREQ k   Переход если равно if(Z==1)

                                      PC=PC+k+1  None 1/2

 BRNE k   Переход если неравно if(Z==0)

                                      PC=PC+k+1  None 1/2

 BRCS k   Переход если установл. if(C==1)

               перенос           PC=PC+k+1  None 1/2

 BRCC k   Переход если сброшен if(C==0)

               перенос           PC=PC+k+1  None 1/2

 BRSH k   Переход если равно или if(C==0)

               больше            PC=PC+k+1  None 1/2

 BRLO k   Переход если меньше if(C==1)

                                      PC=PC+k+1  None 1/2

 BRMI k   Переход если минус if(N==1)

                                      PC=PC+k+1  None 1/2

 BRPL k   Переход если плюс if(N==0)

                                      PC=PC+k+1  None 1/2

 BRGE k   Переход если больше if(N XOR V==0)

               или равно,со знаком PC=PC+k+1  None 1/2

 BRLT k   Переход если меньше if(N XOR V==1)

               нуля, со знаком   PC=PC+k+1  None 1/2

 BRHS k   Переход если установл. if (H==1)

               флаг H            PC=PC+k+1  None 1/2

 BRHC k   Переход если сброшен if (H==0)

               флаг H            PC=PC+k+1  None 1/2

 BRTS k   Переход если установл. if (T==1)

               флаг T            PC=PC+k+1  None 1/2

 BRTC k   Переход если сброшен if (T==0)

               флаг T            PC=PC+k+1  None 1/2

 BRVS k   Переход если установл. if (V==1)

               флаг V (переполнение) PC<PC+k+1  None 1/2

 BRVC k   Переход если сброшен if (V==0)

               флаг V            PC=PC+k+1  None 1/2

 BRIE k   Переход если разрешены if(I==1)

               прерывания        PC=PC+k+1  None 1/2

 BRID k   Переход если запрещены if(I==0)

               прерывания        PC=PC+k+1  None 1/2

 

 КОМАНДЫ ПЕРЕСЫЛКИ

 

 MOV  Rd,Rr Пересылка между рег.  Rd=Rr      None  1

 LDI  Rd,K Загрузить константу Rd=K       None  1

 LD   Rd,X Загрузить регистр не-

               посредственно     Rd=(X)     None  2

 LD   Rd,X+ Загрузить регистр не-

               поср. c пост инкрем. Rd=(X),X=X+1 None  2

 LD   Rd,-X Загрузить регистр не-

               поср. с предв.декрем. X=X-1,Rd=(X) None  2

 LD   Rd,Y Загрузить регистр не-

               посредственно     Rd=(Y)     None  2

 LD   Rd,Y+ Загрузить регистр не-

               поср. c пост инкрем. Rd=(Y),Y=Y+1 None  2

 LD   Rd,-Y Загрузить регистр не-

               поср. с предв.декрем. Y=Y-1,Rd=(Y) None  2

 LDD  Rd,Y+q Загрузить регистр не-

               поср. со смещением Rd=(Y+q)   None  2

 LD   Rd,Z Загрузить регистр не-

               посредственно     Rd=(Z)     None  2

 LD   Rd,Z+ Загрузить регистр не-

               поср. c пост инкрем. Rd=(Z),Z=Z+1 None  2

 LD   Rd,-Z Загрузить регистр не-

               поср. с предв.декрем. Z=Z-1,Rd=(Z) None  2

 LDD  Rd,Z+q Загрузить регистр не-

               поср. со смещением Rd=(Z+q)   None  2

 LDS  Rd,k Загрузить из ОЗУ  Rd=(k)     None  3

 ST   X,Rr Записать регистр не-

               посредственно     (X)=Rr     None  2

 ST   X+,Rr Записать регистр не-

               поср.c пост инкр. (X)=Rr, X=X+1 None  2

 ST   -X,Rr Записать регистр не-

               поср.c пред.декрем. X=X-1,(X)=Rr None  2

 ST        Y,Rr Записать регистр не-

               посредственно     (Y)=Rr     None  2

 ST   Y+,Rr Записать регистр не-

               поср.c пост инкр. (Y)=Rr, Y=Y+1 None  2

 ST   -Y,Rr Записать регистр не-

               поср.c пред.декрем. Y=Y-1,(Y)=Rr None  2

 STD  Y+q,Rr Запис.рег.непоср.со

               смещением         (Y+q)=Rr   None  2

 ST   Z,Rr Записать регистр не-

               посредственно     (Z)=Rr     None  2

 ST   Z+,Rr Записать регистр не-

               поср.c пост инкр. (Z)=Rr,Z=Z+1 None  2

 ST   -Z,Rr Записать регистр не-

               поср.c пред.декрем. Z=Z-1,(Z)=Rr None  2

 STD  Y+q,Rr Запис.рег.непоср.со

               смещением         (Y+q)=Rr   None  2

 STS  k,Rr Записать в ОЗУ    (k)=Rr     None  3

 LPM           Загр.из памяти прогр. R0=(Z)      None  3

 IN   Rd, P Ввод из порта     Rd=P       None  1

 OUT  P, Rr Вывод в порт      P=Rr       None  1

 PUSH Rr  Записать в стек   STACK=Rr   None  2

 POP  Rr  Прочитать из стека Rr=STACK   None  2

 

 КОМАНДЫ РАБОТЫ С БИТАМИ

 

 SBI  P,b Установить бит в рег. I/O(P,b)=1 None  2

               ввода/вывода

 CBI  P,b Сбросить бит в рег. I/O(P,b)=0 None  2

                  ввода/вывода

 LSL  Rd  Логический сдвиг влево Rd(n+1)=Rd(n),

                                      Rd(0)=0    Z,C,N,V 1

 LSR  Rd  Логич.сдвиг вправо Rd(n)=Rd(n+1),

                                      Rd(7)=0    Z,C,N,V 1

 ROL  Rd  сдвиг влево через C Rd(0)=C,

                                      Rd(n+1)=Rd(n),

                                      C=Rd(7)    Z,C,N,V 1

 ROR  Rd  сдвиг вправо через C Rd(7)=C,

                                      Rd(n)=Rd(n+1),

                                      C=Rd(0)    Z,C,N,V 1

 ASR  Rd  Арифметический сдвиг Rd(n)=Rd(n+1),

               вправо            n=0..6     Z,C,N,V 1

 SWAP Rd  Обмен нибблов     Rd(3-0)=Rd(7-4)

                                      Rd(7-4)=Rd(3-0) None  1

 BSET s   Установить флаг   SREG(s)=1  SREG(s) 1

 BCLR s   Сбросить флаг        SREG(s)=0  SREG(s) 1

 BST  Rr,b Запомнить бит в T T=Rr(b)    T     1

 BLD  Rd, b Прочитать бит из T Rd(b)=T    None  1

 SEC           Установить перенос C=1        C     1

 CLC           Сбросить перенос  C=0        C     1

 SEN           Установить флаг N N=1        N     1

 CLN           Сбросить флаг N   N=0        N     1

 SEZ           Установить флаг Z Z=1        Z     1

 CLZ           Сбросить флаг Z   Z=0        Z     1

 SEI           Разрешить прерывания I=1        I     1

 CLI           Запретить прерывания I=0        I     1

 SES           Установить флаг S S=1        S     1

 CLS           Сбросить флаг S   S=0        S     1

 SEV           Установить флаг V V=1        V     1

 CLV           Сбросить флаг V   V=0        V     1

 SET           Установить флаг T T=1        T     1

 CLT           Сбросить флаг T   T=0        T     1

 SEH           Установить флаг H H=1        H     1

 CLH           Сбросить флаг H   H=0        H     1

 NOP           Нет операции                      None  1

 SLEEP         Останов                           None  3

 WDR           Сброс сторожевого таймера         None  1

 

 

ЯЗЫК ПРОГРАММИРОВАНИЯ МИКРОПРОЦЕССОРА - СИ

АЛФАВИТ ЯЗЫКА СИ

1. Прописные и строчные буквы латинского алфавита;

2. Цифры от 0 до 9;

3. Спецзнаки (-, /, ., [], (), +, -) и др.;

4. В комментариях, строках и символьных константах могут использоваться русские буквы.

Комментарий формируется как последовательность знаков ограниченных слева символами /*, а справа */. Комментарий может отделяться слева символом // (в этом случае комментарий может быть записан только в одну строку).

Служебные слова – это зарезервированные в языке идентификаторы, которые нельзя выбирать в качестве имен переменных и констант.

Примеры служебных слов:

- double

- goto

- void

КОНСТАНТЫ ЯЗЫКА СИ

Символьные константы

Для изображения отдельных знаков, имеющих индивидуальные внутренние коды, используются символьные константы.

Символьные константы изображаются с помощью ограничивающих одинарных апострофов: Ох, О, Оb, десятичные цифры записываются без префиксов.

    Пример №1:

· в десятичной форме - 1234

· в двоичной форме с префиксом 0b так: 0b101001

· в шестнадцатеричной форме с префиксом 0x так: 0x5А

· в восьмеричной форме с префиксом 0 так: 0775

Для перевода чисел из одного вида в другой можно использовать калькулятор Windows (в инженерном виде).

Целые константы.

Под константы выделяется 2 байта или 4 байта. Двухбайтные константы имеют тип int. Этот тип бывает знаковый и без знаковый (соответственно, signed int, unsigned int) просто int – знаковый тип.

Четырехбайтные константы имеют тип long. Этот тип бывает знаковый и без знаковый.

Вещественные константы.

Эти константы, представляют в памяти процессора в форме с плавающей точкой. Каждая вещественная константа состоит из следующих частей:

· целая часть,

· десятичная точка,

· дробная часть,

· признак показателя «е» или «Е»,

· показатель десятичной степени.

Константы перечисляемого типа.

Вводятся с помощью перечисления enum.

Enum - служебное слово, вводящее перечисление идентификатором.

Используя запятые, определяют значения константы.

Например:

Enum (one=1, two, three).

Если в списке константы нет ни одного числового значения, то значения констант начинается с О и увеличиваются на 1 слева направо.

Строковые константы.

Определяются как последовательность символов, заключенных в двойные кавычки.

Переменные являются объектами – именованной областью памяти. Для задания этой области памяти необходимо знать тип переменной, так как от этого зависит объем выделенной памяти.

 

ФОРМАТ ОПРЕДЕЛЕНИЯ ПЕРЕМЕННОЙ

Формат определения переменной состоит из двух частей, разделенных пробелом: 1) тип; 2) список имен переменных.

Существуют следующие целочисленные типы.

Char – целый тип длиной не менее 8 бит.

Short int – короткий, целый 1 байт

Int – целый 2 байт

Long – 4 байта

Каждый из целочисленных типов может быть определен как знаковый, т.е. впереди типа добавляется signed либо как без знаковый - unsigned.

Если тип знаковости не уточнен, по умолчанию получается тип signed – знаковый.

Существует следующие вещественные типы переменных и констант.

Float - вещественный тип одинарной точности, т.е. 7 значащих цифр в десятичном представлении.

Double – двойной точности, т.е. 14 значащих цифр в десятичном представлении.

Long double – максимальной точности, , т.е. 28 значащих цифр в десятичном представлении.

Инициализация переменных происходит следующим образом:

Тип список имен переменных = значение переменных.

Для инициализации констант, кроме слова enum используются следующая запись:

Const тип список имен констант = значение констант;

Еще одну возможность обеспечивает препроцессорная директива (команда для компилятора):

# define имя константы значение константы.

Для того, чтобы использовать директиву define, которая вводит в нашу программу именованные константы, записанные через служебные слова, используют еще раньше этой директивы директиву .include:

# include < limits.h > стандартный файл с расширением H.

Файл с расширением h содержит именованные константы.

 

ОПЕРАЦИИ ЯЗЫКА СИ

Бинарная операция использует два операнда, а унарная – один операнд.

Большинство операций языка Си совпадают с операциями языка ассемблер.

Унарные (однооперандные) операции

1. & - операция получения адреса операнда.

2. * - операция обращения по адресу, или операция разыменования, т.е. р = *а доступна по адресу к объекту на который указывает операнд.

3. − - изменяет знак арифметического операнда, а если операнд без знаковый, то результатом операции является величина 2n, где n – число бит, выделяемое под данную переменную.

4. ~ - поразрядное инвертирование внутреннего двойного кода целочисленного аргумента, или побитовое отрицание.

5. ! – это логическое отрицание значения операнда, результатом является ноль, если операнд ненулевой и результатом является единица, если операнд нулевой.

6. ++ - увеличение на 1 операнда, имеет две формы:

· префиксная операция: увеличение значения операнда на 1 до его использования,

· постфиксная операция: увеличение значения операнда на 1 после его использования.

7. -- - уменьшение на 1 (декремент), также имеет две формы:

· префиксная,

· постфиксная.

Операндами для обоих операций не может быть константа и производное выражение (++5 ; ++(j+k)).

Операндами этих операций должны быть модифицируемые именные переменные

8. sizeof – операция вычисления размера в байтах для операнда. Имеет две формы:

· sizeof выражение (р.а или р+а или ...)

· sizeof тип

Бинарные (двухоперандные) операции.

1. Арифметические операции в Си

x + y – операция «сложение»
x - y – операция « вычитание»
x * y – операция « умножение»

x / y – операция « деление». Если числа целые, то результат - целое число с отброшенной дробной частью - не округленное! Т.е., если в результате деления на калькуляторе получается 6.23411 или 6.94, то результат будет просто целое число 6 - запомните!

Если числа с плавающей точкой, то есть float или double и записываются с точкой и числом после точки, то и результат будет число с плавающей точкой .

x % y – операция «вычисления остатка от деления нацело».

2. Операция сдвига: определены только для целочисленных операндов:

<< - операция сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда.

3. Поразрядная операция:

^ - операция «поразрядное сложение по модулю два» (исключающее ИЛИ) битовых представлений значений целочисленных операндов.

4. Операции отношений или сравнений.

Используются для сравнения переменных, чисел (констант) и выражений.

x < y – операция «x меньше y»
x > y – операция «больше»
x <= y – операция «меньше или равно»
x >= y – операция «больше или равно»
x == y – операция «равно»
x != y – операция «не равно».

Результат выполнения этих операций:

"истина" это "1" (точнее "не ноль")

"ложно" это "0

Значения, хранимые в переменных (в регистрах) х и у, НЕ изменяются! Берутся (считываются) значения хранящиеся (или содержащиеся) в переменных и сравниваются.

5. Логические операции:

|| - операция "ИЛИ" - только "ложь" и "ложь" дают «ложь». Дизъюнкция (ИЛИ) арифметических операндов.

Пример: у= 5||1, у=1;

           у=5||0, у=1.
&& - операция «конъюнкции» (И) арифметических операндов или отношений. Результат целочисленный: О или 1."И" - только "истина" и "истина" дают "истина".

! – операция "НЕ" - логическое отрицание

Правило - в Си считается:

"Ложь" (False) только ноль.

"Истина"(True)- не ноль или так: (!0) */

! (истина) – дает "ложь"

! (ложь) – дает "истина"

В результате логической операции вы получаете НЕ ЧИСЛО, а логическое значение "истина" или "ложь".

Для логических операций && и || берутся результаты выражений слева и справа от знака операции, преобразованные в "истину" или "ложь", и определяется логический результат операции.

Компилятор результат "истина" превращает в 1, а не в любое отличное от 0 число.

Совет: Используйте скобки:

( () + ( () * () ) ),

чтобы точно знать порядок выполнения операций программой!

6. Операция присваивания.

Чтобы поместить число в переменную (в регистр) в Си, есть оператор присваивания это знак =, называемый в математике "равно".

= в Си означает вычислить результат того, что справа от оператора присваивания и поместить этот результат в переменную находящуюся левее оператора присваивания.

PORTB = PINB + 34; Эта строчка на Си означает: взять (прочитать, считать) значение переменной (регистра) PINB, затем прибавить к нему число 34 и поместить результат в переменную PORTB

| "ИЛИ" (OR только 0 и 0 дают 0). Поразрядная дизъюнкция (ИЛИ) битовых представлений значений целочисленных операндов;

^ "иключающее ИЛИ" (XOR изменить бит напротив "1"). Поразрядная (исключение ИЛИ) битовых представлений значений целочисленных операндов;

~ "инвертирование битов" (изменить биты регистра).

С оператором присваивания используются следующие сокращения:

+= присваивание после суммирования,

-= присваивание после вычитания,

<= присваивание после сдвига раз,рядов влево,

>>= присваивание после сдвига разрядов вправо,

&= присваивание после поразрядной конъюнкции (И),

|= присваивание после поразрядной дизъюнкции (ИЛИ),

^= присваивание после поразрядного исключающего ИЛИ.

Результатом поразрядных (побитных) логических операций: & | ^ ~, является число, которое может быть интерпретировано компилятором как "истина", если оно не ноль и "ложно", если число ноль.

Есть в Си операции которые изменяют значение переменной и без оператора присваивания:

PORTA++; Эта строчка на Си означает: взять значение переменной PORTA добавить к ней 1 и записать результат обратно в PORTA (говорят: Инкрементировать регистр PORTA).

PORTC--; Эта строчка на Си означает обратное действие! (Декрементировать - вычесть 1 из значения регистра PORTC).

 

Условные и циклические операторы.

if(){}else{}; идеальная конструкция, если вам нужно выполнить какую-то часть программы при наличии каких либо условий:

if (выражение) { /* делать этот код, если выражение "истина" - т.е. результат его вычисления не ноль */

}

else { /* делать этот код, если выражение "ложь" - т.е. результат его вычисления равен нулю */

};

} else { - это не обязательный элемент конструкции:

if (выражение) { /* делать этот код, если выражение "истина" - т.е. результат его вычисления не ноль */

};

while(){}; - это условный цикл - используйте если вам нужно выполнять какой-то код программы пока выполняется (существует, справедливо, не ноль) некоторое условие:

while (выражение) { /* делать этот код, если выражение "истина" - т.е. результат его вычисления не ноль. Пока выполняется этот код, выражение не проверяется на истинность! После выполнения кода происходит переход к строке while снова проверять истинность выражения.

};

Цикл while имеет вариант do – while, при котором код в { } выполняется по меньшей мере один раз, независимо от истинности условия в скобках:

do {/* сделать этот код один раз затем, если выражение есть "истина" - т.е. результат его вычисления не ноль - опять делать код с начала, и так до тех пор пока выражение является «истина» */ }
while (выражение);

for(;;){}; - этот цикл позволяет выполнить часть программы нужное число раз:

Циклы for (;;) и while() часто используют вот так:

while(1);

for (;;);

/* Так написанные эти циклы означают:

МК будет выполнять эту строчку пока есть питание, нет сброса и нет прерывания.

Когда возникает прерывание, программа переходит на обработчик прерывания и (если в обработчике нет перехода в другое место программы) по завершении кода обработчика опять возвращается в такой цикл. */

switch(){}; - оператор множественного выбора, позволяет вам сделать выбор из нескольких вариантов.

switch (выражение) {

case 5:

/* этот код будет выполняться, если результат вычисления выражения равен числу 5, на этом работа оператора switch закончится */

break;

default:

/* этот код будет выполняться, если результат вычисления выражения не равен ни 5, ни - 32, ни 'G', на этом работа оператора switch закончится */

};

goto - оператор безусловного (немедленного) перехода.

mesto_5: /* сюда мы попадем после выполнения строки программы goto mesto_5 */

 

Литература

 

1. Новиков Ю.В. Основы микропроцессорной техники. Курс лекций: учебное пособие/ Ю.В.Новиков, П.К.Скоробогатов. -2-е изд., М.: ИНТУИТ.РУ. "Интернет-Университет Информационных Технологий", 2004.

 

2. Гусев В.Г. Электроника и микропроцессорная техника: учебник/ В.Г.Гусев, Ю.М.Гусев. -3-е изд., М.: Высш.шк., 2005.

 

3. Подбельский В.В. Язык Си ++: учебное пособие/ В.В.Подбельский. -5-е изд.. М.: Финансы и статистика, 2005.


Дата добавления: 2018-02-28; просмотров: 387; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!