ICR1は最大値を示す変数。
http://usicolog.nomaki.jp/engineering/avr/avrPWM.html
デフォルトはどうなってるのかなと気になったので。
#include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define FOSC 16000000UL #define BAUD 9600 #define MYUBRR ((FOSC/(16UL*BAUD))-1) unsigned int PB1_PWM_init(){ unsigned int res = ICR1; return res; } void USART_init(unsigned int ubrr){ UBRR0H = (ubrr>>8); UBRR0L = ubrr; UCSR0B = _BV(RXEN0)|_BV(TXEN0); //RX-TX enable UCSR0C = (3<<UCSZ00);//define data frame: CSZ = CharacterSiZe } void USART_Transmit(unsigned char data){ loop_until_bit_is_set(UCSR0A,UDRE0); UDR0 = data; } char USART_recv(void) { while(!(UCSR0A & (1<<RXC0))); return UDR0; } void putString(char msg[]) { int i; for(i=0;msg[i];i++){ USART_Transmit(msg[i]); } } int main(void){ DDRB |= _BV(PORTB5); USART_init(MYUBRR); char data; putString("Hello\n"); unsigned int res = PB1_PWM_init(); char ares[10]; itoa(res,ares,10); putString("Hello\n"); putString(ares); while(1){ data = USART_recv(); USART_Transmit(data); } return 0; }
0が返ってきた。つまり何かしらの値を明示して初期化しないと使えないということか。