ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
114332 Топик полностью
Mez (01.03.2008 15:02, просмотров: 94) ответил mse на И этта...питание, небось, не 3В, значит ОСЦКАЛ подгонять под питалово надо...Кароче - начять и кончить. ;О) А за переключение 19200-9600 машштабированием сустем цлоцка - зачОт!!!
Попробовал, действительно не успевает. Ты прав. Заккоментировал все настройки в программе. Пусть фуз делит на 8. Получилась устойчивая связь на 4800 при UBRR=30, а в datasheet при UBRR=25 должно быть 2400. Удвоение у меня не установлено. Всё-таки не совпадает. Про подгон RC osc я думал, но по datasheet 7,3-8,1 MГц. Это значит, что если Fosc меньше, то и UBRR должно быть меньше, а у меня наоборот. На этой плате (Crumb168) стоит керам.резонатор 20 МГц. Но при переключении на него частота не возрастает, а уменьшается. Тоже не знаю почему. А вот последний листинг. #include <inavr.h> #include "iom168.h" void sendchar(char data) { int i = 0; UDR0 = data; if(SREG & 0x80) { while ( !(UCSR0A&0x40) && (i<10000) ) { i++; } } else while( !(UCSR0A&0x40) ); UCSR0A=UCSR0A|0x40; //delete TXCflag } int main( void ) { DDRB=00; PORTB=0xFF; DDRC=00; PORTC=0xFF; DDRD=00; PORTD=0xFF; // boost IntRC to 2Mhz to achieve 19200 baudrate // CLKPR = (1<<CLKPCE); // set Clock Prescaler Change Enable // set prescaler = 4, Inter RC 8Mhz / 4 = 2Mhz // CLKPR = (1<<CLKPS1); // set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz // CLKPR = (1<<CLKPS1)|(1<<CLKPS0); UBRR0H = 0; UBRR0L = 30; // Enable 2x speed //UCSR0A = (1<<U2X0); // Enable receiver and transmitter UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<UDRIE0); // Async. mode, 8N1 UCSR0C = (0<<UMSEL01)|(0<<UMSEL00)|(0<<UPM00)|(0<<USBS0)|(3<<UCSZ00)|(0<<UCPOL0); //TWI по умолчанию запрещён бит TWIEN=0 in TWCR __enable_interrupt(); while(1) { sendchar('A'); } //return 0; }