<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

78K0マイコン:試行

2008年09月01日 | PIC・マイコン
昨日までの累計アクセス数=12,021。 ご訪問頂きありがとうございます。         日記@BlogRanking


以前、「78K0マイコン:ブートローダ」でブートローダを作りましたが、当時のテストは、
雑誌付録のプログラムで、基盤上のLEDを点滅させるモノでした。

78K0化(続き:新型PC化)」で設計した(エッ! ハイ、実は設計段階だったんです。)
モノを作るべく、製造段階に入りました。

78K0マイコン基盤に、(必須では無いが)「USB・Bレセプタクル」と、
これは必須である「28ピンDIP連結ソケット」をハンダ付けしました。

付属の開発ツール:CC78K0コンパイラとLK78K0リンカ等を用いて、
ポートP10、P11に繋いだLEDを点滅させるソフトを開発しました。

RAM上で動かすので、「RamStart.asm」とリンカ用「RAMAPP.dr」をプロジェクトにコピーして、
ソース上では、「trgbios.h」と「types.h」をインクルードするようにしました。(ソース全体は後ほど載せます。)

回路図は下図の通りです。

抵抗が、3K3 なのは、電流値を制限したためです。(暗いけど)


78K0マイコン用プログラムの仕様:
PCからUSB経由で1文字入力し、
文字が. ならば終了する。
文字がX ならば500ms毎、5回、P10ポートのLEDを点滅させる。
文字がx ならば250ms毎、10回、P10ポートのLEDを点滅させる。
文字がY ならば500ms毎、5回、P11ポートのLEDを点滅させる。
文字がy ならば250ms毎、10回、P11ポートのLEDを点滅させる。
それ以外は、無視する。
という単純なモノです。

テスト実行はOK。メデタシメデタシ。

見ていただきありがとうございました。お帰りに投票して頂けるとありがたいです。 ⇒ 日記@BlogRanking
どうぞ宜しくお願い致します。



78K0マイコン用Cソースは以下です。(段付けの為、先頭に2B空白がある。)
----------------------- a.c ----------------------------------------------
#pragma sfr
#include "types.h"
#include "trgbios.h"
void waitus(U16 vvv){ // vvv us のWAITを行う(正確には1.4usくらい)
 while(vvv--) ;
}
void waitms(U16 ww){ // ww ms のWAITを行う
 while(ww--) waitus(740);
}
void task1(){
 U8 i;
 for ( i=0 ; i<10 ; i++ ){   P1.0 ^= 0x01; // LED のポートP10を点滅
 }
}
void task2(){
 U8 i;
 for ( i=0 ; i<20 ; i++ ){   P1.0 ^= 0x01; // LED のポートP10を点滅
 }
}
void task3(){
 U8 i;
 for ( i=0 ; i<10 ; i++ ){   P1.1 ^= 0x01; // LED のポートP11を点滅
 }
}
void task4(){
 U8 i;
 for ( i=0 ; i<20 ; i++ ){   P1.1 ^= 0x01; // LED のポートP11を点滅
 }
}
void main() {
 PM1.0 = 0; // LED のポートP10を出力用にする
 PM1.1 = 0; // LED のポートP11を出力用にする
 while(1) {
  char c = trg_getc(); // USB から1 文字取得
  if(c == '.') break; // 文字が. ならば終了
  if(c == 'X') task1(); // 文字がX ならば500ms毎 P10
  if(c == 'x') task2(); // 文字がx ならば250ms毎 P10
  if(c == 'Y') task3(); // 文字がY ならば500ms毎 P11
  if(c == 'y') task4(); // 文字がy ならば250ms毎 P11
 }
}

-------------------------------

ABV4(Active BASIC Ver.4)のアプリは、ブートローダ用のIO処理部分のみ載せる。
(段付けの為、先頭に2B空白がある。)
'
'
Dim ins$ As String, ots$ As String, j As Long, p As *Byte
'
' ======= 78K0 とのIO処理 ============
'
Do
 Input "コマンド=";ins$
 v=Len(ins$) : If v=2 Then *fin
 if v>0 Then p=StrPtr(ins$) : memcpy(buf,p,v)
 buf[v]=13 : v++ : buf[v]=0
 j=WriteFile(hComm, buf, v, VarPtr(k), ByVal 0) ' 書き出し
 Sleep(15)
 j=ReadFile(hComm, buf, 250, VarPtr(k), ByVal 0) ' 読み込み
 buf[k]=0 : ots$=MakeStr(buf)
 Print "受信文字列=";ots$
Loop
' ===================================================================


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。