ダウンロードするファイルを選択し、マウスのボタンを右クリックし、「対象をファイルに保存」を選んでから保存してください。
プログラム中のスペースやタブ、コメントは、印刷物とは異なる場合があります。プログラム・リストの中の必要な部分をコピーしてからご利用ください。
2005年3月15日
●くろまる変更履歴
2008年5月26日
第4版までの訂正をまとめたpdfをダウンロードできます。
2008年4月30日
(削除) 訂正をまとめたpdfをダウンロードできます。 (削除ここまで)
2008年1月7日
(削除) 全角スペースがソースに混じっているときのエラー解説を含め訂正をまとめたpdfをダウンロードできます。 (削除ここまで)
2007年12月18日
(削除) 訂正をまとめたpdfをダウンロードできます。 (削除ここまで)
2007年11月5日
(削除) 訂正をまとめたpdfをダウンロードできます。 (削除ここまで)
2006年12月8日
(削除) 訂正をまとめたpdfをダウンロードできます。 (削除ここまで)
2006年10月23日
(削除) リスト7-10を修正しました。訂正をまとめたpdfをダウンロードできます。 (削除ここまで)
list7-10.asm->list7-10fix.asm
2006年10月18日
リスト5-15を修正しました。(削除) 訂正をまとめたpdf (削除ここまで)をダウンロードできます。
list5-15.asm->list5-15fix.asm
2006年1月11日
リスト5-1を修正しました。(削除) 訂正をまとめたpdfをダウンロードできます。 (削除ここまで)
list5-1.txt->list5-1-fix.txt
2005年12月26日
(削除) 訂正をまとめたpdfをダウンロードできます (削除ここまで)。
2005年5月12日 2点修正
list5-3->list5-3all.txt
list5-5.txt->list5-5fix.txt
list5-3表計算用エクセルファイルcalc.xlsを追加
list5-4.txt
(削除) list5-5.txt (削除ここまで) list5-5fix.txt
list5-6.txt list5-7.txt list5-8.txt
list5-9.asm list5-10.txt list5-11.txt list5-12.txt
list5-13.txt list5-14.txt (削除) list5-15.asm (削除ここまで) list5-15fix.asm
第6章
list6-1.asm list6-2.asm list6-3.asm
第7章
list7-3.asm list7-6.asm list7-7.asm (削除) list7-10.asm (削除ここまで) list7-10fix.asm
追加サンプル(印刷物には未掲載)
・スリープ命令のサンプル(スイッチを押すことでスリープから復帰してLEDを点灯/消灯する)ss7-sleep.asm
・ウォッチ・ドッグ・タイマのサンプル(ウォッチ・ドッグ・タイマでスリープから復帰することでLEDを点滅、4章のディレイ・ループで作っていたタイミングをウォッチ・ドッグ・タイマにしスリープするプログラム)ss7-sleep_wdt.asm
・EEPROMに閾値を記憶しておくサンプル(第5章のレジスタに閾値を覚えていたプログラムの改良版)ss7-eeprom.asm
AppendixA
listA-1.asm
2005年05月12日 リスト5-3,5-5に関して;
リスト5-3を表計算で値を求める方法。Excelですと次のようにして求められます。
A1 を 0 に B1 を =MIN(FLOOR(256-32*LOG(256-E1, 2)+0.5, 1), 255)します。
A2 は =A1+1 とし B2 は B1 のコピーとします。そして 2 行目を3行目から256 行までにコピーします。B の列が求める数値です。calc.xls がExcelでの計算例です。
計算の意味ですが、MIN() で最大値が255を超えないようにしています。FLOOR() 関数の中身は本文の式に 0.5 を足したものです。FLOOR() 関数は切捨て計算を 行うので、0.5 をあらかじめ足しておくことで、四捨五入の計算としています。
リスト5-5で実行したら、逆に明るいときに点滅します。上から 4,5行目を以下のように改め、暗くなると点滅するようになりました。
movwf ADRESH
addlw -D'128'
リスト5-5 については、申し訳ありません。試された方法ですと本文のコメント 通りの動作になりますが、該当部分は以下のように訂正させてください。
movfw ADRESH ; w に変換結果を代入 sublw D'128' ; 暗さの閾値と比較をする ; 128 - w の結果が負(C が 0)なら暗い btfss STATUS, C goto blink_LED------------------------------------------------------------------------