51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序
JB K2,LOOP2//晶振12M
流水灯汇编程序 流水灯汇编程序讲解
流水灯汇编程序 流水灯汇编程序讲解
DSEG AT 30H
timetemp: DS 1
LED: DS 1
CSEG AT 00H
ORG 0000H
LJMP DJNZ timetemp,NEXTT1START
LJMP Timer0Interrupt
START:
MOV SP,#60H
MOV timetemp,#20
MOV P1,#0FFH;LED低电平点亮
LCALL InitTimer0
MOV LED,#0FEH
MOV P1,LED ;add your code here!
LJMP LOOP
InitTimer0:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000);延时50ms
SETB EA
SETB ET0
SETB TR0
Timer0Interrupt:
PUSH PSW
CLR TR1
MOV A,TL1
ADD A,#LOW(65536-50000)+7
MOV TL1,A
CLR A
ADDC A,#HIGH(65536-50000)
SETB TR1
MOV timetemp,#20
;========================
MOV A,LED
RL A
MOV LED,A;add your code here!
;========================
POP PSW
POP ACC
RETI
CNT EQU 30H
ORG 0000H
SJMP STA
LJMP T0ISR
ORG 0050H
STA:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H ;50ms
MOV P1,#0FEH
MOV CNT,#20
SETB ET0
SETB TR0
SETB EA
SJMP $
T0ISR:
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H ;50ms
SETB TR0
DEC CNT
MOV A,CNT
JNZ T0ISRE
MOV CNT,#20
MOV A,P1
RL A
MOV P1,A
T0ISRE:
RETI
单片机汇编流水灯后段程序怎么理解,L1L2L3 R2R3是什么作用?我不懂,求高手指点
PUSH ACCL1 L2 L3是程序的标号。R2和R3是寄存器,保存相应的数据。以DJNZ R2,L1,,这一行的是把DB 83H ;"B" 0BHR2里面的内容减去1,判定是不不等于0,如果不等于0就跳转到L1执行。L1的功能是MOV R3,#00H。。。
流水灯先亮4个再亮另外4个全亮 全灭 不断循环汇编程序
DB 0C6H ;"C" 0CHORG 0000H
MOV SCANLED,#0MOV P0, #0FH
MOV P0, #0F0H
MOV P0, #00H
MOV P0, #0FFH
SJMP 0000H
谁帮我解释一下这个汇编语言写的流水灯程序,并帮我画个流程图 ?拜托各位大神
SETB P2.1ORG 0000H 表示程序从0000H开始 START:MOV R2,#8 将立即数8(10进制,二进制是1000B)放入R2 MOV A,#0FEH 将立即数FEH(16进制,二进制是11111110B)放入A,以上是初始化 S0 :MOV P0,A 将A里面的数输出到P0端口 CALL DELAY 执行Delay延迟段代码,不延迟的话就不是流水灯了而是全亮。。。 RL A 左移A寄存器内容(移动后变成11111100B) DJNZ R2,S0 (R2-1)为0?不是则跳转到S0句 SJMP MAIN 跳转到main句 DELAY:MOV R4,#20 D2:MOV R5,#20 D1:MOV R6,#248 D0:NOP DJNZ R6,D0 DJNZ R5,D1 DJNZ R4,D2 RET MAIN:MOV P0,#0DBH 将DBH输出到P0端口(DB二进制为11011011B) ACALL WA 调用WA延时程序 MOV P0,#06DH 将6DH输出到P0端口(6D二进制为01101101B) ACALL WA 调用WA延时程序 MOV P0,#0B6H 将B6H输出到P0端口(B6二进制为10110110B) ACALL wa 调用WA延时程序 MOV P0,#0BEH 将BEH输出到P0端口(BE二进制为10111110B) ACALL WA 调用WA延时程序 MOV P0,#07EH 将7eH输出到P0端口(7e二进制为01111110B) ACALL WA WA 调用WA延时程序 SJMP START 跳转到START WA: MOV R7,# S1: MOV R3,# S2: DJNZ R3,S2 DJNZ R7,S1 RET END 如果你的单片机是低电平亮灯的话效果就是看输出到P0的二进制为0的亮为1的灭
ORG 000BH单片机汇编语言按键控制流水灯,两个开关k1,k2。实现功能按下k1,流水灯左移动,按下k2,流水灯右移动。
DELAY1: MOV R2,#7FH ;127K2 EQU P1.1
DB 80H ;"8" 08HORG 0000H
ORG 0030H
MAIN:
MOV A,#0FEH
CLR 00H
CLR 01H
JB K1,LOOP1
SETB 00H
CLR 01H
SJMP LOOP
LOOP1:
SETB 01H
CLR 00H
LOOP2:
JB 01H,LOOP3
JB 00H,LOOP4
SJMP MAIN
LOOP3:
MOV P0,A
SJMP LOOP
LOOP4:
MOV P0,A
RL A
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,#
DJNZ R3,$
DJNZ R2,DLY
求助:用汇编实现按钮控制流水灯
MOV P3,#01H楼主写三个子程序,用三个按键控制,分别调用,即可。
MOV P1, A这个程序用中断比较好写一点,不用中断写起来就比较麻烦,也有很多种写法。我以前应该写过这样的程序,楼主如果需要,可以回复我
8个流水灯依次都亮的汇编程序
MOV COUNT_KEY,#50ORG 00H
LJMP START
ORG 30H
LO2、单片机AT89C51的P1口接8个发光二极管,让这8个发光二极管能够双灯左移之后再双灯右移,OP: RL A
INC A
LCALL DELAY
LJMP LOOP
DELAY: MOV R5, #5
DELAY01: MOV R6, #200
DELAY02: MOV R7, #
DELAY03:
DJNZ R7, DELAY03
DJNZ R6, DELAY02
DJNZ R5, DELAY01
求汇编程序:6M晶振51单片机控制流水灯从右到左逐个点亮同时从p3.5脚输出1KHZ方波,用T1中断产生
END#include "reg51.h"
LJMP MAINunsigned char P1BUF=0XFE;
bit led;
void main(void)
{TMOD |= 0X10; //定时器1工作于方式1,16位定时器
TH1 = 0XFF; //定时器1定时时间=500uS
TL1 = 0X06; //
ET1 = 1; //使能定时器1中断
TR1 = 1; //开启定时器1
EA =1;
while(1)
{}
}void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组
{TH1 = 0XFF; //定时器1定时时间=500uS
TL1 = 0X06;
P3^5=!P3^5; //输出方波
YSJS++;
{P1 = P1BUF;
led = P1BUF & 0X80;
P1BUF <<= 1; //预备下一位
if(led)P1BUF = P1BUF | 1;
}}
led发光二极管实现流水灯然后全部显示1S钟,在循环,汇编程序
;12M晶振
;其中P2.0到P2.7分别连1盏led灯
;ORG 0000H
AJMP START
ORG 0030H
START: MOV P2 ,0X00
SETB P2.0
ACALL DELOOP:LAY0
CLR P2.0
ACALL DELAY0
CLR P2.1
SETB P2.2
ACALL DELAY0
L TR1LR P2.2
SETB P2.3
ACALL DELAY0
CLR P2.3
SETB P2.4
ACALL DELAY0
CLR P2.4
SETB P2.5
ACALL DELAY0
CLR P2.5
SETB P2.6
ACALL DELAY0
CLR P2.6
SETB P2.7
ACALL DELAY0
CLR P2.7
AJMP START
DELAY0: MOV R1,#0CH ;12
DELAY2: MOV R3,#7FH ;127
DELAY3: NOP
DJNZ R3,DELAY3
DJNZ R2,DELAY2
DJNZ R1,DELAY1
;电路原理图
请问单片机汇编语言流水灯程序,如何实现两颗灯流动(11111100/11111001/111100
MOV COUNT_K,AMRETOV A , #0FCH
LOOP:MOV P1, A ;设灯在P1口
RL A
ACALL DELAY ;延时
SJMP LOOP
这样就行了.
51单片机汇编控制8个流水灯
LCALL DELAY这是C程序。。。汇编忘记不太会了。P1口接8个LED灯
#include
#include
#define uchar unsigned char
uchar j,temp;
int i if(YSJS==1000)= 8;
void delay(unsigned int ms) //延时
{uchar t;
while(ms--)
for(t=0;t<123;t++); //500122
}void display(int wei) //显示
{P1=0xff; //P1口拉高。低电平LED灯亮。
temp = 0x7F; //0111 1111 通过位右移达到流水灯目的
delay(500); //500ms?
for(j=1;j<=wei;j++) //wei为选择右移的位数
{P1=temp;
delay(500);
if(j != wei) //当右移位数到后,那一位常亮不闪。
{P1&=~temp;
delay(500);//延时闪烁
temp=_cror_(temp,1);//循环右移当位数到后,停止右移
}}
}void main() //主函数
{while(1)//主函数循环
{switch(i)
{case 1:
display(1);
break;
case 2:
display(3);
break;
case 3:
display(3);
break;
case 4:
display(4);
break;
case 5:
display(5);
break;
case 6:
display(6);
break;
case 7:
display(7);
break;
case 8:
display(8);
break;
default:break;
}i--;
if(i==0)
{P1=0x00;//常亮
//i=8;//或者返回重新开始
while(1);//程序停在这里?
}}
}