写出1+2+3+…+10的单片机程序,汇编!在线等速求。谢谢各位

作者&投稿:旗荔 (若有异议请与网页底部的电邮联系)
谁能帮我用汇编编一个51单片机的程序~

这还不简单吗???你根据网上的那些代码自己改编一下啊

A方案
--------------------------
外加一颗时钟芯片DS1302(非常准确)。
按键为单片机中断。
--------------------------

1、上电时自动显示时、分、秒;
实现方式:上电时单片机去启动DS1202,然后读取里面的时间值,自动显示时、分、秒;

2、设置一个控制按键,按下按键,则时钟以秒为单位开始计时;
实现方式:将DS1302此时的值暂时保存,最为计时开始的时间。
然后不停地读取DS1302里的新的时间值,
并将新的时间值 - 计时开始的时间 = 已计时数值


3、运行状态下可通过控制按键使时钟暂停,同时显示已计时数值;
实现方式:显示步骤2里的已计时数值。

4、停止状态下(已上电),按下复位按钮,时钟复位(清零),并进入下一次计时状态。
实现方式:计时开始的时间换成当前时间。

B方案
--------------------------
采用单片机内部定时器计时(不准)。
按键为单片机中断。
--------------------------
步骤类似,不用去读DS1302的时间,读自己内部的时间。

-------------------------------------------------------------------------------------------------------------------------------------------------------分割线。--------------------------------------------------------------------------
楼上的方案是当前比较常见的方案了。
没有给出程序
先给出A 方案程序如下。。。。//C语言编写。

*头文件*/
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define nop() _nop_()


sbit T_CLK = P1^4; /*实时时钟时钟线引脚 */
sbit T_IO = P1^5; /*实时时钟数据线引脚 */
sbit T_RST = P2^2; /*实时时钟复位线引脚 */
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
sbit time_en_port = P3^7; /*时间控制通道寄存器LE控制脚*/
sbit sled_en_port = P3^6; /*数码管控制通道寄存器LE控制脚*/


#define sled_dm_port P0 /*定义数码管段码的控制脚*/
#define sled_wm_port P2 /*定义数码管位码的控制脚*/
/*定义数码管显示字符跟数字的对应数组关系*/
uchar code mun_to_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */

/*定义需要点亮的数码管*/
uchar code sled_bit_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar data sled_data[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; /*0-7号SLED缓冲值*/
uchar data led_lighten_bit=0 ; /*LED灯点亮标志位0-7*/

uchar data time_data[8]={0x00,0x57,0x16,0x00,0x00,0x00,0x00,0x00};/*格式为: 秒 分 时 日 月 星期 年 */





/*-----------------------------------------------
显示部分程序,采用定时器0产生中断,1MS更新一次
------------------------------------------------*/
void SLED_Disp() interrupt 1 using 3
{
TH0 = (65536-1000)/256;
TL0 = (65536-1000)/256;
time_en_port = 0; /*关闭时钟控制通道*/
sled_wm_port = sled_bit_table[led_lighten_bit]; /*输出位码数据到数码管*/
sled_dm_port = sled_data[led_lighten_bit]; /*输出段码数据到数码管*/
sled_en_port = 1; /*打开数码管控制通道*/
sled_en_port = 0; /*关闭数码管控制通道*/
sled_wm_port = 0xdf; /* 释放P2端口,同时关闭发光二极管显示*/
time_en_port = 1; /*打开时钟控制通道*/
led_lighten_bit++;
if(led_lighten_bit>=8) led_lighten_bit=0; /*8位数码管全动态输出*/
}



void T0_valueSet() /*定义中断方式,中断时间*/
{
TMOD = 0x01; /*定时0,工作在方式1*/
TH0 = (65536-1000)/256;
TL0 = (65536-1000)/256;
TR0 = 1; /*启动计数*/
EA = 1; /*开总中断*/
ET0 = 1; /*开定时器0中断*/
return;
}




/********************************************************************

函 数 名:RTInputByte()
功 能:实时时钟写入一字节
说 明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void RTInputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/********************************************************************

函 数 名:RTOutputByte()
功 能:实时时钟读取一字节
说 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无
返 回 值:ACC
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/********************************************************************

函 数 名:W1302()
功 能:往DS1302写入数据
说 明:先写地址,后写命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucDa); /* 写1Byte数据*/
T_CLK = 1;
T_RST = 0;
}
/********************************************************************

函 数 名:R1302()
功 能:读取DS1302某地址的数据
说 明:先写地址,后读命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
/********************************************************************

函 数 名:BurstW1302T()
功 能:往DS1302写入时钟数据(多字节方式)
说 明:先写地址,后写命令/数据
调 用:RTInputByte()
入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void BurstW1302T(uchar *pWClock)
{
uchar i;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */
for (i = 8; i>0; i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
{
RTInputByte(*pWClock); /* 写1Byte数据*/
pWClock++;
}
T_CLK = 1;
T_RST = 0;
}
/********************************************************************

函 数 名:BurstR1302T()
功 能:读取DS1302时钟数据
说 明:先写地址/命令,后读数据(时钟多字节方式)
调 用:RTInputByte() , RTOutputByte()
入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void BurstR1302T(uchar *pRClock)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */
for (i=8; i>0; i--)
{
*pRClock = RTOutputByte(); /* 读1Byte数据 */
pRClock++;
}
T_CLK = 1;
T_RST = 0;
}


/********************************************************************

函 数 名:Set1302()
功 能:设置初始时间
说 明:先写地址,后读命令/数据(寄存器多字节方式)
调 用:W1302()
入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void Set1302(uchar *pClock)
{
uchar i;
uchar ucAddr = 0x80;
EA = 0;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i =7; i>0; i--)
{
W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
pClock++;
ucAddr +=2;
}
W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
EA = 1;
}
/********************************************************************

函 数 名:Get1302()
功 能:读取DS1302当前时间
说 明:
调 用:R1302()
入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
EA = 0;
for (i=0; i<7; i++)
{
ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
EA = 1;
}



void delay_1ms(uchar x)
/* 1MS为单位的延时程序 */
{
uchar j;
while(x--){
for(j=0;j<125;j++)
{;}
}
}

void main()
{
T0_valueSet();
Set1302(time_data);
while(1){
Get1302(time_data);
sled_data[0]=mun_to_char[time_data[2]/0x10];
sled_data[1]=mun_to_char[time_data[2]%0x10];

sled_data[3]=mun_to_char[time_data[1]/0x10];
sled_data[4]=mun_to_char[time_data[1]%0x10];

sled_data[6]=mun_to_char[time_data[0]/0x10];
sled_data[7]=mun_to_char[time_data[0]%0x10];

delay_1ms(200);
}
}


方案B.
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
uchar count,s1num;
char miao,shi,fen;
uchar code table[]=" 2007-7-30 MON";
uchar code table1[]=" 00:00:00";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void write_com(uchar com)
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void write_date(uchar date)
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void init()
{
uchar num;
dula=0;
wela=0;
lcden=0;
// fen=59;
// miao=53;
// shi=23;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}

void keyscan()
{
rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{ s1num++;
while(!s1);
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
if(s1num==2)
{
write_com(0x80+0x40+7);
}
if(s1num==3)
{
write_com(0x80+0x40+4);
}
if(s1num==4)
{
s1num=0;
write_com(0x0c);
TR0=1;
}


}
if(s1num!=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);


}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
if(s1num==1)
{
/* if(miao==0)
{
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}*/
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();

}
// while(1);
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);

}
}

以上的程序都是用C编写 如果是初学还是直接用C编写吧 虽然汇编也很好用 但是C已经是时代的趋势了。。
如果以上能帮到你 请给分哦。。 有什么不懂得也可以问我。

ORG 0000H
MOV R7,#11
CLR A
MOV R0,A
LOOP:ADD A,R0
INC R0
DJNZ R7,LOOP
SJMP $
END

ORG 0000H
MOV R0,#1
MOV A, #1
STA:
IN R0
CJNE R0,#11,LOOP
JEM $
LOOP:
ADD A,R0
JMP STA
END
几年没有搞那个了,不知道语法有无错误,思路应该正确.


1平方加2平方加3平方一直加到n平方等于多少
×n÷2-n 6(1²+2²+3²+···+n²)=2(n+1)³-3n(1+n)-2(n+1)=(n+1)[2(n+1)²-3n-2]=(n+1)[2(n+1)-1][(n+1)-1]=n(n+1)(2n+1)所以1²+2²+···+n²=n(n+1)(2n+1)\/6。

轩辕剑各系列的关系是什么???例如1,2,3,4,5部的关系,外传和它们的关系...
1代和2代是接着的,当时1做了一半,后来2改了人名接着做,主角是何然(天之痕里的然翁)、古月(天之痕里的古月仙人)和江如红,何然给氐人族设置了青春不老结界,然后和古月一起去了仙人岛隐居。然后就是3外天之痕,主角们向仙人求助时,仙人就是古月和然翁。古月提到神器剑、钟和塔都曾化为人形...

从3个数选出1个数的概率。
选出是1的概率是1\/3*1\/2=1\/6(1\/3意思是从1,2,3选出一个数,选中1的概率是三分之一,1\/2的意思是从选出的两个数中选中1的概率是1\/2)选出是11的概率是1\/3*1\/2=1\/6 故概率是1\/6+1\/6=1\/3

在excell中如何在一列数据如:重量:1,2,3,4,5,6,7,8,9,10中计算出在2...
2个都可以实现。假如这列数据是A列。用COUNTIF:=COUNTIF(A:A,">1")-COUNTIF(A:A,">9")而用DCOUNTA是按数据库方式求出,这样需要列出统计条件。如将条件放在C1开始的单元格,C1为重量,D1也是重量,C2输入>1,D2输入<10(或者<=9也行),则统计公式为:=DCOUNTA(A1:A10,A1,C1:D2)。其...

1,3,2,10这4个数怎样计算等于24
(10+2)×(3-1)=24,这种题一般根据三八二十四,四六二十四,二乘十二等于二十四来做,只要凑出3,8,4,6,2,12……等,就计算方便了。

用四个砝码称出1—40克所有重量,四个砝码分别为多少?
用四个砝码称出1—40克所有重量,四个砝码分别为多少?这实际上是找出4个自然数,将它们(全部,或一部分)进行加减运算后能够得出1~40的问题。首先是第一个数。自然是1。1=1。其次是第二个数。必须保证得到答案2。可以是2或3。选2,则:2-1=1,2=2,2+1=3。选3,则:3-1=2,3...

若进栈序列为1,2,3,4,5,6且进栈和出栈可以穿插进行,则不可能出现的出栈...
C 栈是先进后出,如果进栈过程中不可以出栈那就是4321.可以出栈情况就很多,也有可能是1234,(进一个就出一个)2431,2341,2413...很多排列组合了。stack<int> sta;入栈:sta.push(x);出栈:sta.pop();判断栈的大小: sta.size();判断栈是否为空:sta.empty();...

1+2=???
1+2=3。加法是基本的四则运算之一,它是指将两个或者两个以上的数、量合起来,变成一个数、量的计算。表达加法的符号为加号“+”。进行加法时以加号将各项连接起来。加法(通常用加号“+”表示)是算术的四个基本操作之一,其余的是减法 ,乘法和除法。加法是最简单的数字任务之一。 最基本的加法...

美丽的花幼儿园中班教案
1、感受花朵的形状、色彩,学习用重叠的方法剪出各种不同形状的花。 2、大胆剪贴,为构图进行添画。 3、体验剪贴的乐趣。 4、培养幼儿的观察、操作、表达能力,提高幼儿的审美情趣及创新意识。 5、感受作品的美感。 活动重点: 大胆用剪刀剪出花的轮廓形状。 活动难点: 运用重叠的方法剪出简单的花,并进行添画...

从一元开始每天翻倍30天过后多少元正确答案?
第一天:1元=2^0 第二天:2元=2^1 第三天:4元=2^2 第四天:8元=2^3 ………第n天:2^(n一1)∴第30天:2^(30-1)元

通海县18077315009: 编写程序,求m=1!+2!+3!+……+10!的值.要求用循环语句写出源程序. -
主父疮纳尔:[答案] int GetValue(void) { int a=0,b=1; for(int i=1;i

通海县18077315009: 编程实现1!+2!+3!+……10! -
主父疮纳尔: #include int main() { int i=0; long temp=1; long sum=0; for(i=1;i<=20;i++) { temp*=i; sum+=temp; } printf("sum=%ld\n",sum); return 0; }

通海县18077315009: 实验5.6 编写程序,计算1!+ 2!+ 3!+ … + 10!. -
主父疮纳尔: int sum=0; int s; for(i=1;i{ s=1; //每次循环是重置s为1,因为1乘任何数还等于任何数 for(j=i;j>=1;j--) //从基数以递减的形式到1停止循环; { s=s*j; //与每次递减后的数相乘,计算每个阶乘 } sum=sum+s; //将阶乘的结果累加 } system.out.println(sum);//sum为结果

通海县18077315009: C语言编程题.编程题目为 编程计算1!+2!+3!+……+10!的值 -
主父疮纳尔: #include <stdio.h>#define N 10 //定义符号常量//求出每一项阶乘值的函数 int fact(int n) { int i; int s; for(i=s=1;i<=n;i++) s*=i; //从1开始循环累加相乘 return s; } int main() { int s; int i; for(i=1,s=0;i<=N;i++) s+=fact(i); //从第1项开始循环累加每一项的阶乘值 printf("1!+2!+3!+……+10!=%d\n",s); return 0; }

通海县18077315009: 用 C++程序,编写出一段计算“1+2+3…+10”的结果 -
主父疮纳尔: int main(){ int nSum = 0; for(int i = 1; i

通海县18077315009: vf编程,S=1!+2!+3!+…10!.循环结构 -
主父疮纳尔: clear s=0 for i=1 to 10m=1for j=1 to im=m*jendfors=s+m endfor ?"S=1!+2!+3!+…10!=",s

通海县18077315009: 编程实现1!+2!+3!+…..+10!的结果并输出结果. -
主父疮纳尔: int Fact() {int Sum = 0;for (int i = 1; i <= 10; i++ ){int s = 1; for(int j = 1; j <= i; j++) //求阶乘{s *= j;} Sum += s; //求和}return Sum; } Java的编程不怎么会,这个C的应该都差不多. 其实10的阶乘10还好算,如果100的阶乘就难了

通海县18077315009: C程序设计中..1!+2!+3!……10!怎么编程序???? -
主父疮纳尔: s=0; t=1; for(i=1,i<11,i++) { t=t*i; s=s+t; }

通海县18077315009: s=1!+2!+3!+……+10!怎么编程序 -
主父疮纳尔: c: long i,k,s; for(i=1,s=0,k=1;i

通海县18077315009: VB程序设计:求1!+2!+3!+…+10! -
主父疮纳尔: Private Sub Command1_Click()Dim s As Long, jc As Longjc = 1For i = 1 To 10jc = jc * is = s + jcNext iPrint "所求的和为:" & s End Sub

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网