2014-05-21から1日間の記事一覧

AVRでPWMを使ってLEDを光らせる

使ったチップはATmega8515 動作周波数は内部発振で8MHz。 1MHzだと点滅してきれいに見えなかった。 //#define F_CPU 1000000UL #include <avr/io.h> //#include <util/delay.h> #include <stdio.h> void rs_putc (char c) { loop_until_bit_is_set(UCSRA, UDRE); UDR = c; } void rs_puts </stdio.h></util/delay.h></avr/io.h>…

UBRRHとUCSRCレジスタがメモリアドレスを共有している件

こんなコードを書いていたら動かなかった。 #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { //unsigned char data = 0; char data; //DDRD = 0b11111100; //portD : 0,1pin???? //PORTD = 0b00000000; UBRRH = 0x00; UBRRL = 0x19; //2400 @</util/delay.h></avr/io.h>…

配列とポインタは同じものではない

こんがらがってたのでメモ。このコードだとlvalue required as ncrement operandエラーが出る。 #include <stdio.h> int main(void){ char str[] = "hello"; while(*str){ printf("%c",*str++); } return 0; } 正しくはポインタをちゃんと作ってからループを回す。 #i</stdio.h>…

ポインタで代入とインクリメントが同時に行われるときの順序

http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/prog1/11-01.html 後置のインクリメント「 s = x++; 」が「 s = x; x = x + 1; 」の順で展開されるそれと同様に「 *p++ = 2*i; 」は「 *p = 2*i; 」→「 p++; 」と展開される。 代入されてからインクリメン…