昨日までの累計アクセス数=12,021。 ご訪問頂きありがとうございます。 ![日記@BlogRanking](http://img.diary-ranking.com/banner03s.gif)
以前、「78K0マイコン:ブートローダ」でブートローダを作りましたが、当時のテストは、
雑誌付録のプログラムで、基盤上のLEDを点滅させるモノでした。
「78K0化(続き:新型PC化)」で設計した(エッ! ハイ、実は設計段階だったんです。)
モノを作るべく、製造段階に入りました。
78K0マイコン基盤に、(必須では無いが)「USB・Bレセプタクル」と、
これは必須である「28ピンDIP連結ソケット」をハンダ付けしました。
付属の開発ツール:CC78K0コンパイラとLK78K0リンカ等を用いて、
ポートP10、P11に繋いだLEDを点滅させるソフトを開発しました。
RAM上で動かすので、「RamStart.asm」とリンカ用「RAMAPP.dr」をプロジェクトにコピーして、
ソース上では、「trgbios.h」と「types.h」をインクルードするようにしました。(ソース全体は後ほど載せます。)
回路図は下図の通りです。
![](https://blogimg.goo.ne.jp/user_image/08/99/1142e737e1cadbb4be9260d419250fb9.png)
抵抗が、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。メデタシメデタシ。![](https://blogimg.goo.ne.jp/img_emoji/hakushu.gif)
見ていただきありがとうございました。お帰りに投票して頂けるとありがたいです。 ⇒![日記@BlogRanking](http://img.diary-ranking.com/banner03s.gif)
どうぞ宜しくお願い致します。
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
' ===================================================================
![日記@BlogRanking](http://img.diary-ranking.com/banner03s.gif)
以前、「78K0マイコン:ブートローダ」でブートローダを作りましたが、当時のテストは、
雑誌付録のプログラムで、基盤上のLEDを点滅させるモノでした。
「78K0化(続き:新型PC化)」で設計した(エッ! ハイ、実は設計段階だったんです。)
モノを作るべく、製造段階に入りました。
78K0マイコン基盤に、(必須では無いが)「USB・Bレセプタクル」と、
これは必須である「28ピンDIP連結ソケット」をハンダ付けしました。
付属の開発ツール:CC78K0コンパイラとLK78K0リンカ等を用いて、
ポートP10、P11に繋いだLEDを点滅させるソフトを開発しました。
RAM上で動かすので、「RamStart.asm」とリンカ用「RAMAPP.dr」をプロジェクトにコピーして、
ソース上では、「trgbios.h」と「types.h」をインクルードするようにしました。(ソース全体は後ほど載せます。)
回路図は下図の通りです。
![](https://blogimg.goo.ne.jp/user_image/08/99/1142e737e1cadbb4be9260d419250fb9.png)
抵抗が、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。メデタシメデタシ。
![](https://blogimg.goo.ne.jp/img_emoji/hakushu.gif)
見ていただきありがとうございました。お帰りに投票して頂けるとありがたいです。 ⇒
![日記@BlogRanking](http://img.diary-ranking.com/banner03s.gif)
どうぞ宜しくお願い致します。
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
' ===================================================================