Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1497 | Дата выхода: | 14.12.2011, 23:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 184 / 63 | Вопросов / ответов: | 1 / 2 | Консультация # 184724: Здравствуйте! Прошу помощи в следующем вопросе:Здравствуйте! У меня возникли сложности с таким вопросом:Нужно написать программу для учебного лабораторного комплекса SDK-1.1, 5. Написать программу, обеспечивающую поочередное «гашение» светодиодов, расположенных на учебном макете,от середины к краям. Вторя половина линейки должны быть ин... Консультация # 184724: Здравствуйте! Прошу помощи в следующем вопросе:Здравствуйте! У меня возникли сложности с таким вопросом:Нужно написать программу для учебного лабораторного комплекса SDK-1.1, 5. Написать программу, обеспечивающую поочередное «гашение» светодиодов, расположенных на учебном макете,от середины к краям. Вторя половина линейки должны быть инверсией первой. Интервал «гашения» 1сек. Процессор 8051.Буду очень вам благодарен,если вы сумеете мне помочь. Дата отправки: 09.12.2011, 11:25 Вопрос задал: Дмитрий (Посетитель) Всего ответов: 2 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Дмитрий! Вот наглядное преимущество табличного задания выводимых значений! Подправил таблицу из вопроса № 184719 и готово решение для данного вопроса! Программа постоянно сначала засвечивает светодиоды от центра к краям, потом их гасит. Вот такая получается "красота".
Код : #include <ADuC812.h> NAME Primer_5 SV EQU 7h ; адрес порта светодиодов в ПЛИС PROG_WM SEGMENT CODE PROG_T0 SEGMENT CODE BITVAR SEGMENT BIT STACK SEGMENT IDATA RSEG STACK DS 10H ; 16 Bytes Stack ; Обработчик прерывания при перезагрузки МК CSEG AT 0h jmp START ; Вектор прерывания от таймера 0 CSEG AT 0Bh jmp Timer0 ; Вектор прерывания от таймера 0 в пользовательской таблице SDK CSEG AT 200Bh jmp Timer0 ; Подпрограмма обработчика прерывания от таймера 0 RSEG PROG_T0 Timer0: push PSW djnz r4,Timer0ret ;20*50мс = 1сек mov r4,#20 ;заряжаем на отсчет следующей 1 сек setb IRQ_T0 ;взводим флаг Timer0ret: clr tr0 ;остановим таймер mov th0,#high(0ffffh-50000) ;заряжаем таймер на 50000 мкс mov tl0,#low(0ffffh-50000) setb tr0 ;запускаем таймер pop PSW RETI ; Основная программа CSEG AT 2100h USING 0 START: mov SP,#STACK-1 ; инициализация стека ; Настройка таймера 0 как 16-разрядного в режиме автоперезагруз-ки mov tmod,#00000001b ;таймер 0 - 16-битный счетчик mov th0,#high(0ffffh-50000) ;заряжаем таймер на 50000 мкс mov tl0,#low(0ffffh-50000) mov r4, #20 ;счетчик прерываний таймера 20*50 = 1 сек setb tr0 ;запускаем таймер setb ea ;разрешаем все прерывания setb et0 ;разрешаем прерывание от таймера 0 mov R1,#SV ;адрес регистра светодиодов mov R7,#07h ;индекс в таблице, после +1 и and 07h будет 0 mov dptr,#table ;адрес таблицы wait: jnb IRQ_T0,wait ;ждем бит clr IRQ_T0 ;сбросим его mov a,r7 ;индекс inc a ;на следующий anl a,#07h ;оставим 3 мл бита (0-07h), у нас 8 значений mov r7,a ;сохраним movc a,@a+dptr ;читаем из таблицы значение call Wr_Max ;и на светодиоды! jmp wait ;ждем 1 секунду ;данные для индикации на светодиодах table: db 00011000b, 00111100b, 01111110b, 11111111b db 11100111b, 11000011b, 10000001b, 00000000b ; Подпрограмма работы с регистрами ПЛИС (Запись в рег. ПЛИС) RSEG PROG_WM ; R1 - адрес регистра ПЛИС, ACC - записываемое значение Wr_Max: mov R3,DPP ;сохраним старое значение mov DPP,#8h ;перейдем в банк 8 movx @R1,A ;пишем в регистр mov DPP,R3 ;восстановим банк RET ; Переменные в битовой области RSEG BITVAR IRQ_T0: DBIT 1 ;бит для отработки в основном цикле END Консультирует Andriana (1-й класс): Здравствуйте, Дмитрий!
Ниже представлена программа - адресация памяти 2000H до 7FFFH. зажигание светодиодов через 1 секунду .equ locat, 0x2000 ;Точка входа
;82C55 адресация портов - если необходимо .equ port_a, 0xF800 ;port A .equ port_b, 0xF801 ;port B .equ port_c, 0xF802 ;port C .equ port_abc_pgm, 0xF803 ;конфигурация in/out для 3 портов выше .equ port_d, 0xF900 ;port D .equ port_e, 0xF901 ;port E .equ port_f, 0xF902 ;port F .equ port_def_pgm, 0xF903 ;конфигурация in/out для 3 портов выше
.equ cout, 0x0030 .equ cin, 0x0032 .equ phex, 0x0034 .equ phex16, 0x0036 .equ pstr, 0x0038 .equ esc, 0x003E .equ newline, 0x0048 .equ pint8u, 0x004D .equ pint16u, 0x0053
.org locat .db 0xA5,0xE5,0xE0,0xA5 .db 35,255,0,0 .db 0,0,0,0 .db 0,0,0,0 .db 0,0,0,0 .db 0,0,0,0 .db 0,0,0,0 .db 255,255,255,255 .db "Blink LEDs",0 .org locat+64
startup: mov dptr, #port_def_pgm mov a, #128 movx @dptr, a begin: mov dptr, #table loop: clr a movc a, @a+dptr acall update inc dptr lcall esc jc exit clr a movc a, @a+dptr jz begin acall delay inc dptr sjmp loop exit: ljmp 0
update: push dph push dpl mov dptr, #port_e movx @dptr, a pop dpl pop dph ret
delay: mov r0, a dly2: mov r1, #250 dly3: nop nop nop ;6 NOPs + DJNZ is 4.34 us nop ;при условии что используется 22.1184 MHz кристалл nop nop djnz r1, dly3 djnz r0, dly2 ret
;здесь при необходимо сти можно менять последовательность зажигания светодиодов. table: .db 01111111b, 90 .db 00111111b, 70 .db 00011111b, 50 .db 10001111b, 40 .db 11000111b, 40 .db 11100011b, 40 .db 11110001b, 40 .db 11111000b, 50 .db 11111100b, 70 .db 11111110b, 90 .db 11111100b, 70 .db 11111000b, 50 .db 11110001b, 40 .db 11100011b, 40 .db 11000111b, 40 .db 10001111b, 40 .db 00011111b, 50 .db 00111111b, 70 .db 255,0
вот в принципе и все вы можете использовать эту программу универсально только измените последовательность в таблице УДАЧИ
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий