新手问题keil c serial interrupt

来源:百度知道 编辑:UC知道 时间:2024/06/21 10:11:39
写了一个超级简单的程序
#include<reg52.h>

main()
{
P0=0x3F;
P2=1;
}
在硬件仿真的时候,总是不能退出,必须使用夭折功能。这是为什么?p2接的数码管选通,p0送的段码。新手问题,请帮忙解答,谢谢。

新手常见问题:main函数中没有while(1),导致main函数执行完以后复位,
从0x0000到0x0015又执行了一遍(如下)。
keil生成的汇编代码:
C:0x0000 020003 LJMP C:0003
C:0x0003 787F MOV R0,#0x7F
C:0x0005 E4 CLR A
C:0x0006 F6 MOV @R0,A
C:0x0007 D8FD DJNZ R0,C:0006
C:0x0009 758107 MOV SP(0x81),#0x07
C:0x000C 02000F LJMP main(C:000F)
3: main()
4: {
5: P0=0x3F;
C:0x000F 75803F MOV P0(0x80),#0x3F
6: P2=1;
C:0x0012 75A001 MOV P2(0xA0),#0x01
7: }
C:0x0015 22 RET ;你的问题应该是这条语句引起的

修改后:

#include<reg52.h>

main()
{
P0=0x3F;
P2=1;
while(1);//一般在while()中做人机交互,比如按键检测、处理。
}

对应的汇编代码:
C:0x0000 020003 LJMP C:0003
C:0x0003 787F MOV R0,#0x7F
C:0x0005 E4 CLR A
C:0x0006 F6 MOV @R0,A
C:0x0007 D8FD DJNZ R0,C:0006
C:0x0009 758107 MOV SP(0x81),#0x07
C:0x000C 02000F LJMP main(C:000F)
3: main()
4: {
5: P0=0x3F;
C:0x000F 75