; Copyright 2005 Doi Shigeki ;list1004.asm h8/3694Fテスト・プログラム ウィンドウからの制御 ; .CPU 300HN ;ノーマルモード  ;HEWならなくてもよい .SECTION sec0,DATA,LOCATE=H'0000 ;sec0という名のセクションを0x0000から展開 .DATA.L start ;リセット・ベクトル ;割り込みは使用しないのでほかのベクトルはなし .SECTION sec1,CODE,LOCATE=H'0100 ;sec1という名のセクションを0x0100から展開 start: MOV.L #H'FF80,ER7 ;スタック・ポインタ設定 MOV.B #H'FF,R0L ;ポート5を出力に設定 MOV.B R0L,@H'FFE8 ;ポート5 MOV.B #B'00000111,R0L ;ADを7ビット目にする MOV.B R0L,@H'FFB8 ;つまり0〜6ビットはディジタルで使う MOV.B #B'00000000,R0L ;非同期,8ビット,パリティなし,一応偶数 MOV.B R0L,@H'FFA8 ;stop1,mp=0,cks=00 MOV.B #D'64,R0L ;ボーレートを9600ボーに設定 MOV.B R0L,@H'FFA9 MOV.B #B'00110000,R0L ;割り込み不許可,送受信イネーブル,内部クロック MOV.B R0L,@H'FFAA MOV.L #D'333,ER2 ;ボーレート安定待ち,0.1ms init2: DEC.L #1,ER2 BNE init2 MOV.B #B'00000010,R0L ;P22をTxピンにする MOV.B R0L,@H'FFE0 ;PMR1に設定 MOV.B #H'00,R1L ;直前サンプル値の初期値 ;データの受信 loop: BTST #D'6,@H'FFAC ;SSRの受信フラグのチェック BEQ loop2 ;空きなら受信をスキップ BSR getch ;データの送信 loop2: MOV.B @H'FFDD,R0L ;PBからスイッチの状態を入力 AND.B #H'0F,R0L ;スイッチ部分の取り出し CMP.B R0L,R1L ;直前サンプルと比較 BEQ loop ;変化なしなら先頭へ BSR putch ;送信 JMP @loop getch: MOV.B @H'FFAD,R0L ;受信 MOV.B R0L,@H'FFD8 ;P5経由でLEDに出力 RTS putch: MOV.B R0L,R1L ;直前サンプルを更新 OR.B #H'30,R0L ;一応数字コードに加工 put2: BTST #D'7,@H'FFAC ;SSRの送信フラグのチェック BEQ put2 ;空きでないなら待つ MOV.B R0L,@H'FFAB ;送信 MOV.L #D'33333,ER2 ;チャタリング・キャンセル,10ms/20MHz put3: DEC.L #1,ER2 ;(1/20MHz)*33333*6=10ms BNE put3 RTS .END