用汇编语言编写串口方式3下的接收程序。设波特率为2400bps,fosc=6MHZ,接收数据采用偶校验。接收数据存放在片外RAM,起始地址为5020H,数据块长度为40字节。
时间: 2024-03-27 22:40:27 浏览: 105
串口接收 程序代码 汇编语言
好的,下面是汇编语言编写串口方式3下的接收程序,满足你的要求:
```
ORG 0H ; 程序起始地址
MOV SP,#30H ; 初始化栈指针
MOV PCON,#00H ; 设置为常规操作模式
MOV TMOD,#20H ; 设置定时器1为模式2
MOV TH1,#FDH ; 设置波特率为2400bps
MOV SCON,#D0H ; 设置串口为方式3,偶校验,允许接收
MOV IE,#90H ; 使能串口中断和定时器1中断
MAIN:
SJMP MAIN ; 进入死循环,等待中断
ORG 23H ; 定时器1中断向量
TIMER1_ISR:
CLR TF1 ; 清除定时器1溢出标志
RETI ; 退出中断
ORG 33H ; 串口中断向量
UART_ISR:
JNB RI,SKIP ; 如果不是接收中断则跳过
MOV A,SBUF ; 读取接收到的数据
MOV R0,A ; 备份数据
MOV A,PCON ; 读取PCON寄存器
CPL P ; 取反校验位
ANL A,#7FH ; 清除校验位
JNB ACC.0,SKIP ; 如果校验不通过则跳过
MOV A,R0 ; 恢复数据
MOVX @DPTR,A ; 写入外部RAM
INC DPTR ; 指向下一个地址
DJNZ R1,CONTINUE ; 继续接收
CLR RI ; 清除接收标志
RETI ; 退出中断
SKIP:
CLR RI ; 清除接收标志
RETI ; 退出中断
CONTINUE:
CLR RI ; 清除接收标志
SETB TB8 ; 设置发送位
MOV SBUF,A ; 发送ACK
CLR TB8 ; 清除发送位
RETI ; 退出中断
```
这个程序使用了定时器1和串口中断来实现接收数据,并将数据存储在外部RAM中。程序首先初始化相关寄存器和中断向量表,然后进入死循环等待中断。当有数据接收时,程序会读取接收到的数据,并进行偶校验。如果校验通过,则将数据写入到外部RAM中,并发送ACK信号。程序会一直接收数据,直到接收满40个字节。
阅读全文