LL: LCALL DISP JB P3.4,LL SETB TR0 CLR P1.6 Q2: MOV R4,#20 Q1: MOV TH0,#3CH MOV TL0,#0B0H Q0: JB P3.5,L2 MOV 70H,#1 SETB P1.6 SJMP NEXT L2: JB P3.6,L3 MOV 70H,#2 SETB P1.6 SJMP NEXT L3: JB P3.7,L4 MOV 70H,#3 SETB P1.6 SJMP NEXT L4: LCALL DISP JNB TF0,Q0 CLR TF0 DJNZ R4,Q1 INC 72H MOV A,72H CJNE A,#10,Q2 SETB P2.1 MOV R4,#100
时间: 2023-10-11 07:05:35 浏览: 131
这是8051单片机的汇编代码。这段代码用来控制一个数码管显示数字,并通过P3.4~P3.7这四个引脚来控制显示的数字。
具体来说:
- LCALL DISP 调用子程序DISP,用来控制数码管显示数字
- JB P3.4,LL 如果P3.4引脚的电平为高电平,跳转到LL标签处执行程序
- SETB TR0 将定时器0的运行控制位置为1,表示定时器0开始工作
- CLR P1.6 将单片机P1.6引脚的电平置低
- MOV R4,#20 将20存储到R4寄存器中
- MOV TH0,#3CH 将0x3C存储到TH0寄存器中,表示定时器0的初值为60
- MOV TL0,#0B0H 将0xB0存储到TL0寄存器中,表示定时器0的初值为176
- JB P3.5,L2 如果P3.5引脚的电平为高电平,跳转到L2标签处执行程序
- MOV 70H,#1 将1存储到内存地址0x70中
- SETB P1.6 将单片机P1.6引脚的电平置高
- SJMP NEXT 无条件跳转到NEXT标签处执行程序
- JB P3.6,L3 如果P3.6引脚的电平为高电平,跳转到L3标签处执行程序
- MOV 70H,#2 将2存储到内存地址0x70中
- SETB P1.6 将单片机P1.6引脚的电平置高
- SJMP NEXT 无条件跳转到NEXT标签处执行程序
- JB P3.7,L4 如果P3.7引脚的电平为高电平,跳转到L4标签处执行程序
- MOV 70H,#3 将3存储到内存地址0x70中
- SETB P1.6 将单片机P1.6引脚的电平置高
- SJMP NEXT 无条件跳转到NEXT标签处执行程序
- LCALL DISP 调用子程序DISP,用来控制数码管显示数字
- JNB TF0,Q0 如果定时器0没有溢出,跳转到Q0标签处执行程序
- CLR TF0 将定时器0的溢出标志位清零
- DJNZ R4,Q1 将R4寄存器的值减1,如果不为0,跳转到Q1标签处执行程序
- INC 72H 将内存地址0x72中的值加1
- MOV A,72H 将内存地址0x72中的值读入A寄存器
- CJNE A,#10,Q2 如果A寄存器中的值不等于10,跳转到Q2标签处执行程序
- SETB P2.1 将单片机P2.1引脚的电平置高
- MOV R4,#100 将100存储到R4寄存器中
执行完这段程序后,单片机会根据P3.5~P3.7引脚的电平来控制数码管显示数字。同时,定时器0会开始工作,每经过50ms,定时器0会产生一个中断。当定时器0的溢出标志位被置位时,程序会将R4寄存器的值减1,直到R4的值减为0,然后会将内存地址0x72中的值加1,并将单片机P2.1引脚的电平置高。
阅读全文