ORG 0000H ;程序开始 SJMP START ;跳转到START ORG 0050H ;START从ROM的0050H开始存储 START: MOVE P1.0,#00000001B ;把二进制数00000001B送到P1口 LCALL DELAY ;调用延时子程序 MOVE P1.0,#00000010B ;把二进制
51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:;假设晶振12MHZ,P1控制8个LED低电平亮 ;
12个LED,只用一个半IO接口即可,假设为P1和P2的半个口。MOV P1, #0FFH ;开始时,灯全关 MOV P2, #0FFH START:MOV P1, #01111111B ;第一个灯亮 LCALL DELAY ;调用延时子程序 MOV P1, #0
前8灯全亮MOV P1,#080HLCALL DELMOV P1,#0C0HLCALL DELMOV P1,#0E0HLCALL DELMOV P1,#0F0HLCALL DELMOV P1,#0F8HLCALL DELLJMP START/程序跳到开始,进行循环DEL:MOV R7,
Init_GPIO( );//引脚初始化 while(1) //大循环 { LED1_ON( );//点亮第一个LED LED2_OFF( );LED12_OFF( );Delay_ms(1000);//延时 参数自己可以根据晶振频率自己调节 LED1_OFF( ); //点亮第二个LED
12个流水灯循环点亮,用汇编语言编写程序?
0000H LJMP MAIN ORG 0003H LJMP EXT0 ORG 0030H MAIN:MOV SP,#5FH MOV P1,#0FFH SETB EX0 SETB IT0 SETB EA MOV A,#0FEH SJMP EXT0:MOV P1,A RL A JB ACC.4,EXTE MOV A,#0FEH EXTE:RETI END
START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 MOV P1,#1
没分的话就不答具体的了,你随便找本书都有模块,你要是P1口接LED再接限流电阻,最后把所有电阻都连在5V电压的话,那就先给11111110给P1,用RR来循环,再写一个用计数器做延时的子程序就行了。一般书都有这几个模块
//以下是四个LED灯循环亮的程序,看看,可以吗?include
;假定:P1口0~3脚依次接4个LED ;假定:晶振为12M ;假定:P1口低电平有效,LED点亮 ORG 00H AJMP MAIN ORG 0BH AJMP JT0 MAIN:NOP MOV SP,#40H MOV A,#0FEH MOV R0,A MOV P1,A ;初始化LED灯,第1灯点
跪求用汇编语言编程,要求如下,P1口的四个LED等循环点亮,点亮时间为一秒,用定时计数器实现延时一秒的编
void main(){uchar tab[]={}//定义数码管 EX0=1;EA=1;IT0=1;while(1){P1=tab[m];} } void into()interrupt 0 {m++;while(INT0==0);} 程序大概是这样,因为使用手机,不方便输入!
void main(){ while(1){ LED1=0;delay_ms(1000);LED1=1;delay_ms(1000);} } void delay_ms(uint z) //延时子程序 { uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}
1:你写汇编程序注意程序的入口地址,比如:“ORG 0000H,主程序开始的入口ORG 0100,中断程序开始的入口 ORG 0200等等”。你要知道汇编和C不同,汇编比起C语言要相对机械一些。汇编程序是写入硬件内部的,严格的配合硬
far @interrupt void TIM1_UPD_OVF_IRQHandler(void){ TIM1_SR1 = 0x00; // 清除更新标志 } far @interrupt void EXTI0 (void)//外部中断子函数 { if(PA_on){ sbi(PA_ODR,4);PA_on=0;}//PA4为灯亮
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
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、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
假如:P0口接8个LED,程序可以这样:include
JMP MAIN ORG 30H MAIN:MOVA,#0FFH;设置左移初值 CLRC;C=0 MOVR2,#08H;设置左移次数 LOOP:RLCA;左移1位 MOVP2,A;输出到P2 CALLDELAY;延时 DJNZR2,LOOP;左移7次 MOVR2,#07H;LOOP1:RRCA;右移1位 MOVP2,A;
用汇编语言让51单片机八个灯从左到右依次点亮且都不灭,每个灯亮的时间间隔0.5秒,然后全灭,再循环之前的步骤。参考如下:电路 代码 LED_COUNTDATA30H T0_COUNTDATA31H ORG0000HLJMPMAINORG000BHLJMPT0_INTORG0030HMAIN:
ORG 0000HLJMP MAINORG 0030HMAIN; MOV R2,#3LOOP: MOV A,#0FEH MOV R3,#8LOOP1: MOV P0,A LCALL DELAY CLR C RLC A DJNZ R3,LOOP1 MOV P0,#00H LCALL DELAY MOV P0,
while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六
while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);P0=0xff;DelayMS(150);} }
单片机用汇编做一个控制8个LED灯泡从左到右依次点亮,最后全部亮,再全部熄灭后重复前面的过程
k<8;k++) { P0=_cror_(P0,1); delay(250); } } } }}
可以把8个发光二极管接在P1口 高电平亮 低电平灭 使用51系列单片机 R5寄存器控制要闪烁的发光二极管的位置 MOV R7,#10 LL0: MOV R5,#00000001B MOV A,R5 LL1: MOV P1, A LCALL YS
main:mov a,#11111110b//此为共阳极,先让P0.0口先亮 mov r0,#8 loop:mov p0,a//向p0 口送码 lcall DELAY//调用延时子函数 rr a //右移 djnz r0,loop //如果就循环一次这样就行了;如果需要循环无数次就
int i = 8; //循环次数为8 void main(){ P1 = 0xff; //初始化LED,8个LED全灭,(假设低电平点亮)init_t0() ;while(1); //循环等待定时中断 } void init_t0() //定时器0初始化程序 { TMOD = 0x0
while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六
MAIN:MOVA,#0FFH;设置左移初值 CLRC;C=0 MOVR2,#08H;设置左移次数 LOOP:RLCA;左移1位 MOVP1,A;输出到P1 CALLDELAY;延时 DJNZR2,LOOP;左移7次 MOVR2,#07H;LOOP1:RRCA;右移1位 MOVP1,A;输出到P1 CALLDELAY;
各位单片机达人帮个忙 用汇编语言做一个 发光二极管循环点亮的程序 要求 使八只发光二极管做循环点亮一次
MAIN: MOV P1, #11111110B ; P1 口 点亮一个发光二极管 ACALL DELAY ; 调用延时子程序 MOV P1, #11111101B ; 从左向右移动 一位 ACALL DELAY MOV P1, #11111011B ACALL DELAY MOV P1, #11110111B ACALL DELAY MOV P1, #11101111B ACALL DELAY MOV P1, #11011111B ACALL DELAY MOV P1, #10111111B ACALL DELAY MOV P1, #01111111B ACALL DELAY JMP MAIN ; 转移 至 MAIN 循环 DELAY: MOV R5,#250 ; 延时子程序 6.000 M 晶振 约 0.5 秒 D1: MOV R6,#250 D2: DJNZ R6,$ DJNZ R5,D1 RET#include #define LED P1 //宏定义,使用LED代替P1口(相当于LED=P1) #define uchar unsigned char //用uchar代替unsigned char方便操作 #define uint unsigned int /*------------------time ms延时函数-----------------*/ void delay_ms(uint time) { uchar tres; for(;time>0;time--) { tres=150; while(tres--); } } void main() { uchar t; LED=0X01;//P1=00000001B while(1)//死循环,不停的点亮和熄灭LED { for(t=0;t<8;t++) { LED=~LED;//按位取反,点亮一个LED delay_ms(100);//延时0.1s LED=~LED;//按位取反 LED<<=1;//左移一位,点亮不同的LED } LED=0X80;//P1=10000000B for(t=0;t<8;t++) { LED=~LED;//按位取反,点亮一个LED delay_ms(100);//延时0.1s LED=~LED;//按位取反 LED>>=1;//右移一位,点亮不同的LED } LED=0X01;//P1=00000001B } }
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 仿真图效果。
ORG 0000H start: AJMP MAIN ;转主程序 ORG 000BH AJMP CTC0 ;转中断服务程序 ORG 0030H MAIN: MOV TMOD,#01H ;设置T0为方式1 MOV TL0,#0B0H ;送初值,定时50ms,晶振为12MHz时 MOV TH0,#3CH MOV B, #0FEH MOV R0,#00H SETB EA ;CPU开中断 SETB ET0 ;T0中断允许 SETB TR0 ;启动定时 HERE: SJMP HERE ;等待中断 ;中断服务程序 ORG 0120H CTC0: MOV TL0,#0B0H ;重新装如初值 MOV TH0,#3CH INC R0 MOV A,R0 CJNE A,#14H,NEXT MOV R0,#00H MOV A,B RL A MOV B,A NEXT: RETI
http://blog.163.com/asm_c/blog/static/248203113201063540886/ 参考。
流水灯(理论+编程)
你的题目要求用定时器T1的方式1,还要定时0.1秒,那单片机的晶振频率必须是6M,或小于6M才行。 以6M为例,机器周期是2us,那定时器0.1s即为100ms,定时的时间常数是X=65536-1000/2=15536=3CB0H。 所以定时器初始化程序是 MOV TMOD, #10H MOV TH1,#3CH MOV TL1,#0B0H SETB TR1 MOV IE,#88H;开中断 剩下的就是P1口输出控制哪个灯亮就行了。