|
|
|
|
49194 149 0 0 |
|
Опции темы | Поиск в этой теме |
09.11.2011, 18:12 | 101 |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 17.10.2018 15:32
Сообщений: 1039
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
|
09.11.2011, 19:34 | 102 |
Увлеченный
|
|
24.11.2011, 07:12 | 103 | ||
Новичок
Регистрация: 01.12.2010 Последняя активность: 30.06.2013 00:20
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
моя первая программа на ассемблере
бегущий огонек завтра буду усовершенствовать. Код:
.Include "m88padef.inc" .def temp = R16 ;обзываем r16 темпом .def temp1 = R17 .def temp2 = R18 ldi R16, high(RAMEND) ;инициализация стэка out SPH,R16 ldi R16, low(RAMEND) out SPL,R16 ldi Temp,0b11111111 ;настройка порта B out DDRB,Temp Begin: ldi temp, 0b00000001 ;зажигаем 1-й светик out PORTB, temp ldi Temp1,0 ;задержка ldi Temp2,100 Loop1: dec Temp1 brne Loop1 dec Temp2 brne Loop1 ldi temp, 0b00000010 ;зажигаем 2-й светик out PORTB, temp ldi Temp1,0 ;задержка ldi Temp2,100 Loop2: dec Temp1 brne Loop2 dec Temp2 brne Loop2 ldi temp, 0b00000100 ;зажигаем 3-й светик out PORTB, temp ldi Temp1,0 ;задержка ldi Temp2,100 Loop3: dec Temp1 brne Loop3 dec Temp2 brne Loop3 ldi temp, 0b0001000 ;зажигаем 4-й светик out PORTB, temp ldi Temp1,0 ;задержка ldi Temp2,100 Loop4: dec Temp1 brne Loop4 dec Temp2 brne Loop4 ldi temp, 0b00010000 ;зажигаем 5-й светик out PORTB, temp ldi Temp1,0 ;задержка ldi Temp2,100 Loop5: dec Temp1 brne Loop5 dec Temp2 brne Loop5 ldi temp, 0b00100000 ;зажигаем 6-й светик out PORTB, temp ldi Temp1,0 ;задержка ldi Temp2,100 Loop6: dec Temp1 brne Loop6 dec Temp2 brne Loop6 ldi temp, 0b01000000 ;зажигаем 7-й светик out PORTB, temp ldi Temp1,0 ;задержка ldi Temp2,100 Loop7: dec Temp1 brne Loop7 dec Temp2 brne Loop7 rjmp Begin
|
||
24.11.2011, 21:14 | 104 |
Завсегдатай Фонарёвки
Регистрация: 17.02.2010 Последняя активность: 30.01.2016 13:11
Сообщений: 831
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Круть
|
24.11.2011, 21:39 | 105 |
Новичок
Регистрация: 14.02.2010 Последняя активность: 28.04.2016 12:07
Сообщений: 464
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Имхо на СИ проще и понятнее. Начинал тоже с Асм, потом бросил из за сложности. Как Си увидел, так хорошо дело пошло, даже АЦП уже освоил.
|
24.11.2011, 23:30 | 106 |
Новичок
Регистрация: 01.12.2010 Последняя активность: 30.06.2013 00:20
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
немного поигрался и....
вот сегодняшний код: Код HTML:
.Include "m88padef.inc" .def temp = R16 ;r16 обзываем темпом .def temp1 = R17 .def temp2 = R18 ldi R16, high(RAMEND) ;инициализация стэка out SPH,R16 ldi R16, low(RAMEND) out SPL,R16 ldi Temp,0b11111111 ;настройка порта B out DDRB,Temp begin: ldi temp, 0b00000001 ;загружжаем в temp 00000001 (начало бегущего огня) shift: rcall delay cpi Temp, 0b01000000 ;сравнить Temp с крайним значением, если равно, то ноль breq begin ;перйти на begin, если результат предыдущего действие - ноль lsl temp ;логический сдвиг вправо rjmp shift ;безусловный переход к метке shift ;***********************************;вывод temp на PORTB / задержка**************************** delay: out PORTB, temp ldi temp1, 0 ldi temp2, 100 ;декрементируем temp1 до нуля 100 раз loop: dec temp1 brne loop dec temp2 brne loop ret ;выход из функции ;*********************************************************************************************** |
26.11.2011, 19:04 | 107 |
Увлеченный
|
lsl это логический сдвиг в лево
на прерывании таймера можно сбацать это всего на пер команд, как я тебе писал в аське я ради спортивного интереса я начал писать бегущий огонек на прерываниях, только пока руки не дощли написать алгоритм по которому он будет по умному бежать в другую сторону |
29.11.2011, 03:16 | 108 | |
Новичок
Регистрация: 01.12.2010 Последняя активность: 30.06.2013 00:20
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Цитата:
|
|
29.11.2011, 17:12 | 109 |
Ветеран Фонарёвки
|
Мне тоже С больше нравится, там и портами работать удобно, и с внутренностями МК. К тому же я легко могу перенести прощивку с одного МК на другой, достаточно только перенастроить проект, а вот с ассемблером это проблемма. Ассемблер хорош там, где нужно упихать много кода в ограниченный объем памяти, компиллятор иногда лишний и не лучший код для этого использует.
|
23.12.2011, 18:21 | 110 | ||
Увлеченный
|
вот нашел время, написал плавную мигалку с использованием аппаратной ШИМ. может кому нибудь будет интересно
некоторые комментарии в коде есть Код:
.INCLUDE "m88padef.inc" ;===== начальная инициализация ==== rjmp RESET ; Reset Handler reti ;EXT_INT0 ; IRQ0 Handler reti ;EXT_INT1 ; IRQ1 Handler reti ;PCINT0 ; PCINT0 Handler reti ;PCINT1 ; PCINT1 Handler reti ;PCINT2 ; PCINT2 Handler reti ;WDT ; Watchdog Timer Handler rjmp TIM2_COMPA ; Timer2 Compare A Handler reti ;TIM2_COMPB ; Timer2 Compare B Handler reti ;TIM2_OVF ; Timer2 Overflow Handler reti ;TIM1_CAPT ; Timer1 Capture Handler reti ;TIM1_COMPA ; Timer1 Compare A Handler reti ;TIM1_COMPB ; Timer1 Compare B Handler reti ;TIM1_OVF ; Timer1 Overflow Handler reti ;TIM0_COMPA ; Timer0 Compare A Handler reti ;TIM0_COMPB ; Timer0 Compare B Handler reti ;TIM0_OVF ; Timer0 Overflow Handler reti ;SPI_STC ; SPI Transfer Complete Handler reti ;USART_RXC ; USART, RX Complete Handler reti ;USART_UDRE ; USART, UDR Empty Handler reti ;USART_TXC ; USART, TX Complete Handler reti ;ADC ; ADC Conversion Complete Handler reti ;EE_RDY ; EEPROM Ready Handler reti ;ANA_COMP ; Analog Comparator Handler reti ;TWI ; 2-wire Serial Interface Handler reti ;SPM_RDY ; Store Program Memory Ready Handle RESET: ldi R16, high(RAMEND); инициализация стэка out SPH,R16 ldi R16, low(RAMEND) out SPL,R16 ldi R16, 0b10100011 ; утсновка ШИМ в режиме Fast PWM out TCCR0A, R16 ldi R16, 0b00000010 ; предделитель таймера на 256 out TCCR0B, R16 ldi R16, 0b00000000 ; PC на вход out DDRC, R16 ldi R16, 0b01100000 ; PD6 и PD7 выход ШИМ out DDRD, R16 ldi R16, 0b00000000 sts TCCR2A, R16 ldi R16, 0b00000110 ; пределитель T\C2 на 1024 sts TCCR2B, R16 ldi R16, 0b00000010 sts TIMSK2, R16 ldi R16, 50 ; задержка T\C2 sts OCR2A, R16 ldi R16, 0b00000001 ; разрешить sleep, idle out SMCR, R16 sei ; глобально разрешить прерывания ldi R17, 1 ; установка яркости на PD6 main: cpi R18, 0 ; узнаём "направление" breq up rjmp down rjmp main up: inc R17 sleep cpi R17, 100 brne up ldi R18, 1 ;если яркость достигла заданого уровня rjmp main down: dec R17 sleep cpi R17, 1 brne down ldi R18, 0 rjmp main TIM2_COMPA: out OCR0A, R17 reti
|
||
23.12.2011, 19:02 | 111 | ||
Увлеченный
|
и специально для drakon'a, бегущий огонек на 120 байт
Код:
.INCLUDE "m88padef.inc" rjmp RESET ; Reset Handler reti ;EXT_INT0 ; IRQ0 Handler reti ;EXT_INT1 ; IRQ1 Handler reti ;PCINT0 ; PCINT0 Handler reti ;PCINT1 ; PCINT1 Handler reti ;PCINT2 ; PCINT2 Handler reti ;WDT ; Watchdog Timer Handler reti ;TIM2_COMPA ; Timer2 Compare A Handler reti ;TIM2_COMPB ; Timer2 Compare B Handler reti ;TIM2_OVF ; Timer2 Overflow Handler reti ;TIM1_CAPT ; Timer1 Capture Handler reti ;TIM1_COMPA ; Timer1 Compare A Handler reti ;TIM1_COMPB ; Timer1 Compare B Handler reti ;TIM1_OVF ; Timer1 Overflow Handler rjmp shift ;TIM0_COMPA ; Timer0 Compare A Handler reti ;TIM0_COMPB ; Timer0 Compare B Handler reti ;TIM0_OVF ; Timer0 Overflow Handler reti ;SPI_STC ; SPI Transfer Complete Handler reti ;USART_RXC ; USART, RX Complete Handler reti ;USART_UDRE ; USART, UDR Empty Handler reti ;USART_TXC ; USART, TX Complete Handler reti ;ADC ; ADC Conversion Complete Handler reti ;EE_RDY ; EEPROM Ready Handler reti ;ANA_COMP ; Analog Comparator Handler reti ;TWI ; 2-wire Serial Interface Handler reti ;SPM_RDY ; Store Program Memory Ready Handle RESET: ldi R16, high(RAMEND) out SPH,R16 ldi R16, low(RAMEND) out SPL,R16 ldi R16, 0b00000101 ;предделитель 1024 out TCCR0B, R16 ldi R16, 255 ;значение для сравнения out OCR0A, R16 ldi R16, 0b00000010 sts TIMSK0, R16 ldi R16, 0b11111111 out DDRB, R16 ldi R16, 0b00000001 ; sleep, idle out SMCR, R16 sei main: cpi R17,1 ;проверяем направление brne left rjmp right rjmp main left: lsl R16 sleep cpi R16, 0b10000000 brne left ; если дошло до значения в предыдущей команде, то : ldi R17, 1 ;установка направления rjmp main right: lsr R16 sleep cpi R16, 0b00000001 brne right ldi R17,0 rjmp main shift: out PORTB, R16 ; выброс в порт reti
|
||
23.12.2011, 21:00 | 112 |
Новичок
Регистрация: 01.12.2010 Последняя активность: 30.06.2013 00:20
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
я вот сессию сдам, начнется новый семестр, а я продолжу учить ассемблер.
а то сейчас на уме активные фильтры, диф. каскады, переходные процессы.......... |
01.01.2012, 22:29 | 113 |
Завсегдатай Фонарёвки
|
народ подскажите нормальный но в тоже время простой(по деталям) программатор чтоб прошить эти МК PIC12F629и PIC16F628A , собрал art2003 и JDM по чемуто не получилось
__________________
RED< 380мвт(на реконструкции) GREEN < 50мвт(SDLaser 302) VIOLET < 140мвт RGB < 1000мвт(в разработке) |
28.06.2012, 23:42 | 114 |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1362
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Народ. У меня вопрос по поводу эффективного алгоритма программного умножения (ассемблер). Нужно перемножить 16х16, результат 32, но меня интересуют только старшие 16 бит. В распоряжении есть около 50-ти тактов. Это вообще реально на тиньке?
|
05.07.2012, 02:02 | 115 |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1362
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
С умножением давно разобрался, написал более экономичное умножение 16*10 (59...84 такта), чем стандартный 16*16 (104 такта). Функция успевает, но вот блин с АЦП уже неделю парюсь. Как его вообще синхронизировать? Что не крути - шпарит на автомате очередями, несмотря на всякие там автотриггеры, старты конвертирования и т.п. В даташите чёрным по белому в оглавлении написано:
Free Running or Single Conversion Mode. КАК запустить Single Conversion Mode?! У кого нибудь получалось? Стоит поставить бит ADEN, как он тут же срёт на всё и начинает строчить семпл за семплом. Функция не успевает их перетравливать, к тому же появляется шум из-за асинхронной работы АЦП и ШИМ... Раньше я эту проблему ещё мог как-то обойти, но сейчас алгоритм стабилизации вырос и проблема стала куда актуальнее... Добавлено: Мда. Поэкспериментировал немного - Sleep (в режиме Idle) запускает конвертирование, снос флага прерывания тоже запускает конвертирование. В общем АЦП стартует от кучи всяких пчихов. Может в даташите что-то за это и написано, я не натыкался. Печально, значит слип юзать нельзя, прерывание АЦП, при использовании одиночных семплов, тоже (ну или можно, но с костылями). Было дело я даже не мог выключить АЦП, он продолжал работать при попытке снести бит ADEN!.. |
28.10.2012, 14:38 | 116 |
Новичок
Регистрация: 28.10.2012 Последняя активность: 14.11.2012 20:57
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Помогите!!!!!!!!!1
начал программировать микросхему атмега 85155L
вот такой код запрограммировал /************************************************ ПРИМЕР МИГАНИЯ СВЕТОДИОДАМИ :: MYROBOT.RU *************************************************/ #define F_CPU 1000000UL // 1 MHz #include <avr/io.h> #include <avr/delay.h> int main(void) // начало основой программы { DDRD = 0xff; // все выводы порта D сконфигурировать как выходы while (1) { // Бесконечный цикл PORTD = 0xff; // установить "1" на всех линиях порта D _delay_ms(250); // Ждем 0.25 сек. PORTD = 0x00; // установить "0" на всех линиях порта D _delay_ms(250); // Ждем 0.25 сек. } // закрывающая скобка бесконечного цикла } // закрывающая скобка основной программы микросхема за программировалась, но светодиод не мигает начал проверять вольтметром - показывает что идет переключение портов на 0,015 вольт что соответственно мало для того чтобы диод загорелся вопрос - почему он не подает 5 вольт на светодиод (микросхеме подается на питание 5В)? и почему так мало он мало дает на порт ? спасибо |
28.10.2012, 19:03 | 117 |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 17.10.2018 15:32
Сообщений: 1039
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
подскажите микросхему аналог рф 2-8 только без уф стирания ! а то программатор есть а прошить нечего!!
|
28.10.2012, 21:47 | 118 |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1090
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Mexaelb, причин может быть много: направильно установлены фьюзы, не верно определен тип МК в компиляторе, глючит программатор и т.д. Так сразу не скажешь.
__________________
Чем бы дитя не тешилось - лишь бы не лазером... |
28.10.2012, 21:51 | 119 | |
Ветеран Фонарёвки
Регистрация: 25.02.2010 Последняя активность: 11.09.2013 18:36
Сообщений: 1408
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Цитата:
( к573PФ 4, 6, 8 ) • EEPROM: 2817, 2864, 28256, 28010 • FLASH EPROM: 28F256 28F020, 28F4000, AT29C256 AT29C040, AM29F010 AM29F040 • SRAM (статическая память) 6246 628512 (кр537 РУ10, РУ25, РУ17) |
|
28.10.2012, 21:59 | 120 |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1362
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Mexaelb. Пинами дёргает, но слабо? А что на пинах висит? Напряжение мерялось на не нагруженных, или как? Пин банально может где-то в схеме коротить, отсюда и такое напряжение. Остальные пины этого порта ведут себя так же? Как настроена оптимизация в компиляторе? Бывает что-то "лишнее" вырезает за "ненадобностью"...
|