第2个回答 2008-11-07
MOV R0,#01H
MOV R7,#00H
MOV R6,#00H
LOOP:CLR C
MOV A,R0
ADD A,R6
MOV R6,A
CLR A
ADDC A,R7
MOV R7,A
INC R0
CJNE R0,#65H,LOOP
NOP
END
结果放高位放在R7和低位放在R6中,形式为16进制。
第3个回答 2008-11-07
给你一个个人编写的代码(含有汇编编程和C编程)
汇编需要注意:我在汇编的时候没有用到CJNZ的语句,是因为考虑到单片机有可能在比较恶劣的环境下使用,如果PC跑飞了(这里不考虑看门狗),会一直在循环中,我是使用了比较小于,即使PC跑飞,总有个时刻会退出循环.
汇编代码如下:
H_Byte EQU R4 ;保存结果,高8位
L_Byte EQU R5 ;保存结果,低8位
Max_Adder EQU 100 ;最大的加数
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R2,#1 ;加数
MOV R4,#0
MOV R5,#0
START:
MOV A,#Max_Adder
CLR CY
SUBB A,R2
JC RESULT
MOV A,R2
ADD A,L_Byte
MOV L_Byte,A ;保存低位
MOV A,H_Byte
ADDC A,#0
MOV H_Byte,A ;保存高位
INC R2
JMP START
RESULT:
SJMP $ ;只用于调试
END
C语言代码如下:
#include "at89x51.h" //由于你这里只是计算结果,所以这行代码可以去掉
void main(void)
{
unsigned char i=1;
unsigned int result=0;
for(i=1;i<=100;i++)
result+=i;
while(1); //这里用于调试
}
以上程序都调试通过了.