http://www.forum.getchip.net/ |
|
адаптация для Atiny25 программного UART для ATtiny13 http://www.forum.getchip.net/viewtopic.php?f=24&t=296 |
Страница 1 из 1 |
Автор: | tonich [ 01 дек 2012, 02:50 ] |
Заголовок сообщения: | адаптация для Atiny25 программного UART для ATtiny13 |
Помогите разобраться с адаптацией под 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); }; }; }; }; |
Автор: | tonich_new [ 01 дек 2012, 03:47 ] |
Заголовок сообщения: | Re: адаптация для Atiny25 программного UART для ATtiny13 |
046 Прошу прощения за некорректно оформление. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |