|  | 
| 
 | ||||||||
|     | 
 | 
|  |  80540  149  0  0 |  | Опции темы | Поиск в этой теме | 
|  09.11.2011, 18:12 |  101   | 
| Ветеран Фонарёвки Регистрация: 15.02.2010 Последняя активность: 17.10.2018 15:32 
					Сообщений: 937
 Сказал(а) спасибо: 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 
					Сообщений: 787
 Сказал(а) спасибо: 0 
		
			
				Поблагодарили: 0 раз(а) в 0 сообщениях
			
		
	 |   
			
			Круть    | 
|   |     | 
|  24.11.2011, 21:39 |  105   | 
| Новичок Регистрация: 14.02.2010 Последняя активность: 28.04.2016 12:07 
					Сообщений: 447
 Сказал(а) спасибо: 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 
					Сообщений: 1342
 Сказал(а) спасибо: 0 
		
			
				Поблагодарили: 0 раз(а) в 0 сообщениях
			
		
	 |   
			
			Народ. У меня вопрос по поводу эффективного алгоритма программного умножения (ассемблер). Нужно перемножить 16х16, результат 32, но меня интересуют только старшие 16 бит. В распоряжении есть около 50-ти тактов. Это вообще реально на тиньке?
		 | 
|   |     | 
|  05.07.2012, 02:02 |  115   | 
| Ветеран Фонарёвки Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36 
					Сообщений: 1342
 Сказал(а) спасибо: 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 
					Сообщений: 937
 Сказал(а) спасибо: 0 
		
			
				Поблагодарили: 0 раз(а) в 0 сообщениях
			
		
	 |   
			
			подскажите микросхему аналог рф 2-8  только без уф стирания ! а то программатор есть  а прошить нечего!!
		 | 
|   |     | 
|  28.10.2012, 21:47 |  118   | 
| Ветеран Фонарёвки Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18 
					Сообщений: 1034
 Сказал(а) спасибо: 0 
		
			
				Поблагодарили: 0 раз(а) в 0 сообщениях
			
		
	 |   
			
			Mexaelb, причин может быть много: направильно установлены фьюзы, не верно определен тип МК в компиляторе, глючит программатор и т.д. Так сразу не скажешь.
		 
				__________________ Чем бы дитя не тешилось - лишь бы не лазером... | 
|   |     | 
|  28.10.2012, 21:51 |  119   | |
| Ветеран Фонарёвки Регистрация: 25.02.2010 Последняя активность: 11.09.2013 18:36 
					Сообщений: 1302
 Сказал(а) спасибо: 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 
					Сообщений: 1342
 Сказал(а) спасибо: 0 
		
			
				Поблагодарили: 0 раз(а) в 0 сообщениях
			
		
	 |   
			
			Mexaelb. Пинами дёргает, но слабо? А что на пинах висит? Напряжение мерялось на не нагруженных, или как? Пин банально может где-то в схеме коротить, отсюда и такое напряжение. Остальные пины этого порта ведут себя так же? Как настроена оптимизация в компиляторе? Бывает что-то "лишнее" вырезает за "ненадобностью"...
		 | 
|   |     |