Итак, нейтрализация проводится с применением химических элементов в следующей пропорции: на моль хлорного железа (162 г) требуется три моля извести (171 г). То есть примерно, сколько по весу хлорного железа, столько и извести. Реакция будет проходить с выделением большого количества тепла, поэтому известь нужно добавлять постепенно. И еще будет выделяться некоторое количество газа (углекислого), так как в извести обязательно будет карбонат, поглощающий газ CO2 из воздуха. Только применение таких операций позволит минимизировать оказываемые при утилизации отработанных растворов воздействия на окружающую среду.
ЗАКЛЮЧЕНИЕ
В заключении данного дипломного проекта, хочу отметить, что все поставленные задачи были решены с максимальной экономией технических, трудовых, материальных ресурсов. Предложенный вариант обладает широким спектром преимуществ перед своими аналогами и, безусловно, с легкостью может быть запущен в серийное производство. Уверен, что предложенное решение сможет достойно конкурировать на рынке.
В процессе дипломного проектирования я проявил полученные мною в процессе обучения знания, решил поставленную передо мной задачу и подтвердил свою квалификацию как техника-электроника.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Цифровые интегральные микросхемы: Справочник./М.И. Богданович, И.Н. Грель и др. – Мн.: Беларусь, 1991.
2. В.В. Фролов. Язык радиосхем – М.: Радио и связь, 1988.
3. Справочная книга радиолюбителя-конструктора/А.А Бокуняев, Н.М. Борисов, Р.Г. Варламов и др.;Под ред. Н.И.Чистякова. – М.: Радио и связь, 1990
4. Сайт www.gaw.ru
5. Сайт www.atmel.ru
6. Сайт www.shema.ru
7. Сайт www.schem.ru
8. Сайт www.redair.narod.ru
9. Сайт www.diagram.com.ua
10. Сайт www.radiotexnika.ru
11. Сайт www.radiochainik.narod.ru
12. Сайт www.gelezo.com
13. Сайт www.qrz.ru
14. Сайт www.brgu.ru
ПРИЛОЖЕНИЕ А
Команды Ассемблера микроконтроллеров серии AT90S производства компании ATMEL
Мнемоника | Операнды | Описание | Операция | Флаги | Циклы |
ADD | Rd,Rr | Суммирование без переноса | Rd = Rd + Rr | Z,C,N,V,H,S | 1 |
ADC | Rd,Rr | Суммирование с переносом | Rd = Rd + Rr + C | Z,C,N,V,H,S | 1 |
SUB | Rd,Rr | Вычитание без переноса | Rd = Rd - Rr | Z,C,N,V,H,S | 1 |
SUBI | Rd,K8 | Вычитание константы | Rd = Rd - K8 | Z,C,N,V,H,S | 1 |
SBC | Rd,Rr | Вычитание с переносом | Rd = Rd - Rr - C | Z,C,N,V,H,S | 1 |
SBCI | Rd,K8 | Вычитание константы с переносом | Rd = Rd - K8 - C | Z,C,N,V,H,S | 1 |
AND | Rd,Rr | Логическое И | Rd = Rd · Rr | Z,N,V,S | 1 |
ANDI | Rd,K8 | Логическое И с константой | Rd = Rd · K8 | Z,N,V,S | 1 |
OR | Rd,Rr | Логическое ИЛИ | Rd = Rd V Rr | Z,N,V,S | 1 |
ORI | Rd,K8 | Логическое ИЛИ с константой | Rd = Rd V K8 | Z,N,V,S | 1 |
EOR | Rd,Rr | Логическое исключающее ИЛИ | Rd = Rd EOR Rr | Z,N,V,S | 1 |
COM | Rd | Побитная Инверсия | Rd = $FF - Rd | Z,C,N,V,S | 1 |
NEG | Rd | Изменение знака (Доп. код) | Rd = $00 - Rd | Z,C,N,V,H,S | 1 |
SBR | Rd,K8 | Установить бит (биты) в регистре | Rd = Rd V K8 | Z,C,N,V,S | 1 |
CBR | Rd,K8 | Сбросить бит (биты) в регистре | Rd = Rd · ($FF - K8) | Z,C,N,V,S | 1 |
INC | Rd | Инкрементировать значение регистра | Rd = Rd + 1 | Z,N,V,S | 1 |
DEC | Rd | Декрементировать значение регистра | Rd = Rd -1 | Z,N,V,S | 1 |
TST | Rd | Проверка на ноль либо отрицательность | Rd = Rd · Rd | Z,C,N,V,S | 1 |
CLR | Rd | Очистить регистр | Rd = 0 | Z,C,N,V,S | 1 |
SER | Rd | Установить регистр | Rd = $FF | None | 1 |
ADIW | Rdl,K6 | Сложить константу и слово | Rdh:Rdl = Rdh:Rdl + K6 | Z,C,N,V,S | 2 |
SBIW | Rdl,K6 | Вычесть константу из слова | Rdh:Rdl = Rdh:Rdl - K6 | Z,C,N,V,S | 2 |
MUL | Rd,Rr | Умножение чисел без знака | R1:R0 = Rd * Rr | Z,C | 2 |
MULS | Rd,Rr | Умножение чисел со знаком | R1:R0 = Rd * Rr | Z,C | 2 |
MULSU | Rd,Rr | Умножение числа со знаком с числом без знака | R1:R0 = Rd * Rr | Z,C | 2 |
FMUL | Rd,Rr | Умножение дробных чисел без знака | R1:R0 = (Rd * Rr) << 1 | Z,C | 2 |
FMULS | Rd,Rr | Умножение дробных чисел со знаком | R1:R0 = (Rd *Rr) << 1 | Z,C | 2 |
FMULSU | Rd,Rr | Умножение дробного числа со знаком с числом без знака | R1:R0 = (Rd * Rr) << 1 | Z,C | 2 |
Мнемоника | Операнды | Описание | Операция | Флаги | Циклы |
RJMP | k | Относительный переход | PC = PC + k +1 | None | 2 |
IJMP | Нет | Косвенный переход на (Z) | PC = Z | None | 2 |
EIJMP | Нет | Расширенный косвенный переход на (Z) | STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND | None | 2 |
JMP | k | Переход | PC = k | None | 3 |
RCALL | k | Относительный вызов подпрограммы | STACK = PC+1, PC = PC+k+1 | None | 3/4* |
ICALL | Нет | Косвенный вызов (Z) | STACK = PC+1, PC = Z | None | 3/4* |
EICALL | Нет | Расширенный косвенный вызов (Z) | STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND | None | 4* |
CALL | k | Вызов подпрограммы | STACK = PC+2, PC = k | None | 4/5* |
RET | Нет | Возврат из подпрограммы | PC = STACK | None | 4/5* |
RETI | Нет | Возврат из прерывания | PC = STACK | I | 4/5* |
CPSE | Rd,Rr | Сравнить, пропустить если равны | if (Rd ==Rr) PC = PC 2 or 3 | None | 1/2/3 |
CP | Rd,Rr | Сравнить | Rd -Rr | Z,C,N,V,H,S | 1 |
CPC | Rd,Rr | Сравнить с переносом | Rd - Rr - C | Z,C,N,V,H,S | 1 |
CPI | Rd,K8 | Сравнить с константой | Rd - K | Z,C,N,V,H,S | 1 |
SBRC | Rr,b | Пропустить если бит в регистре очищен | if(Rr(b)==0) PC = PC+2 or 3 | None | 1/2/3 |
SBRS | Rr,b | Пропустить если бит в регистре установлен | if(Rr(b)==1) PC = PC+2 or 3 | None | 1/2/3 |
SBIC | P,b | Пропустить если бит в порту очищен | if(I/O(P,b)==0) PC = PC+ or 3 | None | 1/2/3 |
SBIS | P,b | Пропустить если бит в порту установлен | if(I/O(P,b)==1) PC = PC+2 or 3 | None | 1/2/3 |
BRBC | s,k | Перейти если флаг в SREG очищен | if(SREG(s)==0) PC = PC+k+1 | None | 1/2 |
BRBS | s,k | Перейти если флаг в SREG установлен | if(SREG(s)==1) 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(S==0) PC = PC + k + 1 | None | 1/2 |
BRLT | k | Перейти если меньше (со знаком) | if(S==1) PC = PC + k + 1 | None | 1/2 |
BRHS | k | Перейти если флаг внутреннего переноса установлен | if(H==1) PC = PC + k + 1 | None | 1/2 |
BRHC | k | Перейти если флаг внутреннего переноса очищен | if(H==0) PC = PC + k + 1 | None | 1/2 |
BRTS | k | Перейти если флаг T установлен | if(T==1) PC = PC + k + 1 | None | 1/2 |
BRTC | k | Перейти если флаг T очищен | if(T==0) PC = PC + k + 1 | None | 1/2 |
BRVS | k | Перейти если флаг переполнения установлен | if(V==1) PC = PC + k + 1 | None | 1/2 |
BRVC | k | Перейти если флаг переполнения очищен | if(V==0) 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 |
MOVW | Rd,Rr | Скопировать пару регистров | Rd+1:Rd = Rr+1:Rr, r,d even | None | 1 |
LDI | Rd,K8 | Загрузить константу | Rd = K | None | 1 |
LDS | Rd,k | Прямая загрузка | Rd = (k) | None | 2* |
LD | Rd,X | Косвенная загрузка | Rd = (X) | None | 2* |
LD | Rd,X+ | Косвенная загрузка с пост-инкрементом | 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+ | Косвенная загрузка с пост-инкрементом | 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+ | Косвенная загрузка с пост-инкрементом | 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* |
STS | k,Rr | Прямое сохранение | (k) = Rr | None | 2* |
ST | X,Rr | Косвенное сохранение | (X) = Rr | None | 2* |
ST | X+,Rr | Косвенное сохранение с пост-инкрементом | (X) = Rr, X=X+1 | None | 2* |
ST | -X,Rr | Косвенное сохранение с пре-декрементом | X=X-1, (X)=Rr | None | 2* |
ST | Y,Rr | Косвенное сохранение | (Y) = Rr | None | 2* |
ST | Y+,Rr | Косвенное сохранение с пост-инкрементом | (Y) = Rr, Y=Y+1 | None | 2 |
ST | -Y,Rr | Косвенное сохранение с пре-декрементом | Y=Y-1, (Y) = Rr | None | 2 |
ST | Y+q,Rr | Косвенное сохранение с замещением | (Y+q) = Rr | None | 2 |
ST | Z,Rr | Косвенное сохранение | (Z) = Rr | None | 2 |
ST | Z+,Rr | Косвенное сохранение с пост-инкрементом | (Z) = Rr, Z=Z+1 | None | 2 |
ST | -Z,Rr | Косвенное сохранение с пре-декрементом | Z=Z-1, (Z) = Rr | None | 2 |
ST | Z+q,Rr | Косвенное сохранение с замещением | (Z+q) = Rr | None | 2 |
LPM | Нет | Загрузка из программной памяти | R0 = (Z) | None | 3 |
LPM | Rd,Z | Загрузка из программной памяти | Rd = (Z) | None | 3 |
LPM | Rd,Z+ | Загрузка из программной памяти с пост-инкрементом | Rd = (Z), Z=Z+1 | None | 3 |
ELPM | Нет | Расширенная загрузка из программной памяти | R0 = (RAMPZ:Z) | None | 3 |
ELPM | Rd,Z | Расширенная загрузка из программной памяти | Rd = (RAMPZ:Z) | None | 3 |
ELPM | Rd,Z+ | Расширенная загрузка из программной памяти с пост-инкрементом | Rd = (RAMPZ:Z), Z = Z+1 | None | 3 |
SPM | Нет | Сохранение в программной памяти | (Z) = R1:R0 | None | - |
ESPM | Нет | Расширенное сохранение в программной памяти | (RAMPZ:Z) = R1:R0 | None | - |
IN | Rd,P | Чтение порта | Rd = P | None | 1 |
OUT | P,Rr | Запись в порт | P = Rr | None | 1 |
PUSH | Rr | Занесение регистра в стек | STACK = Rr | None | 2 |
POP | Rd | Извлечение регистра из стека | Rd = STACK | None | 2 |
Мнемоника | Операнды | Описание | Операция | Флаги | Циклы |
LSL | Rd | Логический сдвиг влево | Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) | Z,C,N,V,H,S | 1 |
LSR | Rd | Логический сдвиг вправо | Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) | Z,C,N,V,S | 1 |
ROL | Rd | Циклический сдвиг влево через C | Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) | Z,C,N,V,H,S | 1 |
ROR | Rd | Циклический сдвиг вправо через C | Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) | Z,C,N,V,S | 1 |
ASR | Rd | Арифметический сдвиг вправо | Rd(n)=Rd(n+1), n=0,...,6 | Z,C,N,V,S | 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 |
SBI | P,b | Установить бит в порту | I/O(P,b) = 1 | None | 2 |
CBI | P,b | Очистить бит в порту | I/O(P,b) = 0 | None | 2 |
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 = 1 | N | 1 |
CLN | Нет | Очистить флаг отрицательного числа | N = 0 | N | 1 |
SEZ | Нет | Установить флаг нуля | Z = 1 | Z | 1 |
CLZ | Нет | Очистить флаг нуля | Z = 0 | Z | 1 |
SEI | Нет | Установить флаг прерываний | I = 1 | I | 1 |
CLI | Нет | Очистить флаг прерываний | I = 0 | I | 1 |
SES | Нет | Установить флаг числа со знаком | S = 1 | S | 1 |
CLN | Нет | Очистить флаг числа со знаком | S = 0 | S | 1 |
SEV | Нет | Установить флаг переполнения | V = 1 | V | 1 |
CLV | Нет | Очистить флаг переполнения | V = 0 | V | 1 |
SET | Нет | Установить флаг T | T = 1 | T | 1 |
CLT | Нет | Очистить флаг T | T = 0 | T | 1 |
SEH | Нет | Установить флаг внутреннего переноса | H = 1 | H | 1 |
CLH | Нет | Очистить флаг внутреннего переноса | H = 0 | H | 1 |
NOP | Нет | Нет операции | Нет | None | 1 |
SLEEP | Нет | Спать (уменьшить энергопотребление) | Смотрите описание инструкции | None | 1 |
WDR | Нет | Сброс сторожевого таймера | Смотрите описание инструкции | None | 1 |
Ассемблер не различает регистр символов. Операнды могут быть таких видов:
- Rd: Результирующий (и исходный) регистр в регистровом файле
- Rr: Исходный регистр в регистровом файле
- b: Константа (3 бита), может быть константное выражение
- s: Константа (3 бита), может быть константное выражение
- P: Константа (5-6 бит), может быть константное выражение
- K6; Константа (6 бит), может быть константное выражение
- K8: Константа (8 бит), может быть константное выражение
- k: Константа (размер зависит от инструкции), может быть константное выражение
- q: Константа (6 бит), может быть константное выражение
- Rdl:R24, R26, R28, R30. Для инструкций ADIW и SBIW
- X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)