PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.12

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆PIC18F2550

今までの説明はPIC18F4550を使って行なってきましたが、PIC18F4550は40pinのICでサイズが大きすぎます。ピン数が多いだけにI/Oポートも十分あるのですが、USBインターフェースとしての用途に限定すれば、そんなに沢山のI/Oは必要ありません。
そこでこれからはPIC18F2550を使って説明をしていくことにしました。

[第63回]

●簡単なPIC18F2550テストプログラムです

[第59回]で、「もっとも簡単なPIC18F2550テストプログラムです」というタイトルで説明をいたしました。
でも、ウソでした。
やっぱり、「もっとも」とか「最高の」とか、とにかく most とか only one を意味する形容詞は余程注意して用いないと、うそを書いてしまうことになります。

もっと簡単になるじゃないの、ということに気が付きました。
でも、今回は注意深く、「もっとも簡単」とは書かないことにいたしました。

;;;pic p18f2550 test program
;f2550test1
;4/25 4/28
;
	#include<p18f2550.inc>
;
;cpuclock=8MHz internal oscillator
;
	CONFIG FOSC=INTOSC_EC,WDT=OFF,LVP=OFF,MCLRE=OFF          
;
	org 00
start
	movlw 7f;clock=8MHz
	movwf OSCCON
	movlw 0f
	movwf ADCON1;porta,b are digital
	movlw 0;porta-c are output
	movwf TRISA
	movwf TRISB
	movwf TRISC
;
	movlw 1
loop
	xorwf PORTA
	goto loop
;
	end

どこが、さらに簡単になったのか、と言いますと、[第59回]でのリストでは、start のところが、

        org 00
st0
	goto start
;
	org 1a
start
	movlw 7f;clock=8MHz

となっていました。
今回のプログラムでは、
st0からorg 1aまでが無くなっています。

●interrupt vector

じつはこの部分、アドレス1aよりも前の部分は割込みのときのエントリアドレスとしてリザーブされているのです。
PIC16Fでは、アドレス04が割込みのエントリポイントでした。
PIC18F2550では、下図のようになっています。


[出典]PIC18F2455/2550/4455/4550DataSheet

アドレス0008がHigh−Priority Interrupt Vectorで、アドレス0018がLow−Priority Interrupt Vectorと書いてあります。
Vectorと書いてありますけれど、ここにテーブルを置いてもエラーになるだけです。
要するに、割込みが発生すると、このアドレスに書いてある命令が実行される、ということで、割込みプログラムの開始アドレスのことです。

PIC18F2550では割込みはPriority(優先度)の高い割込みと低い割込みの2種類を使うことができます。
たとえばTimerであるとかUSARTであるとかを割込みで使いたいという場合に、その割込みをHigh−Priorityとするか、Low−Priorityとするかを選択することができます。

High−Priorityに設定した割込みは、Low−Priorityの割込みの処理中でも受付けられるようです。
実はまだPIC18F2550の割込みは使ったことがありません。
DataSheetをざっと読んだだけですから間違っているかもしれません。

また割込みにプライオリティの別を設定せず、PIC16Fと同じような割込みモードにすることもできるようです。
デフォルトではプライリティ無しのモードになっているようですが、試したわけではありません。
いずれ確認することになると思いますから、そうしたら、またその結果をご報告いたします。

む?
デフォルトではPIC16Fと同じ、プライオリティ無しの割込みモードになる?
じゃあ、そのときの割込みのVector(エントリポイントのこと)は、どこになるのでしょう?
0008?
0018?
それとも0004?いや、これは、まさかねえ。
ああ。時間ができましたら、また、じっくり試して確認してみることにいたします。

それで。本題に戻ります。
[第59回]のプログラムでは、この割込みのためのアドレスをリザーブしておくために、そのような書き方にしていたのですが、この部分は割込み以外には使えない、ということではありません。
割込みを使わないのでしたら、普通のプログラムを書いてしまっても全く構いません。
ここでのテストプログラムは、「簡単なプログラム」というお題なのですから、使いもしない割込みのためのエリアをリザーブしておく必要はありませんでした。

そこで、今回のプログラムリストのように、そこをつぶしてしまってすっきりさせてしまった、というわけです。
もちろん、このプログラムも、ちゃんと問題無く実行できることを確認済みです。
CPUをつくろう!第490回(2010.4.29upload)を再編集

PICでUSBを![第63回]
2011.7.12upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る