我需要在作业中使用 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