Устройство управления тепловым режимом компьютера

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.