单片机型号为89c51。用汇编语言编写:自选ROM若干个单元,手动输入BCD码,并编程实现下列任务要求: (1)统计优秀(90≤X≤100)、良好(80≤X<90)、中等(70≤X<80)、及格(60≤X<70)与不及格(X<60)各分数段的人数并存储于内部RA
时间: 2024-03-10 11:50:48 浏览: 125
基于89C51单片机汇编程序
M中(从M0H开始)。
下面是汇编代码实现:
```
ORG 0H ;程序起始地址
MOV DPTR,#M0H ;DPTR寄存器指向M0H内存单元
MOV R0,#00H ;清零计数器
MOV R1,#00H ;清零计数器
MOV R2,#00H ;清零计数器
MOV R3,#00H ;清零计数器
MOV R4,#00H ;清零计数器
MOV P1,#0FFH ;将P1口设置为输入状态
AGAIN: MOV A,P1 ;读取P1口输入的BCD码
CJNE A,#90H,SKIP1 ;判断分数是否大于等于90
INC R4 ;如果是,将不及格人数计数器加1
SJMP NEXT ;跳转到下一步
SKIP1: CJNE A,#80H,SKIP2 ;判断分数是否大于等于80
INC R3 ;如果是,将及格人数计数器加1
SJMP NEXT ;跳转到下一步
SKIP2: CJNE A,#70H,SKIP3 ;判断分数是否大于等于70
INC R2 ;如果是,将中等人数计数器加1
SJMP NEXT ;跳转到下一步
SKIP3: CJNE A,#60H,SKIP4 ;判断分数是否大于等于60
INC R1 ;如果是,将良好人数计数器加1
SJMP NEXT ;跳转到下一步
SKIP4: INC R0 ;否则,将优秀人数计数器加1
NEXT: ACALL INPUT ;输入下一个BCD码
CJNE A,#0DH,AGAIN ;如果输入的不是回车符,继续循环
MOVX @DPTR,R0 ;将优秀人数存储到M0H中
INC DPTR ;DPTR指向下一个内存单元
MOVX @DPTR,R1 ;将良好人数存储到M1H中
INC DPTR ;DPTR指向下一个内存单元
MOVX @DPTR,R2 ;将中等人数存储到M2H中
INC DPTR ;DPTR指向下一个内存单元
MOVX @DPTR,R3 ;将及格人数存储到M3H中
INC DPTR ;DPTR指向下一个内存单元
MOVX @DPTR,R4 ;将不及格人数存储到M4H中
END ;程序结束
INPUT: MOV A,#0AH ;设置波特率为2400
MOV SCON,#50H ;设置串口为模式1
AGAIN1: JNB RI,AGAIN1 ;等待接收到数据
CLR RI ;清除接收中断标志
MOV A,SBUF ;将接收到的数据存储到A寄存器中
JZ EXIT ;如果输入的是0,跳转到EXIT
MOV P0,A ;将输入的BCD码显示在LED灯上
MOV A,#38H ;设置波特率为2400
MOV SCON,#50H ;设置串口为模式1
MOV SBUF,A ;发送ACK信号
AGAIN2: JNB TI,AGAIN2 ;等待发送完毕
CLR TI ;清除发送中断标志
SJMP AGAIN1 ;返回INPUT
EXIT: RET ;返回主程序
```
阅读全文