2017-07-17 14 views
1

私の割り当てでArduinoに接続するには、8086アセンブリ言語を使用する必要があります。アセンブリプログラムを実行すると、ブザーが鳴ります。 DOSBoxを使ってアセンブリプログラムを実行します。8086アセンブリ言語を使用してArduinoと通信する

int buzzer = 11; 
int val; 

void setup() { 
    pinMode(buzzer, OUTPUT); 
    Serial.begin(9600); 
} 

void loop() { 
    val = Serial.read(); 
    if(-1 != val) { 
    if('H' == val) { 
     unsigned char i; 
     for(i = 0; i < 80; i++) { 
     digitalWrite(buzzer, HIGH); 
     delay(1); 
     digitalWrite(buzzer, LOW); 
     delay(1); 
     } 
     for(i = 0; i < 100; i++) { 
     digitalWrite(buzzer, HIGH); 
     delay(2); 
     digitalWrite(buzzer, LOW); 
     delay(2); 
     } 
    } 
    } 
} 

上記は私のArduinoコードです。 COM1が 'H'を受信すると、ブザーが鳴ります。

.MODEL SMALL 
.STACK 64 
.DATA 
.CODE 
MAIN PROC 
     MOV AX,@DATA 
     MOV DS,AX 
     MOV AH,00 
     MOV AL,11101011b 
     MOV DX,00 
     MOV AH,1 
     MOV AL,'H' 
     MOV DX,00 
     INT 14H 
     MOV AX,4C00H 
     INT 21H 
MAIN ENDP 
END MAIN 

上記は私のアセンブリコードです。アセンブリコードを実行すると、COM1に 'H'を送り、ブザーが鳴ります。しかし、アセンブリプログラムを実行すると何も起こりません。何が問題ですか?

+0

あなたはシリアルポートを初期化し、その後、あなたのデータを送信する必要があります。 –

+0

dosbox confファイルのシリアルポートを初期化しようとしていますか? – LianChyn

+0

dosbox-0.74.confのserial1 = directserial realport:COM1を変更した後、DOSBoxはエラーメッセージ "Serial1:Errors:Framing 0、Parity 0、Overrun RX960(IF0:0)、TX:0、Break 0"を表示し続けます。 – LianChyn

答えて

2
MOV AH,00 
MOV AL,11101011b 
MOV DX,00 

このコードは、セットアップにCOM1シリアルポートをしようとしている:

  • 奇数パリティ
  • 1ストップビット
  • 8データビット

ここに欠けている重要な指示が1つあります。あなたはまだ、実際ににそれを行うにはBIOSを要求する必要があります。

int 14h 

MAIN PROC 
    xor dx, dx  ; Select COM1 
    mov ah, 00h  ; InitializeCommunicationsPort 
    mov al, 11101011b ; 9600, odd, 1, 8 
    int 14h 
    mov ah, 01h  ; WriteCharacterToCommunicationsPort 
    mov al, 'H' 
    int 14h 
    test ah, ah 
    jns OK 
    ... function failed with errorcode in bits 0-6 of AH 
    OK: 
    mov ax, 4C00h  ; TerminateWithReturnCode 
    int 21h 
MAIN ENDP 
END MAIN 
関連する問題