--/--/--  --:--    スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
最近少しだけ余裕ができたので、
少々AVRのプログラミング関係の勉強をしてみようと思いました。

先日はROM上定数を習得しましたので、
今度はアセンブラとインラインアセンブラについて勉強してみました。
理由は、アセンブラを使わざるを得ないプログラムをそのうち書く可能性が見えてきたので。
正直な話、まさかAVRでアセンブラをやるなんて夢にも思わなかった。

ちなみに今普通に書いているアセンブラですが、正確にいうと誤用です
正確にはアセンブリが正しいです
しかし、アセンブリのことをアセンブラと呼ぶ人が多いことと、
AVRなどの資料では、アセンブリのことをアセンブラと記述していることが多いこと。
(例:インラインアセンブラなど)
まぁ最近はアセンブリとアセンブラの混同が多く、アセンブラの方が私もしっくりくるので、
今回はアセンブリのことをアセンブラで書いています


まずはアセンブラ。
基本的なアセンブラの知識は、
学校の授業でH8のアセンブラをなんとなくやっていたので、
まあ、理解に時間はそれほどかかりませんでした。
最近はkumanさんが「アセンブリの勉強」という内容を書かれていたので、
参考にさせていただきました。

kumanさんは、DOS窓でアセンブルしていらっしゃいましたが、
せっかくAVR Studioでアセンブラが使えるので、
私はAVR Studioでプログラムを作ってアセンブルしてみました。

試しに書いたプログラムはこちら。
ほとんどkumanさんのところの「3 最初のプログラム」と一緒です。
今手持ちのテスト用ブレッドボードについているのがATtiny45でしたので、
tiny45用に書き換えてあります。

//アセンブラのテスト

.INCLUDE<tn45def.inc>

.CSEG
rjmp reset

reset:
push R18
ldi R18,0xFF
out DDRB,R18
ldi R18,0x00
out PORTB,R18
pop R18

main:
sbi PORTB,3

rjmp main

別に意味もないpushとpopは、
ただ単に私がpushとpopを試したかっただけですので、気にしない。
これでちゃんと動作してくれました。
ただデバッグ用LEDを部室に忘れたので、AVR Studio上のシュミレータでですが・・・。
一応今回やったのは基礎の基礎だけですが、
書き方さえ覚えてしまえば後は応用するだけですし、
また必要になったときに深くやってみたいと思います。


次に、インラインアセンブラについて。
AVRのインラインアセンブラについて調べてみると・・・
AVR-GCCインラインアセンブラ便利帳
を見つけました。
読んでみたけれどもさっぱりわからない・・・。orz
とりあえず、
asm volatile(code : output operand list : input operand list);

で言いそうだ。
しかしまだよく分らないので、実際にプログラミングで試してみることに。

プログラムはとてもシンプルです。(<>は大文字に変えてあります。)

//インラインアセンブラのテスト

#include<avr/io.h>

int main(void)
{
asm volatile("sei");
asm volatile("ldi r18,0x03");
asm volatile("out 0x18,r18");

return 0;
}

ただ、割り込み許可して0x18(DDRB)に0x03を書き込むプログラムです。
確かH8だと、アドレスを指定するときは@をつけた気がしますが、
AVRだとDDRB16進のアドレス値を書いただけでいれてくれる。
上で定数0x03を書いていることから、定数とアドレスの混同は発生しないのだろうか?
なんとも不思議?
いや私がたぶんちゃんと理解していなくて分っていないだけだろうと思いますが・・・。
まあシュミレータ上ではちゃんと動いているようです。
こっちはもう少し勉強の余地がありそうですね。


まだ始めたばかりなので、とりあえず自分でも忘れないようにBLOGに書いておいた感じです。
たぶん、できる人から見れば、馬鹿だなこいつと思われるかもしれませんが、
馬鹿が馬鹿なりにがんばってる・・・ように見える・・・・・気がする。
といったように暖かく見守っていただければと思います。
AVR
Secret

TrackBackURL
→http://amenotiyukizora.blog76.fc2.com/tb.php/239-78d4ed51
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。