0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
1 | |
Светодиоды не мигают atmega1601.08.2012, 00:02. Показов 17737. Ответов 56
Метки нет (Все метки)
Здравствуйте, на моей отладочной плате не мигают нужные светодиоды, они просто горят. Atmega16A-pu 8000MHZ
Код: Код
.def temp=r16 ; директива .def назначает регистру r16 имя temp .def temp1=r17 ; директива .def назначает регистру r17 имя temp1 .def temp2=r18 ; директива .def назначает регистру r18 имя temp2 .def temp3=r19 ; директива .def назначает регистру r19 имя temp3 ;==================================================== ; Начало программы .cseg ; директива .cseg определяет начало сегмента, где будет расположен ; основной код программы. В AVR Studyo 5 это директива не ; обязательна .org 0 ; начало первой строки программы rjmp Start ; относительный переход к метке Start (в PIC соответствует ; команде goto) ; ==================================================== Start: ser temp ; устанавливает все биты регистра temp в 1 out DDRB,temp ; переводит все биты out DDRD,temp ; порта B и D на вывод clr temp ; обнуляет регистр temp (устанавливает все биты регистра temp в 0) out PortB,temp ; отключает подтягивающие резисторы out PortD,temp ; портов B и D Cicle: ldi temp,0b11001100 ; включает светодиоды out PortB, temp ; порта B rcall Pouse ; вызов подпрограммы задержки clr temp ; выключает светодиоды out PortB, temp ; порта B rcall Pouse ; вызов подпрограммы задержки rjmp Cicle ; Возвращаемся к метке Cicle, зацикливаемся ; ==================================================== ; Подпрограмма задержки ; ==================================================== Pouse: ldi Temp1,0 ; записать в регистр temp1 знчение 0 ldi Temp2,0 ; записать в регистр temp2 знчение 0 ldi Temp3,2 ; записать в регистр temp3 знчение 2 Pouse1: dec Temp1 ; вычесть из значения регистра temp1 единицу brne Pouse1 ; если значение temp1 не равно 0 перейти к метке Pouse1 dec Temp2 ; вычесть из значения регистра temp2 единицу brne Pouse1 ; если значение temp2 не равно 0 перейти к метке Pouse1 dec Temp3 ; вычесть из значения регистра temp3 единицу brne Pouse1 ; если значение temp1 не равно 0 перейти к метке Pouse1 ret ; выйти из подпрограммы
0
|
01.08.2012, 00:02 | |
Ответы с готовыми решениями:
56
Считывание числа и вывод на светодиоды (ATMega16, ASM) ATMega16 (AVR Studio, ASM) - Вывести результат на светодиоды по схеме Неправильно мигают светодиоды на BluePill с CMSIS - почему? Холодильник Samsung RL33SBSW, мигают светодиоды Маршрутизатор compex ps2216, мигают оранжевые светодиоды |
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
|
|
01.08.2012, 01:01 | 21 |
видел.
(пошел гуглить, хто такой этот человек-пароход...) UPD: "Программирование на ассемблере для PIC микроконтроллеров" оно? н-ддааа ужжж...
0
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
01.08.2012, 01:02 | 22 |
Сообщение от tid_fom
0
|
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
|
|
01.08.2012, 01:04 | 23 |
автор типа редькина, что-ли?
0
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
01.08.2012, 01:05 | 24 |
Сообщение от tid_fom
http://ikarab.narod.ru/Kea_20.html Только , я предупреждал ...
0
|
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
|
|
01.08.2012, 01:10 | 25 |
ясно. качать обязательно. в папку "чистА пАржать"...
ну да, ТС отжег...
0
|
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
01.08.2012, 01:13 | 26 |
всем спасибо, желание отпало.
0
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
01.08.2012, 01:16 | 27 |
Сообщение от bortyk226
Собственно вас не о...рают , а пытаются на путь истинный наставить .
0
|
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
01.08.2012, 01:54 | 28 |
кстати вариант с 120 не пашет
0
|
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
|
|
01.08.2012, 19:04 | 29 |
Затюкали пацана, а задержку в примере так никто правильно и не подсчитал. В примере ТС она равна примерно 394248 такта, ну +/- ( тело цикла - декремент плюс условный переход, если ложно - !3!такта), умножаем на длительность такта при 8МГц (я надеюсь это не 8ГГц как в первом посте :) ) и получаем чуть больше 49мС. Если сделать «Temp3» как советовал dosykus , то получится самое то – 3Сек. Другое дело как шла симуляция в протеусе без инициализации стека? А главное как компилятор проглотил мнемонику портов без .include "m16def.yms" !!??
0
|
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
04.08.2012, 05:34 | 30 |
Привет всем еще раз, помогите с xor
Вот выражение: if (условие1) ?? (условие2) что должно стоять на месте знака вопроса чтобы было: усл1усл2 0 0 = 0 1 0 = 1 0 1 = 1 0 0 = 0
0
|
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
|
|
04.08.2012, 15:26 | 31 |
Это не xor, а or ;) т.е. обычное "ИЛИ". А там в таблице нет опечатки? Может быть там должно быть 1 1 = 0??? Если так, тогда xor
Но в любом случае, встречный вопрос: А в чем помочь?
0
|
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
|
|
04.08.2012, 15:29 | 32 |
Сообщение от bortyk226
0
|
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
04.08.2012, 16:09 | 33 |
11 = 0
все я разобрался, надо так if (условие1) != (условие2)
0
|
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
04.08.2012, 18:04 | 34 |
блин, расшифруйте пожалуйста а то мозги вскипают
while((PIND&(1<<PIND0))) и еще вот написал код: Код
#define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> void Pouse(int ms) { while(ms--){_delay_ms(0.999);}; } int main (void) { DDRA = 0xff; DDRB=0; PORTB=0x7F; int a = 200; int b = 20; int c = 0; int d = 0; while (1) { if (PINB != 0) { d = 1; } if (d == 1) { while (a != 0) { PORTA = 0xff; Pouse(a); PORTA = 0x00; Pouse(a); a = a-10; } PORTA = 0x01; while(1) { while (c == 0) { if (PORTA == 0x80) { c = 1; } else { Pouse(b); PORTA = (PORTA << 1); } } while (c == 1) { if (PORTA == 0x01) { c = 0; } else { Pouse(b); PORTA = (PORTA >> 1); } } } } } return 0; }
0
|
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
|
|
04.08.2012, 18:40 | 35 |
Сообщение от bortyk226
совершенно стандартное выделение бита.
0
|
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
04.08.2012, 18:43 | 36 |
можно же так написать
while (PIND == 0x01) это же проще и короче, почему так не пишут?
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
04.08.2012, 18:44 | 37 |
так надо
while(pind & 1) исходная конструкция и правда непонятная и бессмысленная, по-моему
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
04.08.2012, 18:45 | 38 |
Сообщение от bortyk226
0
|
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 161
|
|
04.08.2012, 18:46 | 39 |
да, так же проще)
ну чтонибудь подскажите по коду: Код
#define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> void Pouse(int ms) { while(ms--){_delay_ms(0.999);}; } int main (void) { DDRA = 0xff; DDRB=0; PORTB=0x7F; int a = 200; int b = 20; int c = 0; int d = 0; while (1) { if (PINB != 0) { d = 1; } if (d == 1) { while (a != 0) { PORTA = 0xff; Pouse(a); PORTA = 0x00; Pouse(a); a = a-10; } PORTA = 0x01; while(1) { while (c == 0) { if (PORTA == 0x80) { c = 1; } else { Pouse(b); PORTA = (PORTA << 1); } } while (c == 1) { if (PORTA == 0x01) { c = 0; } else { Pouse(b); PORTA = (PORTA >> 1); } } } } } return 0; } а проще никак нельзя проверить один пин?(я видел что где-то можно так while (PB0 == 1) но в avr studyo 6 не катит)
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
04.08.2012, 18:48 | 40 |
вам что-то надо делать с пальцами
0
|
04.08.2012, 18:48 | |
04.08.2012, 18:48 | |
Помогаю со студенческими работами здесь
40
Сплит-система Vestel, Мигают все светодиоды Konica Minolta PagePro 1100l - мигают светодиоды Холодильник Whirlpool ARC 4020 850140210000, мигают светодиоды Hp Compaq Presario CQ61-340EN мигают светодиоды 2 раза Ремонт ПММ Ariston LL 40 мигают 4 и 6 светодиоды, недобор воды стиральная машина Siemens WS 12X160 OE, Мигают светодиоды управления отжимом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |