Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2014, 08:51   #1
25-й кадр
Человек
Форумчанин
 
Регистрация: 04.04.2011
Сообщений: 178
Вопрос Таймеры ATmega16(A).

Уважаемые форумчане, подскажите...
Код:
#include <io.h>

#include <delay.h>
#include <spi.h>

/*void SPI_MasterInit(void)
{

}

void SPI_MasterTransmit(void)
{

}
*/
void main(void)
{


PORTD=0b00000000;
DDRD=0b00010000;

PORTC=0b00000000;
DDRC=0b00000011;

PORTB=0b11110000;
DDRB=0b11111000;

//SPSR=0x00;

OCR1AH=0x5DC;
OCR1AL=1500;
TCCR1A=0b10000010;
TCCR1B=0b00011001;
ICR1H=20000;
ICR1L=20000;


while (1)
    {  
        if(PIND.0==0)
        {
        //PORTD.5=1;
        
        OCR1A=OCR1A+10; 
        delay_ms(20);
  
        //PORTC.0=1; 
        //spi('1');  
        }
        
        else 
        { 
        //spi('0');
        //PORTC.0=0;
        }; 
        
         if(PIND.1==0)
        {
        //PORTD.5=1;
        OCR1A=OCR1A-10; 
        delay_ms(20);
    
        //PORTC.1=1;
        //spi('1');  
        }
         
        else 
        { 
        //spi('0');
        //PORTC.1=0;
        };       
    }   
}
Не могу разобраться в настройке таймера. Сколько перечитал, не доходит. Где ошибаюсь?

Вот ещё код ассемблера.

Код:
;//#include <mega16.h>
;#include <delay.h>
;#include <spi.h>
;
;/*void SPI_MasterInit(void)
;{
;
;}
;
;void SPI_MasterTransmit(void)
;{
;
;}
;*/
;void main(void)
; 0000 0011 {

	.CSEG
_main:
; .FSTART _main
; 0000 0012 
; 0000 0013 
; 0000 0014 PORTD=0b00000000;
	LDI  R30,LOW(0)
	OUT  0x12,R30
; 0000 0015 DDRD=0b00010000;
	LDI  R30,LOW(16)
	OUT  0x11,R30
; 0000 0016 
; 0000 0017 PORTC=0b00000000;
	LDI  R30,LOW(0)
	OUT  0x15,R30
; 0000 0018 DDRC=0b00000011;
	LDI  R30,LOW(3)
	OUT  0x14,R30
; 0000 0019 
; 0000 001A PORTB=0b11110000;
	LDI  R30,LOW(240)
	OUT  0x18,R30
; 0000 001B DDRB=0b11111000;
	LDI  R30,LOW(248)
	OUT  0x17,R30
; 0000 001C 
; 0000 001D //SPSR=0x00;
; 0000 001E 
; 0000 001F OCR1AH=0x5DC;
	LDI  R30,LOW(220)
	OUT  0x2B,R30
; 0000 0020 OCR1AL=1500;
	OUT  0x2A,R30
; 0000 0021 TCCR1A=0b10000010;
	LDI  R30,LOW(130)
	OUT  0x2F,R30
; 0000 0022 TCCR1B=0b00011001;
	LDI  R30,LOW(25)
	OUT  0x2E,R30
; 0000 0023 ICR1H=20000;
	LDI  R30,LOW(32)
	OUT  0x27,R30
; 0000 0024 ICR1L=20000;
	OUT  0x26,R30
; 0000 0025 
; 0000 0026 
; 0000 0027 while (1)
_0x3:
; 0000 0028     {
; 0000 0029         if(PIND.0==0)
	SBIC 0x10,0
	RJMP _0x6
; 0000 002A         {
; 0000 002B         //PORTD.5=1;
; 0000 002C 
; 0000 002D         OCR1A=OCR1A+10;
	IN   R30,0x2A
	IN   R31,0x2A+1
	ADIW R30,10
	RCALL SUBOPT_0x0
; 0000 002E         delay_ms(20);
; 0000 002F 
; 0000 0030         //PORTC.0=1;
; 0000 0031         //spi('1');
; 0000 0032         }
; 0000 0033 
; 0000 0034         else
_0x6:
; 0000 0035         {
; 0000 0036         //spi('0');
; 0000 0037         //PORTC.0=0;
; 0000 0038         };
; 0000 0039 
; 0000 003A          if(PIND.1==0)
	SBIC 0x10,1
	RJMP _0x8
; 0000 003B         {
; 0000 003C         //PORTD.5=1;
; 0000 003D         OCR1A=OCR1A-10;
	IN   R30,0x2A
	IN   R31,0x2A+1
	SBIW R30,10
	RCALL SUBOPT_0x0
; 0000 003E         delay_ms(20);
; 0000 003F 
; 0000 0040         //PORTC.1=1;
; 0000 0041         //spi('1');
; 0000 0042         }
; 0000 0043 
; 0000 0044         else
_0x8:
; 0000 0045         {
; 0000 0046         //spi('0');
; 0000 0047         //PORTC.1=0;
; 0000 0048         };
; 0000 0049     }
	RJMP _0x3
; 0000 004A }
_0xA:
	RJMP _0xA
; .FEND
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x40
	.EQU __sm_mask=0xB0
	.EQU __sm_powerdown=0x20
	.EQU __sm_powersave=0x30
	.EQU __sm_standby=0xA0
	.EQU __sm_ext_standby=0xB0
	.EQU __sm_adc_noise_red=0x10
	.SET power_ctrl_reg=mcucr
	#endif

	.CSEG

	.CSEG
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x0:
	OUT  0x2A+1,R31
	OUT  0x2A,R30
	LDI  R26,LOW(20)
	LDI  R27,0
	RJMP _delay_ms


	.CSEG
_delay_ms:
	adiw r26,0
	breq __delay_ms1
__delay_ms0:
	__DELAY_USW 0x7D0
	wdr
	sbiw r26,1
	brne __delay_ms0
__delay_ms1:
	ret

;END OF CODE MARKER
__END_OF_CODE:
Как мне подсказал знающий человек ассемблер, то в таймере, он записывает LOW значения, а HIGHT не хочет, почему, ни он, ни я понять не можем. Может, здесь смогут помочь?
Это вам не это
25-й кадр вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Звук разной частоты, assembler, atmega16 Eshik v tumane Помощь студентам 2 09.01.2013 02:49
Ассемблер. ATmega16. Генерация звука Eshik v tumane Помощь студентам 1 18.11.2012 09:18
ATMega16(Timer T0) AlexeyR23 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 03.12.2011 01:44
avr atmega16 Defunate Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.09.2011 14:46
Работа с АЦП в микропроцессоре ATmega16 ezhik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.02.2011 17:12