使用8086汇编语言与Arduino沟通

问题描述:

我需要在我的任务中使用8086汇编语言与Arduino连接。当我运行汇编程序时,蜂鸣器会响起。我使用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

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

该代码被试图安装COM1串口:

  • 9600波特
  • 奇校验
  • 1个停止位
  • 8个数据位

但是这里有一条关键指令!你仍然需要请求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