使用 8086 汇编语言与 Arduino 通信



我需要在作业中使用 8086 汇编语言与 Arduino 连接。当我运行汇编程序时,蜂鸣器会响起。我使用 DOSBox 运行汇编程序。

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",并且蜂鸣器会响起。但是,当我运行汇编程序时,没有任何反应。问题出在哪里?

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

最新更新