求关于单片机定时器延时的问题。tanks

来源:百度知道 编辑:UC知道 时间:2024/06/02 10:47:12
初学单片机,请都高手,八个灯,P1口,从最右边的那个开始亮,每隔一秒向左移一位,到了最左边的那个又倒回来向右移,到了右边又向左移,如此循环。用定时器完成。Tank you .

怎么这么多人都是ctrl c+ctrl V呢。。
用定时器完成
让我想想。。。明日发上来
因为不知楼主要用什么定时器,所以我用了T0,T2功能强大,杀鸡焉用牛刀
程序如下
TIMEC1 DATA 28H;下面定义软件计数的单元和次数
TIMEC2 DATA 29H
CLK1 EQU 200
CLK2 EQU 5
RIGHT DATA 30H;定义左右移的计数数单元
LEFT DATA 31H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP CTC0
ORG 100H
MAIN:
MOV SP,#5FH
MOV TIMEC1,#CLK1
MOV TIMEC2,#CLK2
MOV RIGHT,#8;定义左右移的次数
MOV LEFT,#8
MOV P1,#80H;不知楼主从什么位开始我就从P1.7移到P1.0,再返回
MOV TL0,#16;定时器计数250us
MOV TH0,#16;重装初值
ANL TMOD,#0F0H;设定T0和不影响T1
ORL TMOD,#02H
SETB ET0
SETB EA
SETB TR0
SJMP $
PROC CTC0;中断服务程序
CTC0:
PUSH PSW
PUSH ACC
DJNZ TIMEC1,EXIT;软件计数,定时一秒
MOV TIMEC1,#CLK1
DJNZ TIMEC2,EXIT
MOV TIMEC2,#CLK2
DJNZ RIGHT,NEXT1;右移减一,减8次
DJNZ LEFT,NEXT2;左移减一,8次
MOV RIGHT,#8
MOV LEFT,#8
EXIT:
POP ACC
POP PSW
RETI

NEXT1:
MOV A,P1;右移1位
RR A
MOV P1