80c51单片机汇编程序!!!!急急急急急

如图,达人们给个程序、要出现四种波形,锯齿波,三角波,方波,正弦波
最好把设计思路、设计程序的重点是在那里、每段程序的意思,要汇编语言

#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

unsigned char x=0,m=0,y=128;

sbit WR_DA=P2^1;
sbit CS_DA=P2^0;//DA与单片机的接口
sbit S0=P3^0; //波形选择,每次按下将产生不同的波形
sbit S1=P3^1; //频率减
sbit S2=P3^2; //频率加
sbit S3=P3^3; //调节方波的占空比

uchar code SinTab[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5

,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5

,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd

,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda

,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99

,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51

,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16

,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15

,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e

,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };

void delayms(uint t)
{
uint i;
while(t--)
{
for (i=0;i<125;i++);//对于11.0592M时钟,约延时1ms
}
}

void delay(uint t)
{
uint i;
for (i=t;i>0;i--);
}

void time0_init()
{
TMOD|=0x01; //定时器设置 16位
TH0=-50000/256;
TL0=-50000%256;//初始化值
ET0=1;
TR0=1;
EA=1;
}

void time0_int(void) interrupt 1
{
TR0=0;//关闭定时器
TH0=-50000/256;
TL0=-50000%256;//重装初值

if(S0==0)
{
delayms(10);//按键消抖
if(S0==0) m++;
while(!S0);//松手检测
}

if(S1==0)
{
delayms(10);
if(S1==0) x=x+1;
while(!S1);//松手检测
}

if(S2==0)
{
delayms(10);
if(S2==0) x=x-1;
while(!S2);//松手检测
}

if(S3==0)
{
delayms(10);
if(S3==0) y=y+5;
while(!S3);//松手检测
}

if(y>254) y=0;
if(m>5) m=0;
if(x>50) x=0;
TR0=1;//启动定时器
}

void fangbo() //方波
{
uchar i,j;
j=255-y;
CS_DA=0;
WR_DA=0;
for(i=y;i>0;i--)
{
P0=0;
delay(x);
}

while(j--)
{
P0=255;
delay(x);
}
}

void juchi() //锯齿波
{
uchar i;
CS_DA=0;
WR_DA=0;
for(i=255;i>0;i--)
{
P0=i;
delay(x);
}

}
void sanjiao() //三角波
{
uchar i;
CS_DA=0;
WR_DA=0;
for(i=0;i<255;i++)
{
P0=i;
delay(x);
}
while(i--)
{
P0=i;
delay(x);
}
}

void tixing() //梯形波
{
uchar i=255,j,k;
CS_DA=0;
WR_DA=0;
while(i--)
{
P0=i;
delay(x);
}

for(j=0;j<100;j++)
{
P0=0;
delay(x);
}

for(k=0;k<255;k++)
{
P0=k;
delay(x);
}
}

void sin() //正弦波
{
uchar a;
CS_DA=0;
WR_DA=0;
for(a=0;a<255;a++)
{
P0=SinTab[a];
delay(x);
}
}

main()
{
time0_init();
while(1)
{
switch(m)
{
case 0:
fangbo(); //方波
break;
case 1:
juchi(); //锯齿波
break;
case 2:
sanjiao(); //三角波
break;
case 3:
sin(); //正弦波
break;
case 4:
tixing(); //梯形波
break;
default: fangbo();
}
}
}追问

这个是C语言 我要的是汇编语言,看明白在解答好不好

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-28
建议楼主把楼上的C语言按着他的思路改成汇编
第2个回答  2012-06-19
Q我本回答被提问者采纳

用汇编语言编写80c51单片机程序,求内部RAM中50H~59H十个单元内容的平均...
结合1,2,3楼,考虑了溢出问题。花了好多时间才想出来了。希望对你有帮助。ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV R0,#50H MOV R7,#10 MOV R2,#00H MOV A,#00H LOOP:CLR C ADD A,@R0 JNC BBB INC R2 CLR C BBB: INC R0 DJNZ R7,LOOP MOV 5CH,A ;把和放5CH,不用管...

80c51单片机用汇编语言4个独立按键如何分别控制4个数码管从0到9到0...
汇编程序如下 S1 BIT P3.4 S2 BIT P3.5 S3 BIT P3.6 S4 BIT P3.7 DISM1 EQU 31H DISM2 EQU 32H DISM3 EQU 33H DISM4 EQU 34H START:MOV R0,#7FH CLEAR:MOV @R0,#0 DJNZ R0,CLEAR MAINP:ACALL DISUP;主程序 TEST1:JB S1,TEST2 ACALL DELK4 JB S1...

单片机流水灯汇编程序 其中延时的计算方法
80c51单片机的晶体振荡周期等于振荡频率的倒数, 单片机的晶振频率为22.1184 MHZ。 则振荡周期为 1\/22.11848 .80c51单片机中有一个机器周期,它有12个振荡周期组成。 它的振荡周期=12*(1\/22.11848)us。一般延时指令DJNZ为双周期指令。所以执行一次=2*【12*(1\/22.11848)】us。最后你看你执行...

单片机80c51用汇编语言写让蜂鸣器发出一长三短声的程序
复位用一个电阻和一个电解电容串联后一头接地一头接vcc.如果你的单片机是高电平复位,那电阻大接地,如果是低电平复为,那电阻接vcc.蜂鸣器有两种,一种接地和vcc和就会响.一种是一端接地,在另一端加一个方波脉冲它才会响,调节脉冲占空比可以调节发出的声音.

求助:关于80C51单片机简易计算器设计的程序,要求是汇编语言。谢谢哈...
AJMP LK ;跳转到键值处理程序L1:JB P1.1,L2 ;P1.1等于1跳转到L2 MOV A,#04H ;将第二行的行值送入ACC AJMP LK ;跳转到键值处理程序L2:JB P1.2,L3 ;P1.2等于1跳转到L3 MOV A,#08H ;将第三行行值送入ACC AJMP LK ;跳转到键值处理程序L3:JB P1.3,NEXT ;P1.3等于1跳转到NEXT处 MOV A,#0CH ;...

单片机·汇编初学者求教高手:80c51用定时器在p1.0管脚上产生一周期为2...
void main( void) \/\/主函数 { out=0; \/\/ P1.0输出为0 TMOD=0x01; \/\/工作方式1,16位计数 TH0=0x03; \/\/给定时器初值,周期为2ms,则半个周期为1ms TL0=0xe8; \/\/给定时器初值 EA=1; \/\/打开中断 ET0=1; \/\/允许中断 TR0=1; \/\/启动定时器 while(1);...

单片机秒表程序 80C51
求一个单片机程序用80C51单片机制作秒表的程序三个按键两个数码管有复位电路外接晶振求一个程序简单介绍一下程序万分感谢会加分... 求一个单片机程序 用80C51单片机制作秒表的程序 三个按键 两个数码管 有复位电路 外接晶振 求一个程序 简单介绍一下程序万分感谢 会加分 展开 ...

80c51单片机P1.0--P1.7八灯循环程序。
汇编:ORG 00H MOV P2,#80H START:MOV A,#0FFH ;赋初值 CLR C MOV R2,#8 LOOP:RRC A ;带进位右移 MOV P1,A CALL DELAY DJNZ R2,LOOP MOV R2,#7 LOOP1:RLC A ;带进位左移 MOV P1,A CALL DELAY DJNZ R2,LOOP1 JMP START DELAY:MOV R3,#20 ;延时0.2秒 D1:MOV R4,#20 D2...

用80C51单片机 汇编语言 计算 1+2+3+4+5+...+10的结果, (不要告诉...
分太少了,加点分吧!org 0 mov r0,#10 ;共10个数 mov a,#0 ;累加结果先清0 mov r1,#1 ;第1个数为1 loop:add a,r1 ;把数累加起来 inc r1 ;下一个数 djnz r0,loop;共10个数,未完转 LOOP循环 sjmp $ ;完成 end

请教8051汇编指令
8051系列单片机汇编语言指令速查表编号指令名称指令助记符指令说明数据传送类指令1一般传送MOV A, #data将立即数#data送累加器A2MOV direct, #data将立即数#data送片内RAM direct地址单元内3Mov Rn, #data将立即数#data送寄存器Rn4Mov @Ri, #data寄存器Ri内为RAM地址,将立即数#data送该地址单元内5Mov direct...

相似回答