ORG 0000H
AJMP MAIN
ORG 000BH ;TO Time interrupt
lJMP T0INT
ORG 001BH ;T1 Count interrupt
LJMP T1CNT
ORG 030H
MAIN: MOV TMOD,#61H ;T1 count at MOD 2,T0 time int at MOD 1
MOV TL0,#0B0H ;66536-50000=3CB0H 50000us=50ms=005s
MOV TH0,#3CH
SETB ET0 ;T0 interrupt enable
SETB TR0 ;T0 work
;MOV TL1,#0FDH ;count num = 2
;MOV TH1,#0FDH ;auto load 0FDH
;SETB ET1
;SETB TR1
SETB EA ;Enable all interrupt
MOV A,#28H ;005s40=2s
MOV P0,#0FEH
JMP $
ORG 060H
T0INT: CLR ET0 ;Disable T0 interrupt
CLR TF0 ;clr tf0
;CPL P17
DEC A ;A--
JNZ T0RET ;A!=0 jmp
;;;;;;;;;;;;;;;;;;更改这里改灯闪烁
MOV A,P1
RR A
MOV P1,A
;;;;;;;;;;;;;;;;;;
MOV A,#28H ;A==0;A=40,
T0RET: SETB ET0 ;Enable interrupt
RETI
ORG 080H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-60000)
MOV TL0,#LOW(65536-60000)
SETB TR0
SETB ET0
SETB EA
MOV R2,#10
CLR 00H
MOV A,#0FEH
MOV P1,#0FFH
MOV P0,A
MOV B,#0FFH
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-60000)
MOV TL0,#LOW(65536-60000)
SETB TR0
CPL 00H
JB 00H,LED_CLOSE
MOV P0,A
MOV P1,B
SJMP T0C
LED_CLOSE:
MOV P0,#0FFH
MOV P1,#0FFH
T0C:
DJNZ R2,T0E
MOV R2,#10
RLC A
PUSH ACC
XCH A,B
RLC A
XCH A,B
POP ACC
MOV ACC0,C
T0E:
RETI
END
ORG 00H AJMP MAIN ORG 03H AJMP EX0INT ORG 30H MAIN: SETB EA SETB EX0 SETB IT0 MOV A,#01H MAIN1: MOV P1,A ACALL DELAY JB F0,RR0 RL A AJMP MAIN1 RR0: RR A AJMP MAIN1 EX0INT: CPL F0 RETI DELAY: MOV R7,#0 MOV R6,#0 MOV R5,#3 DJNZ R5,$ DJNZ R6,$-4 DJNZ R7,$-8 RET END
根据你的要求写了一个,记得选择满意答案哦
;FOSC = 12MHz
;sysclk = 1us
flag bit 00h
cnt equ 25000 ;计时器初始值,频率 = 20,周期 = 50ms,一半为25ms
org 00h
jmp main
org 0003h
jmp int0_isr
org 000bh
t0_isr:
mov tl0,#(65536 - cnt) mod 256
mov th0,#(65536 - cnt) / 256
jb flag,t0_end
xrl p1,#0ffh
t0_end:
reti
int0_isr:
cpl flag
reti
main:
mov sp,#50h
clr flag
mov tmod,#01h
mov tl0,#(65536 - cnt) mod 256
mov th0,#(65536 - cnt) / 256
setb tr0
setb it0 ;下降沿触发
mov ie,#83h
mov p1,#00h
jmp $
end
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
CLR P11
CALL DELAY
SETB P11
CALL DELAY
SJMP MAIN
DELAY:
MOV R7,#0A7H
DL1:
MOV R6,#0ABH
DL0:
MOV R5,#10H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
END
8灯的流水灯,其实简单来说给A赋一个初值,如
MOV A,#01H
然后将A循环左移或循环右移
然后把A输出
下面是一个简单的循环右移的8灯流水灯
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV A,#01H
LOOP:
RR A;循环右移,或改成RL A(循环左移)
MOV P1,A
CALL DELAY
SJMP MAIN
DELAY:
MOV R7,#0A7H
DL1:
MOV R6,#0ABH
DL0:
MOV R5,#10H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
END
C语言实现LED灯闪烁控制配套51单片机开发板。
#include //包含单片机寄存器的头文件
/
函数功能:延时一段时间
/
void delay(void) //两个void意思分别为无需返回值,没有参数传递。
{
unsigned int i; //定义无符号整数,最大取值范围65535。
for(i=0;i<20000;i++) //做20000次空循环。
; //什么也不做,等待一个机器周期。
}
/
函数功能:主函数 (C语言规定必须有也只能有1个主函数)。
/
void main(void)
{
while(1) //无限循环。
{
P0=0xfe; //P1=1111 1110B, P00输出低电平。
delay(); //延时一段时间。
P0=0xff; //P1=1111 1111B, P00输出高电平。
delay(); //延时一段时间。
}
}
单片机驱动LED灯的源程序:
#include<reg52h> //头文件。
#define uint unsigned int
#define uchar unsigned char
sbit LED1=P1^7; //位定义。
void delay_ms(uint);//mS级带参数延时函数。
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--);
}
扩展资料:
单片机应用分类:
通用型:
这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。
总线型:
这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。
另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。
控制型:
这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。
通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。
参考资料来源:百度百科-单片机
以上就是关于汇编51单片机三个LED交替闪烁全部的内容,包括:汇编51单片机三个LED交替闪烁、at89c51电路板,设计一个汇编程序,实现16个灯逐个闪烁,每个闪烁5次、怎么用汇编语言写一个接P3.4口的灯闪烁的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)