这个单片机汇编程序应怎么写。100分6
发布网友
发布时间:2023-10-22 21:38
我来回答
共5个回答
热心网友
时间:2024-10-21 08:47
这位仁兄,我是下了狠心的要把你这个分数赚到呀,要给我哦,嘿嘿最好给我再加点分哦。为了让你能够清楚的理解整个程序,故每一段都主要注释,以下是是一个完整的程序。在下面就是延时程序那儿,用了入栈和出栈程序,要注意一下哦,对于入栈和出栈我们要记得,先进后出,后进先出的顺序,所以在那儿的他们的位置可不能换哦
ORG 2000H //设置入口地址
LJMP MAIN
MAIN: JNB P1.0, MAIN //P1.0等于0开始跳转,即这句话就是等待P1.0输入高电平
SETB P1.2 //输出高电平
JNB P1.2, $ //P1.2等于0开始跳转,即这句话就是等待P1.2输入高电平
SETB P1.3 //输出高电平
SETB P1.4 //输出高电平
ACALL DELAY1S //延时1s
SETB P1.5 //输出高电平
ACALL DELAY0.5S //延时0.5s
JNB P1.6, $ //等待输入第一次输入高电平
CLR P1.6
JNB P1.6, $ //等待输入第二次输入高电平
CLR P1.3 //输出低电平
CLR P1.4 //输出低电平
CLR P1.5 //输出低电平
//判断P1.7是否输入高电平,如果不是就此等待,直到输入高电平
JNB P1.7,$
//将所有P1口输入低电平
CLR P1.7 //输出低电平
CLR P1.0 //输出低电平
CLR P1.1 //输出低电平
CLR P1.2 //输出低电平
CLR P1.6 //输出低电平
//以下三个端口的输出低电平程序可以不要,因为在上面已经把它值为低电平
CLR P1.3 //输出低电平
CLR P1.4 //输出低电平
CLR P1.5 //输出低电平
/*设置的延时1s的子函数*/
DELAY1S: PUSH R0 //入栈
PUSH R1
PUSH R5
CLR PSW.3 //工作寄存器设置
CLR PSW.4
MOV R5,#20
L0: MOV RO,#200
L1: MOV R1,#125 //设置处置
L2: DJNZ R1,L2
L3: DJNZ R0,L1 //判断
DJNZ R5,L0
POP R5
POP R1 //出栈
POP R0
RET //返回
/*设置的延时0.5s的子函数*/
DELAY0.5S: PUSH R2 //入栈
PUSH R3
PUSH R6
SETB PSW.3 //工作寄存器设置
CLR PSW.4
MOV R6,#10
L0: MOV R2,#200 //设置处置
L1: MOV R3,#125
L2: DJNZ R3,L2
L3: DJNZ R2,L1 //判断
DJNZ R6,L0
POP R6
POP R3 //出栈
POP R2
RET //返回
END
啊,总于写完了呀,希望对你有帮助!
热心网友
时间:2024-10-21 08:47
朋友,我告诉你,其实没有必要学汇编,尤其是刚开始学习的时候,学习汇编会打击你的信心,这是目前至少我认为没有必要一开始就学习汇编,你完全可以先学习C语言,简单,容易上手,等你入门了,如果将来项目有要求,你再学习汇编,也是可以的。我简单写一下用C语言来实现你的功能,你会觉得很简单。
sbit P10= P1^0;//这是定义单片机引脚,以下同样
sbit P11= P1^1;
sbit P12= P1^2;
sbit P13= P1^3;
sbit P14= P1^4;
sbit P15= P1^5;
sbit P16= P1^6;
sbit P17= P1^7;
void main()
{
P1=0x00;//P1为低;
while(P10==1);//等待P10输入为高
P10==1;//P10为高
P11==1;//P11为高
P12=1;//P12输出为高
P13=1;//P13输出为高
P14=1;//P14输出为高
DELAY(1);//这里的函数没有写,表示一下意思,延时1S
P15=1;//P15输出为高
DELAY(0.5);//这里的函数没有写,表示一下意思,延时0.5S
while( P16==1 );
P16=0;//P10输出为低
while( P16==1 );//再次等待P16输入为高,就是两次为高
P13=0;//P13输出为低
P14=0;//P14输出为低
P15=0;//P15输出为低
while( P17==1 );//等待P17输入为高
P1=0;//P1口全部为0
while(1);//死循环,防止程序跑飞
}
是否是简单?先学习C语言吧!
热心网友
时间:2024-10-21 08:48
C语言,远不如汇编语言简单和直观。
编写大程序,C语言才有优越性。
C语言,如果以前就会,那就可以 以C语言为起点,来学习单片机。
否则,先学C语言,不仅是走弯路,还会严重挫伤学习单片机的积极性。
热心网友
时间:2024-10-21 08:49
第一步,P1。0输入高电平后,-P1。2输出高电平,且保持,
--------------------------------------------------------我感觉这里的p1.2,应该是p1.1
-----------------------------------------------------
jnb p1.0,$
setb p1.1
然后等P1。2入高电平时,P1。3、P1。4输出高电平保持。
jnb p1.2,$
setb p1.3
setb p1.4
延时1S后,P1。5输出高电平保持。再延时0。5S后等待P1。6输入高电平2次。
lcall delay1000ms
setb p1.5
lcall delay500ms
jnb p1.6,$
jb p1.6,$
jnb p1.6,$
P1。6输入高电平两次以后P1。3P1。4P1。5输出低电平,P1。0P1。1还是保持高电平不变。
clr p1.3
clr p1.4
clr p1.5
当P1。7输入高电平时P1口所有输出都为低电平。
jnb p1.7,$
mov p1,#0
热心网友
时间:2024-10-21 08:49
如果你看了好久的书连这个程序也不能写的话,只有两种可能:
1、你没有这方面的基础,比如计算机原理、编程语言、电子电路等
2、这方面悟性不足,不适合干这一行。(一般书上都有编程的例子)
我说的前提是你真的看了好久的书,比如累计200小时以上