使用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',并且蜂鸣器会响起。但是,运行程序集时没有任何反应。问题是什么?
答
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
你应该初始化串口,之后发送数据。 –
你的意思是初始化dosbox conf文件中的串口? – LianChyn
在dosbox-0.74.conf中,我更改serial1 = directserial realport:COM1后,DOSBox继续显示错误消息“Serial1:Errors:Framing 0,Parity 0,Overrun RX960(IF0:0),TX:0,Break 0”。 – LianChyn