双机通信,设fosc=6MHz,波特率1200b/s,采用方式1,甲机将内存20H-2FH单元数据发送出去,乙机接收数据,并存入内存30H-3F单元。请分别编写查询方式的甲机发送和中断方式的乙机接收程序。
时间: 2024-11-04 17:10:51 浏览: 30
单片机试题2-参考答案.doc
双机通信中,甲机(发送端)和乙机(接收端)通常会通过串口通信协议(如UART)进行数据交换。假设使用的方式1是指8位异步通信,每个字符由起始位、8位数据位、奇偶校验位和停止位组成。
**甲机(发送端)查询方式程序**(使用单片机汇编语言示例,假设是ATMega系列,51单片机类似):
```assembly
; 发送数据
MOV R1, #20H ; Load the starting address of data to send (0x20)
MOV SCON, #50h ; Set mode 1 (8-bit, no parity, 1 stop bit)
send_loop:
MOV A, @R1 ; Load data from memory into accumulator
OUT SBUF, A ; Send a character through serial port
INC R1 ; Move to next byte
DJNZ R1, send_loop ; Repeat until end of buffer
; 查询模式无需中断处理
```
**乙机(接收端)中断方式程序**(同样假设ATMega系列):
```assembly
; 接收数据
SETB RIEN ; Enable receive interrupt flag
MOVC B, #30H ; Initialize receiving buffer address at 0x30
MOV IE, #1 << RIIE ; Enable receive interrupt
receive_isr:
IN A, SBUF ; Read received character into accumulator
MOV @R0, A ; Store in memory (assuming R0 as a temporary register)
INC R0 ; Move to next memory location
JMP $+2 ; Clear RI flag and return to main loop
main_loop:
JB RI, receive_isr ; Wait for interrupt when there's new data
JNB RI, main_loop ; Continue if no interrupt
```
在这个例子中,甲机的数据发送是同步的,它会依次发送整个缓冲区内的所有数据。而乙机则通过中断处理接收到来自甲机的数据,当接收到新的数据时,它会被存储到预先设置好的内存位置。
阅读全文