主页 > 科技前沿 >宠坏小恶女_用汇编语言编写一个51单片机的程序 >
宠坏小恶女_用汇编语言编写一个51单片机的程序

2020-09-03


用汇编语言编写一个51单片机的程序


首先搞清LED高电平导通还是低电平导通。
如低电平导通P1赋0x00时光管全亮,0xff时,全灭。
具体程序:
#defineuint unsigned int
#defineuchar unsigned char
void delay(uint time_out)
{
uint i,j;
for(i=0;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.有问题自己再调试调试首先搞清LED管电平导通还是低电平导
如果是低电平导通P1赋0x00时,发光管全亮,0xff时,全灭。
具体程序:
#define
uint
unsigned
int
#define
uchar
unsigned
char
void
delay(uint
time_out)
{
uint
i,j;
for(i=0;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;汇编程序结束扩展资料:实现流水灯的三个方法:第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。第三种,库函数实现流水灯。利用左移函数进行。

51单片机用汇编语言编写流程序,就是多个LED ,使其在时间间隔内,只有一个LED 发光他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:
;假设晶振12MHZ,P1控制8个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;汇编程序结束

流水灯就一排LED灯,依次点亮或熄灭,以一定的时实现这种效果,看起来像“流水”样。51单片现流水灯的控制十分容易,以下是源代码和仿真效果图。ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
MOV P0,A
JNB 00H,NEXT
RR A
SJMP LOOP1
NEXT:
RL A
LOOP1:
JB P2.0,LOOP2
JNB P2.0,$
CPL 00H
LOOP2:
MOV R7,#2
LCALL DELAY
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY
DJNZ R7,DELAY
RET
END

ORG 0100H
LTOR:MOV A,#01H
LOOP: RR A ;从左到右亮,每次亮一盏
MOV P1,A
ACALL DELAY
JNB ACC.0,LOOP
LOOP1: RL A
MOV P1,A;到左亮,每次亮一盏
ACALL DELAY
JNB ACC.7,LOOP1
LOOP2: RR A
ORL A,#80H
MOV P1,A;从左到右依次点亮每一盏灯
ACALL DELAY
JNB ACC.0,LOOP2
LOOP3: RL A
ANL A,#0FEH
MOV P1,A;从右到左依次熄灭每一盏灯
ACALL DELAY
JB ACC.7,LOOP3
SJMP LTOR

DELAY: MOV R6,#01H ;延时子程序
L2: MOV R7,#01H
L1: NOP
DJNZ R7,L1
DJNZ R6,L2
RET

END本回答被网友采纳ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV DPTR,#TAB
MOV R7,#4FH
LOOP: MOVC A,@A+DPTR
INC DPTR
MOV P1,A
ACALL DELAY
CLR A
DJNZ R7, LOOP
AJMP MAIN

ORG 0200H
TAB: ;从左到右,再从左,一次亮一个
DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;15,0FH
DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
;从右到左,再从右到左,依次点亮
DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
DB 0FFH,7FH,3FH,1FH,0FH,07H,03H,01H,00H
51汇编的inc文件如何加在源程序中
在源程序中使用include语句包含进来就可以了。在网上觅的答案,如有错误请见谅!来自:求助得到的回答源程序是汇编已经编译好的程序吗?还是其他的语言程序,不明白你的意思。来自:求助得到的回答.include "xxx.inc"
51单片机汇编语言调用子程序能不能嵌套?
可以嵌套!
但是不建议嵌套的层次太多,影响运行的速度。可以可以嵌套,不同编程语言嵌套级数可能有所不同,一般编程语言都有说明支持嵌套的级数.
最好不要嵌套太多,如果嵌套过多,说明程序大结构设计的不够合理,最好重新优化.



上一篇:
下一篇:


今日焦点
一周热榜