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

循环点亮LED灯,也就是流水灯效果的控制,可以用定时器来控制,这样做相对代码量较少而时间比较精确,外部中断0接以按键,可以控制动态效果的启停。程序如下:ORG 0000H LJMP MAIN ORG 0003H LJMP EXT0 ;外部中断0,

MAIN: MOV TMOD, #01H MOV IE, #82H ; 开 T0 中断 MOV SP, #30H MOV TL0, #LOW T0MS ; TO 50MS 中断 计时 0 MOV TH0, #HIGH T0MS SETB TR0 MOV R6, #40 ; 计时

SETB TR0 MOV R5, #20 LOOP: MOV R3, #48 CJNE R3, #0,LJMP LOOP LINT0: CPL ET0 RETI LT0ZD: PUSH PSW ; T0 中断 PUSH ACC MOV TL0, #(8192-2500)MOD 32 MOV TH

DELAY: MOV R7,#0 LOOP:MOV R6,#0 DJNZ R6,DJNZ R6,DJNZ R6,DJNZ R7,LOOP RET END达到的效果:1.主程序的流水灯是逐个亮2.按按钮,则开始用中断控制三种流水灯的花样3.三种花样闪烁三次返回主程序

用汇编语言要求用外部中断零制作一个流水灯

下列程序,已经经过实验,可以满足题目要求。KEY1 EQU P3.0 KEY2 EQU P3.1 LED1 EQU P3.2 LED2 EQU P3.3 Flag1 EQU 20H.0 Flag2 EQU 20H.1 L_F1 EQU 20H.2 L_F2 EQU

while(1) /* 主循环 */ { if( Key ==0){ for( i = 0; i < 1; i++ ){ LED= 0; /* 端口送高电平,LED熄亮 */ DelayMs(500); /* 延时大概0.5S */ LED = 1; /* 端口送低电平,

再次读取IO口,判断是否为低电平,如果是则表示有有效的按键按下,接着用while判断等待按键释放,然后让连接led的IO口电平取反以控制其亮灭(是强电的灯可以通过此处控制继电器的合、闭来控制灯的亮灭)。

循环点亮LED灯,也就是流水灯效果的控制,可以用定时器来控制,这样做相对代码量较少而时间比较精确,外部中断0接以按键,可以控制动态效果的启停。程序如下:ORG 0000H LJMP MAIN ORG 0003H LJMP EXT0 ;外部中断0,

//打开LED灯点亮 while(1){ if(KEY0_01 == 0)//检测按键是否按下 { Delay_1ms(10);//延时去抖动 if(KEY0_01 == 0)//确定按键按下 { LED1_01 = ~LED1_01;//取反LED灯 [亮 .灭 ]} while(KEY0_0

如下即可:;ORG 0000H LJMP MAIN DJNZ R7,DJNZ R6, $ - 2 JB P3.2, $ + 8 CPL P1.0 ;LED JNB P3.2,RETI MAIN:MOV IE, #81H SJMP END

求用汇编语言中断用一个按键控制一个灯亮灭加防抖动,灯p2口,按键p3口程序

LED = 1; /* 端口送低电平,LED点灭 */ DelayMs(500); /* 延时大概0.5S */ } /* 延时10ms,消抖 */ { if( Key == 0) LED = ~LED;/* 再次检测按键是否按下,如果有,将LED状态取反 */ for(

如下即可:;ORG 0000H LJMP MAIN DJNZ R7,DJNZ R6, $ - 2 JB P3.2, $ + 8 CPL P1.0 ;LED JNB P3.2,RETI MAIN:MOV IE, #81H SJMP END

p1口接LED。(1. 由于采用中断方式来完成,因此,对于中断源必须它的中断入口地址,对于定时/计数器T0来说,中断入口地址为000BH,因此在中断入口地方加入长跳转指令来执行中断服务程序。书写汇编源程序格式如下所示:ORG 00

KEY1 BIT P2.0 KEY2 BIT P2.4 ORG 0000H LJMP START ORG 000BH LJMP Timer0Interrupt START:MOV SP,#60H MOV R2,#20 SETB LED SETB KEY1 CLR KEY2 CLR TR0 LCALL InitTimer0 LOOP:;add

out gicr, temp ; 允许INT0、INT1中断 out gifr, temp ; 清除INT0、INT1中断标志位 clr counter clr flag sei ; 使能中断 state: ldi zl, low(led_7 * 2)ldi zh, high(led_7 * 2) ; Z寄存器取得7段码

用汇编怎么实现利用中断控制LED灯定时!S的亮和灭.

;} voidmain(void){ while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay

中断处理函数感觉有些问题,for循环之前使用P1=0x0f;然后将for内的P1=0x0f;改为 P1= ~ P1; 同时for 循环中应该需要调用延时函数 Delay(10); 这里的值看你自己设置,保证能分辨闪烁即可

LED = 1; /* 端口送低电平,LED点灭 */ DelayMs(500); /* 延时大概0.5S */ } /* 延时10ms,消抖 */ { if( Key == 0) LED = ~LED;/* 再次检测按键是否按下,如果有,将LED状态取反 */ for(

void main(){uchar tab[]={}//定义数码管 EX0=1;EA=1;IT0=1;while(1){P1=tab[m];} } void into()interrupt 0 {m++;while(INT0==0);} 程序大概是这样,因为使用手机,不方便输入!

LJMP T0ISR ;定时0控制流水灯循环点亮 ORG 0030H MAIN:MOV TMOD,#01H ;设置定时器0工作模式 MOV TH0,#HIGH(65536-60000) ;60毫秒定时 MOV TL0,#LOW(65536-60000)SETB ET0 SETB EA MOV A,#0FEH ;

单片机汇编语言程序,我想写一个循环点亮的LED,然后用外部中断0接到一个按键上,怎么写我需要详细的程序

1)P2口的8个脚对应8个LED;设D1灯对应高位,D8灯对应低位; 2)P1口的P1.0脚对应XO按钮;P1.1脚对应X1按钮; 3)开始时,显示第一种方式:向P2口写入a=01111111,延时0.5S,a 循环右移一位,再延时0.5S,如此反复。 4)当收到XO按钮信号后,向P2口写入a=01111111,延时1.5S,a 循环右移二位,再延时1.5S,如此反复。 5)当收到X1按钮信号后,向P2口写入a=10111111,延时1S,a 带进位右移二位,再延时1.5S,如此反复。当Cy=0时,执行 3)。
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。 #include #include 仿真图效果。
;晶振为6MHZ,亮0.7s,灭0.3s,P1.0口输出 WSTA EQU 20H STA BIT WSTA.0 ;亮灭标志位 ORG 0000H LJMP MAIN ORG 000BH LJMP B_T0 ;定时器中断0入口 ORG 0030H MAIN: MOV R0,#20H ;20H-7FH清零 MOV R7,#60H CLR A M01: MOV @R0,A INC R0 DJNZ R7,M01 MOV TMOD,#01H ;方式1定时 MOV TH0,#9EH ;定时50ms MOV TL0,#58H MOV R7,#14 ;0.7s计数 SETB EA ;打开定时器总中断 SETB ET0 ;打开定时器0中断 SETB TR0 ;打开定时器0 CLR STA ;使标志位初始为0 CLR P1.0 ;刚开始为低电平 SJMP $ ;等待中断 B_T0: MOV TH0,#9EH ;定时50ms重设 MOV TL0,#58H JB STA,B01 DJNZ R7,B02 MOV R7,#6 ;0.3s计数 SETB STA SETB P1.0 ;灯灭 SJMP B02 B01: DJNZ R7,B02 MOV R7,#14 ;0.7s计数 CLR STA CLR P1.0 ;灯亮 B02: RETI
LED EQU P3.3 KEY EQU P3.7 ORG 0000H LJMP START ORG 000BH LJMP T0_INT ORG 0030H ;-------------------------------- START: MOV TMOD, #01H MOV TH0, #HIGH(65536-62500) MOV TL0, #LOW(65536-62500) MOV IE, #82H ;-------------------------------- LP1: SETB LED JB KEY, LP1 CALL DELAY JB KEY, LP1 JNB KEY, $ ;------------------- MOV R2, #160 SETB TR0 CLR LED LP2: JNB TR0, LP1 JB KEY, LP2 CALL DELAY JB KEY, LP2 JNB KEY, $ SJMP LP1 ;-------------------------------- T0_INT: MOV TH0, #HIGH(65536-62500) MOV TL0, #LOW(65536-62500) DJNZ R2, T0_E CLR LED CLR TR0 T0_E: RETI ;-------------------------------- DELAY: MOV R6, #20 DJNZ R7, $ DJNZ R6, $ - 2 RET ;-------------------------------- END
解:信号量初值S1=1,S2=0,S3=0,S4=0,MUTEX=1; int Count=0; repeat repeat repeat repeat P(S1) P(S2) P(S3) P(S4) Send message get message get message get message P(MUTEX) P(MUTEX) P(MUTEX) P(MUTEX) Count=0 Count=Count+1 Count=Count+1 Count=Count+1 V(S2) if(Count=3) if(Count=3) if(Count=3) V(S3) V(S1) V(S1) V(S1) V(S4) V(MUTEX) V(MUTEX) V(MUTEX) until false until false until false until false
把三个口全部赋值,应就可以了吧。 和您一起学习一下。错了的话,请多多包涵! void main() //主函数 { while(1) //大循环 { for(num=0;num<105;num++) //数组循环 { P1=table[num]; //调用数组 P2=table[num]; P3=table[num]; delay_1s(); //调用子函数 } } }
org 0000h LJMP start ORG 0003H JNB P3.2, $ CPL TR1 RETI start: SETB TR1 SETB EX0 SETB EA start1: mov a, #0 mov p1, a ;LED全亮 acall delay cpl a ;取反 mov p1, a ;LED全灭 acall delay SJMP start1 delay: mov r6, #20 ;子程序延时一秒 MOV TMOD, #10H MOV TH1, #3CH MOV TL1, #0B0H LOOP1: JBC TF1, LOOP2 AJMP LOOP1 LOOP2: MOV TH1, #3CH MOV TL1, #0B0H DJNZ R6,LOOP1 RET END
用外部中断引脚做按键检测脚, 假设上升沿产生中断 ,开机时初始化标志变量等于0, 当第一次按下时 置标志(随便设置一个变量)为1,第二次按下时,置标志为0, 第三次按下时标志又为1 ,第四次按下时标志为0.......以此类推。在while(1) 里 检测变量等于0,灯左移,等于1灯右移