① 用汇编怎么写51单片机的延时程序
DEL1S:MOV R7,#10x0dx0aD1: MOV R6,#200x0dx0aD2: MOV R5,#250x0dx0a DJNZ R5,$x0dx0a DJNZ R6,D2x0dx0a DJNZ R7,D1x0dx0a RETx0dx0ax0dx0a说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等x0dx0a 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5
② 51单片机汇编题目
DATDEAL:
MOV30H,#34H
MOV31H,#58H
MOV32H,#23H
MOV33H,#45H
MOVDPTR,#1000H
MOVA,31H
ADDA,33H
MOVDPL,#02H
MOVX@DPTR,A
MOVA,30H
ADDCA,#32H
MOVDPL,#01H
MOVX@DPTR,A
CLRA
ADDCA,#0
MOVDPL,#00H
MOVX@DPTR,A
RET
③ 51单片机汇编语言后缀
51单片机汇编语言后缀为c语言中指令功能。51单片机汇编语言后缀为c语言中指令功能。51汇编语言extrndata,51单片机汇编伪指令功能:这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。
④ 用汇编语言编写一个51单片机的程序
首先搞清LED管是高电平导通还是低电平导通。
如果是低电平导通,P1赋0x00时,发光管全亮,0xff时,全灭。
具体程序:
#define uint unsigned int
#define uchar unsigned char
void delay(uint time_out)
{
uint i,j;
for(i=0;i<time_out;i++)
{
for(j=0;j<110;j++)
{;}
}
}
void main(){
while(1)
{
P1=0xfe; //第1个管亮
delay(500);
P1=0xfd; //第2个管亮
delay(500);
P1=0xfb; //依次类推
delay(500);
P1=0xf7;
delay(500);
P1=0xef;
delay(500);
P1=0xdf;
delay(500);
P1=0xbf;
delay(500);
P1=0x7f;
delay(500);
}
}
程序大致如此,delay函数负责延迟500ms.有问题自己再调试调试
⑤ 51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H;复位启动
AJMP START;
ORG 001BH;T1中断
AJMP T1INT;
;定义变量========================
YSJSEQU 30H;延时计数器
LEDEQU 31H;LED控制缓冲器
;主程序==========================
START:MOV LED,#0FEH;初始化数据
MOV YSJS,#0;
MOV TMOD,#10H;定时器1工作于方式1,16位定时器
MOV TL1,#0B0H;设置定时初值
MOV TH1,#3CH;定时时间=50mS
SETB ET1;使能定时器1中断
SETB TR1;启动定时器1
SETB EA;开总中断
MOV P1,LED;初始化流水灯
LOOP:JMP LOOP;循环等待中断
T1INT:PUSH PSW;定时器1中断程序
PUSH ACC;保护现场
MOV TH1,#3CH;定时时间=50mS
MOV TL1,#0B0H;
INC YSJS;
PUSH ACC;保护ACC
MOV A,YSJI;
CJNE A,#2,QT1;50mS*2=100mS
MOV P1,LED;
MOV A,LED;
RL A;累加器A的值循环左移1位
MOV LED,A;
MOV YSJS,#0;
QT1:POP ACC;恢复现场
POP PSW;
RETI;返回主程序
END;汇编程序结束
(5)汇编51单片机扩展阅读:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。
⑥ MCS-51单片机汇编语言的SP指令有什么作用
MCS-51单片机汇编语言中,没有SP这条指令,只有针对SP操作的指令。51单片机中SP是堆栈指针寄存器,存放着当前堆栈地址。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。x0dx0a除了初始化堆栈时直接给SP赋值,SP显式存在,其它的对SP有影响的指令,对SP的操作都是隐式的,就是说SP并不出现在指令操作数当中。x0dx0a例如:x0dx0aMOVSP,#80H;初始堆栈指针,(SP)=80Hx0dx0aLCALLXXXX;调用XXXX处的子程序,下一条指令PC值压栈,(SP)=(SP)+2x0dx0aNOP;子程序返回时,RET指令从堆栈中弹出PC值,所以会返回到这里,(SP)=(SP)-2x0dx0aPUSHACC;累加器A的内容压栈保存,(SP)=(SP)+1x0dx0aPOPB;堆栈内保存的累加器A的内容弹出到B寄存器中,(SP)=(SP)-1x0dx0ax0dx0a使用PUSH、POP指令使用堆栈,要注意进出栈的匹配,否则将引起不可预期的后果。
⑦ 51单片机定时器的汇编语言程序编程,
LED BIT P1.0 ;定义LED的引脚
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定时器0工作模式1
MOV TH0,#HIGH(65536-50000) ;初值,50毫秒中断一次
MOV TL0,#LOW(65536-50000)
SETB TR0 ;启动定时器
SETB ET0 ;启动定时器中断
SETB EA ;开总中断
MOV R2,#40 ;中断计数初始值
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;R2减到0重新赋值,否则退出
MOV R2,#40
CPL LED ;LED亮灭转换
T0E:
RETI
END
⑧ 51单片机汇编编程
1:
KEY1 EQU P2.2
KEY2 EQU P2.1
KEY3 EQU P2.0
RED EQU P1.4
YELLOW EQU P1.5
GREEN EQU P1.6
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
SETB RED
SETB YELLOW
SETB GREEN
LP:
JB KEY1,LP1
CLR RED
SJMP LP
LP1:
JB KEY2,LP2
CLR YELLOW
SJMP LP
LP2:
JB KEY3,MAIN
CLR GREEN
SJMP LP
END
2:
KEY1 EQU P2.2
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R0,#0
LP:
JB KEY1,DISP
JNB KEY1,$
INC R0
CJNE R0,#10,DISP
MOV R0,#0
DISP:
MOV DPTR,#LEDTAB
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
SJMP LP
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
END
⑨ 51单片机汇编语言
K1EQUP3.2
K2EQUP3.3
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVDPTR,#LEDTAB1
MOVR2,#0
LOOP:
MOVA,R2
MOVCA,@A+DPTR
MOVP0,A
JBK1,LOOP1
JNBK1,$
INCR2
SJMPLOOP
LOOP1:
JBK2,LOOP
JNBK2,$
CJNER2,#0,LOOP3
SJMPLOOP
LOOP3:
DECR2
SJMPLOOP
;--------------------
LEDTAB1:
DB0C0H ;"0" 00H
DB0F9H ;"1" 01H
DB0A4H ;"2" 02H
DB0B0H ;"3" 03H
DB99H ;"4" 04H
DB92H ;"5" 05H
DB82H ;"6" 06H
DB0F8H ;"7" 07H
DB80H ;"8" 08H
DB90H ;"9" 09H
DB88H ;"A" 0AH
DB83H ;"B" 0BH
DB0C6H ;"C" 0CH
DB0A1H ;"D" 0DH
DB86H ;"E" 0EH
DB8EH ;"F" 0FH
DB0FFH ;"" 10H