Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 29 мар 2024, 00:29

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: адаптация для Atiny25 программного UART для ATtiny13
СообщениеДобавлено: 01 дек 2012, 02:50 
Помогите разобраться с адаптацией под Atiny25 программного UART интерфейса, кот. был опубликован на getchip.net для ATtiny13 в CodeVisionAVR.


TIMSK0 на TIMSK поменял, а то б и не скомпилилось.

А его значение поменял с 0x0C на 0x18.

PB3 и PB4 подключил к Arduino TX0/RX0.
На PB5 повесил диодик для обратной связи.

Сначала пробовал ловить == равенство определенному байту, т.к. не работало, стал миганием определять больше какой границы полученный байт.
Но все равно что-то не работает.Что-бы я не посылал диод на 1 сек не загорается , хотя абсолютно не ясно как int R_byte может быть <255.
Baund_Rate 9600 варьировать пробовал. 8 Mhz и 1 Mhz тоже пробовал. Не помогает.

#include <tiny25.h>
#include <delay.h>


#define f_clk 9600000
#define N 8
#define Baund_Rate 9600
#define Bit_Width (f_clk/(N*Baund_Rate)-1)
#define Half_Bit_Width (Bit_Width/2)
#define RxD PinB4
#define TxD PortB.3

// Declare your global variables here
register unsigned char Rx_Count @11;
register unsigned char Rx_Byte @12;
register unsigned char Tx_Count @13;
register unsigned char Tx_Byte @14;



// Pin change interrupt service routine
interrupt [PCINT0] void pin_change_isr(void)
{
#asm

push r16
in r16,0x3F
push r16
ldi r16,0x00
out 0x3B,r16
in r16,0x32
subi r16,0xC2 ;äîïîëíåíèå äî 1 Half_Bit_Width
cpi r16,0x7C ;Bit_Width
brcs LI000A

subi r16,0x7C ;Bit_Width
LI000A:
out 0x29,r16
ldi r16,0x00
mov r11,r16
pop r16
out 0x3F,r16
pop r16

#endasm

}

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
#asm

push r16
push r17
in r16,0x3F
push r16
ldi r17,0x0A
cp r13,r17
brcc LA0013

ldi r17,0x00
cp r13,r17
brne LA000C

cbi 0x18,0x3
rjmp LA0012

LA000C:
bst r14,0x0
in r16,0x18
bld r16,0x3
out 0x18,r16
sec
ror r14
LA0012:
inc r13
LA0013:
pop r16
out 0x3F,r16
pop r17
pop r16

#endasm

}

// Timer 0 output compare B interrupt service routine
interrupt [TIM0_COMPB] void timer0_compb_isr(void)
{
#asm
push r16
push r17
in r16,0x3F
push r16
ldi r17,0x0A
cp r11,r17
brcc LB001E

ldi r17,0x00
cp r11,r17
brne LB000C

sbic 0x16,0x4
rjmp LB0016

LB000C:
ldi r16,0x08
cp r16,r11
brcs LB0014

lsr r12
in r16,0x16
bst r16,0x4
bld r12,0x7
rjmp LB001D

LB0014:

sbic 0x16,0x4
rjmp LB001A

LB0016:
ldi r16,0x9E
mov r12,r16
ldi r16,0x09
mov r11,r16
LB001A:
ldi r16,0x20
out 0x3A,r16
out 0x3B,r16
LB001D:
inc r11
LB001E:
pop r16
out 0x3F,r16
pop r17
pop r16

#endasm
}


void putbyte(unsigned char B)
{
while (Tx_Count < 10);
Tx_Byte = B;
Tx_Count = 0;
}

unsigned char getbyte(void)
{
if (Rx_Count == 11) return (157);
while (Rx_Count < 10);
Rx_Count = 11;
return (Rx_Byte);
}




void main(void)
{
// Declare your local variables here
unsigned char R_byte;

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
//CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=Out Func4=In Func3=Out Func2=In Func1=In Func0=In
// State5=1 State4=P State3=1 State2=T State1=T State0=T


DDRB.3=1;
DDRB |= (1<<0);
PORTB.3=1;
PORTB.4=1;

// Timer/Counter initialization
// Clock source: System Clock
// Clock value: 1200,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x02;
TCCR0B=0x02;
TCNT0=0x00;

OCR0A=Bit_Width;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: On
GIMSK=0x20;
MCUCR=0x00;
PCMSK=0x10;
GIFR=0x20;

// Timer/Counter Interrupt(s) initialization
TIMSK=0x18;

Tx_Count=11;
Rx_Count=11;

// Global enable interrupts
#asm("sei")

while (1)
{
R_byte=getbyte();
if ((R_byte!=157) & (R_byte!=158))
{
PORTB |= (1<<0);
delay_ms(100);
PORTB &= ~(1<<0);
delay_ms(100);


if (R_byte<255)
{
PORTB |= (1<<0);
delay_ms(1000);
PORTB &= ~(1<<0);
};

};
};
};


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: адаптация для Atiny25 программного UART для ATtiny13
СообщениеДобавлено: 01 дек 2012, 03:47 
Не в сети

Зарегистрирован: 01 дек 2012, 03:36
Сообщения: 1
046

Прошу прощения за некорректно оформление.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB