Устройство управления тепловым режимом компьютера
Проблема охлаждения в компьютере. Выбор и описание прототипов разрабатываемого устройства. Разработка структурной и принципиальной схемы. Разработка программного обеспечения, его выбор и обоснование. Моделирование работы исследуемого устройства.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.11.2014 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
hex_to_binary_decimal:
ldi r19,0
mov r20, r18
div_10:
subi r20,10
brcs div_10_end // переход по переносу, C = 1
inc r19
jmp div_10
div_10_end:
subi r20,246
mov r18, r20
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма формирования импульса сброса для температурного датчика1 ///////////
reset_pulse_s1:
sbi ddrc, 0
cbi portc, 0
call delay_250
call delay_50
cbi ddrc, 0
call delay_250
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма формирования импульса сброса для температурного датчика2 ///////////
reset_pulse_s2:
sbi ddrc, 1
cbi portc, 1
call delay_250
call delay_50
cbi ddrc, 1
call delay_250
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма формирования импульса сброса для температурного датчика3 ///////////
reset_pulse_s3:
sbi ddrc, 2
cbi portc, 2
call delay_250
call delay_50
cbi ddrc, 2
call delay_250
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма формирования импульса сброса для температурного датчика4 ///////////
reset_pulse_s4:
sbi ddrc, 3
cbi portc, 3
call delay_250
call delay_50
cbi ddrc, 3
call delay_250
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма передачи данных по протоколу 1-wire температурному датчику2 ////////
transmit_byte_s2:
ldi r30,0
transmit_cycle_s2:
sbrc r31,0
jmp transmit_1_s2
transmit_0_s2:
sbi ddrc, 1
cbi portc, 1
call delay_30
call delay_10
cbi ddrc, 1
jmp transmit_s2
transmit_1_s2:
sbi ddrc, 1
cbi portc, 1
cbi ddrc, 1
call delay_50
transmit_s2:
ror r31
inc r30
cpi r30,8
brbc 1, transmit_cycle_s2
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма приема данных по протоколу 1-wire с температурного датчика2 ////////
reception_byte_s2:
ldi r30,0
ldi r31,0x01
reception_cycle_s2:
sbi ddrc, 1
cbi portc, 1
nop
cbi ddrc, 1
call delay_10
sbic pinc, 1
jmp reception_1_s2
reception_0_s2:
lsr r31
jmp reception_s2
reception_1_s2:
lsr r31
sbr r31,0x80
reception_s2:
call delay_50
inc r30
cpi r30,8
brbc 1, reception_cycle_s2
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма передачи данных по протоколу 1-wire температурному датчику4 ////////
transmit_byte_s4:
ldi r30,0
transmit_cycle_s4:
sbrc r31,0
jmp transmit_1_s4
transmit_0_s4:
sbi ddrc, 3
cbi portc, 3
call delay_30
call delay_10
cbi ddrc, 3
jmp transmit_s4
transmit_1_s4:
sbi ddrc, 3
cbi portc, 3
cbi ddrc, 3
call delay_50
transmit_s4:
ror r31
inc r30
cpi r30,8
brbc 1, transmit_cycle_s4
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма приема данных по протоколу 1-wire с температурного датчика4 ////////
reception_byte_s4:
ldi r30,0
ldi r31,0x01
reception_cycle_s4:
sbi ddrc, 3
cbi portc, 3
nop
cbi ddrc, 3
call delay_10
sbic pinc, 3
jmp reception_1_s4
reception_0_s4:
lsr r31
jmp reception_s4
reception_1_s4:
lsr r31
sbr r31,0x80
reception_s4:
call delay_50
inc r30
cpi r30,8
brbc 1, reception_cycle_s4
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма передачи данных по протоколу 1-wire температурному датчику3 ////////
transmit_byte_s3:
ldi r30,0
transmit_cycle_s3:
sbrc r31,0
jmp transmit_1_s3
transmit_0_s3:
sbi ddrc, 2
cbi portc, 2
call delay_30
call delay_10
cbi ddrc, 2
jmp transmit_s3
transmit_1_s3:
sbi ddrc, 2
cbi portc, 2
cbi ddrc, 2
call delay_50
transmit_s3:
ror r31
inc r30
cpi r30,8
brbc 1, transmit_cycle_s3
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма приема данных по протоколу 1-wire с температурного датчика3 ////////
reception_byte_s3:
ldi r30,0
ldi r31,0x01
reception_cycle_s3:
sbi ddrc, 2
cbi portc, 2
nop
cbi ddrc, 2
call delay_10
sbic pinc, 2
jmp reception_1_s3
reception_0_s3:
lsr r31
jmp reception_s3
reception_1_s3:
lsr r31
sbr r31,0x80
reception_s3:
call delay_50
inc r30
cpi r30,8
brbc 1, reception_cycle_s3
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма передачи данных по протоколу 1-wire температурному датчику1 ////////
transmit_byte_s1:
ldi r30,0
transmit_cycle_s1:
sbrc r31,0
jmp transmit_1_s1
transmit_0_s1:
sbi ddrc, 0
cbi portc, 0
call delay_30
call delay_10
cbi ddrc, 0
jmp transmit_s1
transmit_1_s1:
sbi ddrc, 0
cbi portc, 0
cbi ddrc, 0
call delay_50
transmit_s1:
ror r31
inc r30
cpi r30,8
brbc 1, transmit_cycle_s1
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма приема данных по протоколу 1-wire с температурного датчика1 ////////
reception_byte_s1:
ldi r30,0
ldi r31,0x01
reception_cycle_s1:
sbi ddrc, 0
cbi portc, 0
nop
cbi ddrc, 0
call delay_10
sbic pinc, 0
jmp reception_1_s1
reception_0_s1:
lsr r31
jmp reception_s1
reception_1_s1:
lsr r31
sbr r31,0x80
reception_s1:
call delay_50
inc r30
cpi r30,8
brbc 1, reception_cycle_s1
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма задержки на 50 циклов //////////////////////////////////////////////
delay_50:
ldi r21,50 // установить время задержки
ldi r20,0 // сбросить счетчик задержки
inc_50:
inc r20 // инкрементировать счетчик задержки
cpse r20, r21 // сравнить время и счетчик задержки
jmp inc_10 // вернуться инкрементированию счетчика (r20<r21)
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма задержки на 30 циклов //////////////////////////////////////////////
delay_30:
ldi r21,30 // установить время задержки
ldi r20,0 // сбросить счетчик задержки
inc_30:
inc r20 // инкрементировать счетчик задержки
cpse r20, r21 // сравнить время и счетчик задержки
jmp inc_30 // вернуться инкрементированию счетчика (r20<r21)
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма задержки на 9 циклов //////////////////////////////////////////////
delay_9:
ldi r21,9 // установить время задержки
ldi r20,0 // сбросить счетчик задержки
inc_9:
inc r20 // инкрементировать счетчик задержки
cpse r20, r21 // сравнить время и счетчик задержки
jmp inc_10 // вернуться инкрементированию счетчика (r20<r21)
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма задержки на 7 циклов //////////////////////////////////////////////
delay_7:
ldi r21,7 // установить время задержки
ldi r20,0 // сбросить счетчик задержки
inc_7:
inc r20 // инкрементировать счетчик задержки
cpse r20, r21 // сравнить время и счетчик задержки
jmp inc_10 // вернуться инкрементированию счетчика (r20<r21)
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма задержки на 10 циклов //////////////////////////////////////////////
delay_10:
ldi r21,10 // установить время задержки
ldi r20,0 // сбросить счетчик задержки
inc_10:
inc r20 // инкрементировать счетчик задержки
cpse r20, r21 // сравнить время и счетчик задержки
jmp inc_10 // вернуться инкрементированию счетчика (r20<r21)
ret
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма задержки на 250 циклов /////////////////////////////////////////////
delay_250:
ldi r21,250 // установить время задержки
ldi r20,0 // сбросить счетчик задержки
inc_250:
inc r20 // инкрементировать счетчик задержки
nop
nop
cpse r20, r21 // сравнить время и счетчик задержки
jmp inc_250 // вернуться инкрементированию счетчика (r20<r21)
nop
ret // выход из подпрограммы (r20=r21)
/////////////////////////////////////////////////////////////////////////////////////////////
/////////// подпрограмма задержки на 250*250 циклов /////////////////////////////////////////
delay_250_250:
ldi r23,250 // установить время задержки
ldi r22,0 // сбросить счетчик задержки
inc_250_250:
inc r22 // инкрементировать счетчик задержки
call delay_250
cpse r22, r23 // сравнить время и счетчик задержки
jmp inc_250_250 // вернуться инкрементированию счетчика (r20<r21)
nop
ret // выход из подпрограммы (r20=r21)
/////////////////////////////////////////////////////////////////////////////////////////////
////// Процедура задержки ////////
delay_1ms:
ldi R18, $51 // записать в рег r18 значение 0x05
WGLOOP0_1: ldi R19, $05 // записать в рег r19 значение 0x05
WGLOOP1_1: ldi R20, $0a // записать в рег r20 значение 0x2a
WGLOOP2_1: dec R20 // декремент r20
brne WGLOOP2_1 // перейти по метке если ноль
dec R19 // декремент r19
brne WGLOOP1_1 // перейти по метке если ноль
dec R18 // декремент r18
brne WGLOOP0_1 // перейти по метке если ноль
nop // нет операции
ret
/////////////////////////////////////////////////////////////////////////////////////////////
indic_simvola:
ldi r17, (0<<OCIE1B)
out TIMSK, r17 // разрешить прерывание по событию «совпадение B» таймера / счетчика Т1
ldi r19,0 // сбросить счетчик сдвинутого бита
shift_sing:
sbi portc, 7 // установить вывод 1 порта B в логическую 1
sbrs r18,0 // пропустить след операцию, если 0-ой бит рег r18 равен 1
cbi portc, 7 // сбросить вывод 1 порта B в лог 0
nop // нет операции
sbi portc, 6 // установить вывод 0 порта B в логическую 1
nop // нет операции
nop // нет операции
cbi portc, 6 // сбросить вывод 0 порта B в лог 0
lsr r18 // сдвинуть содержимое рег r18 в право
inc r19 // инкриментировать счетчик сдвинутого бита
cpi r19,8 // сравнить счетчик
brlo shift_sing // переход по меньше
ldi r17, (1<<OCIE1B)
out TIMSK, r17 // разрешить прерывание по событию «совпадение B» таймера / счетчика Т1
ret
//////////////////////////////////////////////////////////////////
Form_string:
ldi r20,0 // строка 1
mov Temp, T_fl // символ 10
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, T_ed // символ 9
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, T_dec // символ 8
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, T_nom // символ 7
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, T_symbol // символ 6
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, C_ed // символ 5
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, C_dec // символ 4
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, C_sotn // символ 3
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, C_nom // символ 2
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,0 // строка 1
mov Temp, C_symbol // символ 1
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r16,0b11111110 // включить первую строку светодиодного табло
out portd, r16 // включить первую строку светодиодного табло
rcall delay_1ms // перейти на подпрограмму задержки на 1 мс
ldi r16,0b11111111 // выключить все строки
out portd, r16 // выключить все строки
ldi r20,1 // строка 1
mov Temp, T_fl // символ 10
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, T_ed // символ 9
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, T_dec // символ 8
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, T_nom // символ 7
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, T_symbol // символ 6
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, C_ed // символ 5
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, C_dec // символ 4
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, C_sotn // символ 3
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, C_nom // символ 2
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,1 // строка 1
mov Temp, C_symbol // символ 1
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r16,0b11111101 // включить первую строку светодиодного табло
out portd, r16 // включить первую строку светодиодного табло
rcall delay_1ms // перейти на подпрограмму задержки на 1 мс
ldi r16,0b11111111 // выключить все строки
out portd, r16 // выключить все строки
ldi r20,2 // строка 1
mov Temp, T_fl // символ 10
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, T_ed // символ 9
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, T_dec // символ 8
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, T_nom // символ 7
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, T_symbol // символ 6
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, C_ed // символ 5
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, C_dec // символ 4
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, C_sotn // символ 3
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, C_nom // символ 2
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,2 // строка 1
mov Temp, C_symbol // символ 1
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r16,0b11111011 // включить первую строку светодиодного табло
out portd, r16 // включить первую строку светодиодного табло
rcall delay_1ms // перейти на подпрограмму задержки на 1 мс
ldi r16,0b11111111 // выключить все строки
out portd, r16 // выключить все строки
ldi r20,3 // строка 1
mov Temp, T_fl // символ 10
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, T_ed // символ 9
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, T_dec // символ 8
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, T_nom // символ 7
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, T_symbol // символ 6
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, C_ed // символ 5
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, C_dec // символ 4
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, C_sotn // символ 3
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, C_nom // символ 2
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,3 // строка 1
mov Temp, C_symbol // символ 1
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r16,0b11110111 // включить первую строку светодиодного табло
out portd, r16 // включить первую строку светодиодного табло
rcall delay_1ms // перейти на подпрограмму задержки на 1 мс
ldi r16,0b11111111 // выключить все строки
out portd, r16 // выключить все строки
ldi r20,4 // строка 1
mov Temp, T_fl // символ 10
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, T_ed // символ 9
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, T_dec // символ 8
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, T_nom // символ 7
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, T_symbol // символ 6
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, C_ed // символ 5
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, C_dec // символ 4
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, C_sotn // символ 3
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, C_nom // символ 2
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,4 // строка 1
mov Temp, C_symbol // символ 1
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r16,0b11101111 // включить первую строку светодиодного табло
out portd, r16 // включить первую строку светодиодного табло
rcall delay_1ms // перейти на подпрограмму задержки на 1 мс
ldi r16,0b11111111 // выключить все строки
out portd, r16 // выключить все строки
ldi r20,5 // строка 1
mov Temp, T_fl // символ 10
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, T_ed // символ 9
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, T_dec // символ 8
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, T_nom // символ 7
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, T_symbol // символ 6
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, C_ed // символ 5
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, C_dec // символ 4
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, C_sotn // символ 3
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, C_nom // символ 2
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,5 // строка 1
mov Temp, C_symbol // символ 1
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r16,0b11011111 // включить первую строку светодиодного табло
out portd, r16 // включить первую строку светодиодного табло
rcall delay_1ms // перейти на подпрограмму задержки на 1 мс
ldi r16,0b11111111 // выключить все строки
out portd, r16 // выключить все строки
ldi r20,6 // строка 1
mov Temp, T_fl // символ 10
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, T_ed // символ 9
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, T_dec // символ 8
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, T_nom // символ 7
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, T_symbol // символ 6
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, C_ed // символ 5
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, C_dec // символ 4
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, C_sotn // символ 3
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, C_nom // символ 2
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r20,6 // строка 1
mov Temp, C_symbol // символ 1
rcall read_TABL_symbol // перейти на подпрограмму чтения символа из таблицы
rcall indic_simvola // перейти на подпрограмму индикации символа
ldi r16,0b10111111 // включить первую строку светодиодного табло
out portd, r16 // включить первую строку светодиодного табло
rcall delay_1ms // перейти на подпрограмму задержки на 1 мс
ldi r16,0b11111111 // выключить все строки
out portd, r16 // выключить все строки
ret
read_TABL_symbol:
ldi zl, 0x00 // установить младший разряд для чтения таблицы
ldi zh, 0x10 // установить старший разряд для чтения таблицы
clc // сброс флага переноса заема C = 0
adc zl, r20 // прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_0 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_0:
clc // сброс флага переноса заема C = 0
adc zl, Temp // прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_1 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_1:
adc zl, Temp // прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_2 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_2:
adc zl, Temp // прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_3 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_3:
adc zl, Temp /прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_4 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_4:
adc zl, Temp // прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_5 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_5:
adc zl, Temp /прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_6 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_6:
adc zl, Temp // прибавить адрес текущего символа в кодировке ASCII к начальному адресу таблицы
BRCC adc_7 // переход если нет переноса
inc zh // инкриментировать старший адрес таблицы при переполнении младшего адреса
adc_7:
mov r17, temp // копировать символ из буфера в рег r17
subi r17,0x01 // сравнить код символа с 0x33
BRCS dec_zl_1 // переход если нет переноса, для учета сдвига таблицы
inc zl // декремент адреса z
dec_zl_1:
mov r17, temp // копировать символ из буфера в рег r17
subi r17,0x02 // сравнить код символа с 0x33
BRCS dec_zl_2 // переход если нет переноса, для учета сдвига таблицы
inc zl // декремент адреса z
dec_zl_2:
mov r17, temp // копировать символ из буфера в рег r17
subi r17,0x03 // сравнить код символа с 0x33
BRCS dec_zl_3 // переход если нет переноса, для учета сдвига таблицы
inc zl // декремент адреса z
dec_zl_3:
lpm r18, z // прочитать байт в рег r18, по адресу z памяти программ
ret
org 2048
db 0b00001100,0b00010010,0b00010010,0b00010010,0b00010010,0b00010010,0b00001100,0b00000000 // 0
db 0b00000100,0b00001100,0b00000100,0b00000100,0b00000100,0b00000100,0b00001110,0b00000000 // 1
db 0b00001100,0b00010010,0b00000010,0b00000100,0b00001000,0b00010000,0b00011110,0b00000000 // 2
db 0b00001100,0b00010010,0b00000010,0b00000100,0b00000010,0b00010010,0b00001100,/*3*/0b00000010,0b00000110,0b00001010,0b00010010,0b00011111,0b00000010,0b00000010,/*4*/0b00011110,0b00010000,0b00011100,0b00010010,0b00000010,0b00010010,0b00001100,/*5*/0b00001100,0b00010010,0b00010000,0b00011100,0b00010010,0b00010010,0b00001100,/*6*/0b00011110,0b00000010,0b00000100,0b00001000,0b00001000,0b00001000,0b00001000,/*7*/0b00001100,0b00010010,0b00010010,0b00001100,0b00010010,0b00010010,0b00001100,/*8*/0b00001100,0b00010010,0b00010010,0b00001110,0b00000010,0b00010010,0b00001100,/*9*/0b00011100,0b00010010,0b00010010,0b00011100,0b00010010,0b00010010,0b00011100,/*В*/0b00011111,0b00010101,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,/*T*/0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000/* */
6. Моделирование устройства
Моделирование устройства произведено в программе Proteus 7.7 (рисунок 12). Для упрощения моделирования из схемы исключены транзисторы, вентиляторы подключены напрямую к портам микроконтроллера.
Рисунок 12: Устройство управления тепловым режимом компьютера схема моделирования
Для контроля изменения напряжения питания вентиляторов параллельную с ними цепь включены вольтметры (рисунок 13). Для визуального контроля сигнала ШИМ к управляющим портам микроконтроллера подключен осциллограф (рисунок 14).
Рисунок 13: подключение вольтметров
Рисунок 14: сигнал ШИМ на осциллографе
Заключение
В результате выполнения курсового проекта было спроектировано устройство управления тепловым режимом компьютера: разработаны структурная и принципиальная схемы, написана программа для микроконтроллера, произведено моделирование работы устройства. Разработанное устройство способно управлять одновременно 4-мя вентиляторами, задавая разные скорости вращения для каждого из них. Скорость изменяется в зависимости от температуры измеренной 4-мя датчиками температуры. Весь процесс работы отображается на табло состоящее из 10 матричных светодиодных индикаторов.
Разработанное устройство может быть легко интегрировано в системный блок компьютера, так как не займет много места и совместимо по питанию (имеет питание 5 В и 12 В), а табло индикации может быть выведены на переднею панель системного блока.
Список использованных источников
[1] Radio-hobby [Электронный ресурс]. - Электронные данные. - Режим доступа: http://radio-hobby.org/modules/news/article.php? storyid=78
[2] Chipinfo [Электронный ресурс]. - Электронные данные. - Режим доступа: http://www.chipinfo.ru/literature/radio/200209/p20.html
[3] Radioparty [Электронный ресурс]. - Электронные данные. - Режим доступа: http://radioparty.ru/index.php/prog-avr/153-cooler-atmega48
[4] Radiokot [Электронный ресурс]. - Электронные данные. - Режим доступа: http://radiokot.ru/circuit/digital/pcmod/08/
[5] Gaw [Электронный ресурс]. - Электронные данные. - Режим доступа: http://www.gaw.ru/html.cgi/txt/ic/Atmel/micros/avr/atmega16.htm
[6] Евстафеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL; Додэка - XXI, М. 2008;
[7] Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы; Додэка - XXI, М. 2004;
[8] Atmel®-A [Электронный ресурс]: Datasheet / Atmel Corporation. - Электронные данные. - Режим доступа: doc2466.pdf.
[9] Programmable ® - [Электронный ресурс]: Datasheet / Programmable Resolution - Электронные данные. - Режим доступа: DS18B20.pdf.
Размещено на Allbest.ru
Подобные документы
Выбор и описание прототипов разрабатываемого устройства. Разработка структурной и принципиальной схемы. Обоснование программного обеспечения, используемого в разработке продукта. Моделирование устройство. Формирование программы для микропроцессора.
курсовая работа [2,0 M], добавлен 10.11.2014Основания для выбора контроллера, который подключается по IDE-шине к устройству CD-ROM. Принцип действия устройства, описание структурной и принципиальной схемы. Выбор элементной базы. Алгоритм работы устройства, разработка программного обеспечения.
курсовая работа [136,0 K], добавлен 23.12.2012Наименование разрабатываемого устройства. Назначение разрабатываемого устройства в городском транспорте. Обзорный анализ найденных аналогов. Обоснование актуальности разработки устройства. Разработка функциональной схемы разрабатываемого устройства.
курсовая работа [175,6 K], добавлен 04.07.2008Разработка структурной схемы устройства управления учебным роботом. Выбор двигателя, микроконтроллера, микросхемы, интерфейса связи и стабилизатора. Расчет схемы электрической принципиальной. Разработка сборочного чертежа устройства и алгоритма программы.
курсовая работа [577,8 K], добавлен 24.06.2013Разработка устройства для дефектоскопирования наружного кольца роликового подшипника, построение его структурной и принципиальной схем. Описание алгоритма работы, создание программного обеспечения и сопряжение устройства с персональным компьютером.
дипломная работа [3,4 M], добавлен 10.03.2013Анализ способов сопряжения персонального компьютера с разрабатываемым устройством. Разработка интерфейса ПК. Объединение модулей микропроцессорного устройства в единую систему. Выбор аналоговых коммутаторов. Разработка структурной схемы устройства.
курсовая работа [426,7 K], добавлен 03.05.2014Разработка принципиальной электрической схемы микропроцессорного устройства управления двигателем постоянного тока на базе контроллера ATmega 128. Разработка пакета подпрограмм на языке Assembler в целях регулирования и корректной работы устройства.
курсовая работа [271,5 K], добавлен 14.01.2011Описание алгоритма функционирования устройства сопряжения, которое подключается к системной шине ISA. Принципиальная и функциональная схемы интерфейсной и операционной части устройства. Моделирование схемы операционной части, построение диаграммы работы.
курсовая работа [50,7 K], добавлен 13.11.2009Разработка алгоритма работы. Выбор и обоснование структурной схемы. Разработка функциональной схемы блока ввода и блока вывода. Проектирование принципиальной схемы блока ввода и блока вывода, расчет элементов. Разработка программного обеспечения.
курсовая работа [1,7 M], добавлен 25.12.2011Разработка структурной и функциональной схем устройства, в основе которой лежит аналого-цифровой преобразователь. Выбор и обоснование элементной базы для реализации устройства, разработка конструкции. Расчеты, подтверждающие работоспособность схемы.
курсовая работа [656,0 K], добавлен 05.12.2012