用汇编语言编写串口方式3下的接收程序(包括主程序和中断服务程序)。设波特率为2400bps,fosc=6MHZ,接收数据采用偶校验。接收数据存放在片外RAM,起始地址为5020H,数据块长度为40字节。
时间: 2024-03-24 16:41:51 浏览: 45
串口数据接收和发送程序
5星 · 资源好评率100%
以下是8051单片机串口接收程序的汇编代码,其中采用了方式3,波特率为2400bps,偶校验,并将接收到的数据存放在外部RAM中。
```
ORG 0H
LJMP main
ORG 23H
CLR RI
MOV A, SBUF
JB P, skip_parity
MOV R1, A
CLR P
MOV A, R1
skip_parity:
MOV R0, count
CJNE R0, #40, receive_data
MOV count, #0
MOV R0, #0
MOV DPTR, #5020H
MOVX @DPTR, R0
INC DPTR
INC DPTR
MOV R0, #40
write_data:
MOVX @DPTR, buffer
INC DPTR
DJNZ R0, write_data
SJMP end_UART_ISR
receive_data:
MOV buffer, A
INC count
end_UART_ISR:
RETI
main:
MOV SP, #40H
MOV TMOD, #20H
MOV TH1, #-3
MOV SCON, #50H
SETB ES
SETB EA
MOV count, #0
MOV DPTR, #buffer
MOV R0, #0
MOV R1, #40
clear_buffer:
MOVX @DPTR, R0
INC DPTR
DJNZ R1, clear_buffer
SJMP $
buffer: DB 40 DUP(0)
count: DB 0
END
```
在主程序中,我们首先定义了外部RAM的起始地址为5020H,数据块长度为40字节。然后设置了堆栈指针、串口模式、波特率、偶校验,并启用了中断。在中断服务程序中,我们判断是否接收到了数据,并将其存放在buffer数组中。当buffer数组中的数据达到40字节时,我们将其写入外部RAM中,并将count清零。最后在主程序的无限循环中轮询count变量,以检查是否有新的数据需要写入外部RAM中。
阅读全文