乱写的,凑合看吧:
ORG 2000H
CLR A
MOV R7,#0
MOV R6,#0
MOV R5,#30
MOV R4,#20
MOV R3,#50H
MOV R2,#20H
LOOP1: MOV A,@R4
JNB ACC.7,LOOP2 ;判断符号数的正负
INC @R3
MOVX @R3,A ;负数存入外存中51H开始的单元中
INC @R7 ;负数个数+1
LOOP2: INC @R2
MOVX @R2,A ;正数存入外存中21H开始的单元中
INC @R6 ;正数个数+1
CJNE A,#64H,LOOP3
SJMP LOOP4
LOOP3: JNC LOOP4
MOV B,#0AH ;小于100的数改成压缩BCD码送还至原地址单元
DIV AB
SWAP A
ADD A,B
MOV @R4,A
LOOP4: MOV @R4,#0AAH ;不小于100的数改为AAH送还至原地址单元
INC @R4
DJNZ R5,LOOP1
MOV DPTR,#20H ;正数的个数存放至外存区20H单元中 MOV A,@R6
MOVX @DPTR,A
MOV DPTR,#50H ;负数的个数存放在外存区50H单元中
MOV A,@R7
MOVX @DPTR,A
SJMP $
上边的几个回答- -...此程序若还有错误请及时联系我修改,谢谢先!
另:各位参考的童鞋切记要加相关注释,多少做点改动,被老师认为雷同的渣就概不负责了哈。
So,建兄,渣就不多解释了。
#include
#include
sbit freOut = P1^7;
void intTC0(void);
void intTC0(void) interrupt 1
{
TF0 = 0;
freOut = (1^freOut); //freOut = ~freOut;
}
void main (void)
{
freOut = 0;
TMOD = 0x02; //定时器0工作方式2,自动装载,8位
PCON = 0; //12T
TH0 = TL0 = 256-200/2 //晶振12M,12T,(++1)/(1us)
TR0 = 1; //使能定时器0
EA = 1; //使能中断总开关
while(1);
}
//很简单吧
;
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP T0_INT
MAIN:
MOV TMOD, #02H ;T0定时方式2(自动重新装入初始值)
MOV TH0, #100 ;定时100us
MOV TL0, #100
SETB TR0
MOV IE, #82H ;开放T0中断.
SJMP $ ;等待中断来临.
T0_INT:
CPL P1.7 ;每隔100us,取一次反.
RETI
END
ORG 0000H
LJMP START
ORG 00B0H
P1.7=!P1.7
RETI
ORG 0030H
START:
SETB EA
SETB ET0
MOV TMOD ,#02H
MOV TL0,#38H
MOV TH0,#38H
SETB TR0
DD:
JMP DD
END