#include<intrins.h>
#define uchar unsigned char
uchar cnt,times
void delay()
{
uchar i
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
TR0=1
for(i=0i<timesi++)
{
while(TF0==0)
TH0=(65536-50000)/256
TL0=(65536-50000)%256
TF0=0
}
TR0=0
}
void ext0() interrupt 0
{
uchar i,j
P1=0xfe
times=8
for(i=0i<5i++)
{
for(j=0j<8j++)
{
P1=_crol_(P1,1)
delay()
}
}
}
void ext1() interrupt 2
{
uchar i,j
P1=0x7f
times=12
for(i=0i<3i++)
{
for(j=0j<8j++)
{
P1=_cror_(P1,1)
delay()
}
}
}
main()
{
EX0=1
EX1=1
IT0=0
IT1=1
PX0=0
PX1=1
while(1)
}
下列程序,已经经过实验,可以满足题目要求.ORG 0000H
SJMP MAIN
ORG 000BH
SJMP T0_INT
MAIN:
MOV TMOD, #01H T0定时方式1
MOV TH0, #(65536-50000) / 256 定时50ms@12MHz
MOV TL0, #(65536-50000) MOD 256
SETB TR0 启动T0
MOV IE, #82H 开中断
第一秒钟L0,L2亮,第二秒钟L1,L3亮,第三秒L4,L6亮,第四秒钟L5,L7亮,
第五秒L0,L2,L4,L6亮,第六秒钟,L1,L3,L5,L7亮,第七秒钟八个二极管全亮,第八秒钟全灭.
MOV 30H, #11111010B
MOV 31H, #11110101B
MOV 32H, #10101111B
MOV 33H, #01011111B
MOV 34H, #10101010B
MOV 35H, #01010101B
MOV 36H, #00000000B
MOV 37H, #11111111B
MOV R0, #30H
MOV R7, #20
M_LOOP:
SJMP M_LOOP无限循环
T0_INT:
MOV TL0, #(65536-50000) MOD 256
MOV TH0, #(65536-50000) / 256 定时50ms@12MHz
DJNZ R7, T0_END
MOV R7, #20
MOV P1, @R0
INC R0
CJNE R0, #38H, T0_END
MOV R0, #30H
T0_END:
RETI
END完
第一、设置定时器工作模式;第二、给TLX、THX赋初值;第三、开中断;第四、启动定时器。当然你要编好中断服务程序了。下面给一个简单的示范例程:程序运行后将在P1.0上产生1K的方波信号输出。ORG 0000H
LJMP START
ORG 000BH
LJMP TM0
ORG 0100H
START:
CLR EA
MOV SP,#60H
MOV TMOD,#01H
MOV TCON,#01H
MOV TH0,#0FEH
MOV TL0,#0BH
SETB TR0
SETB EA
SJMP $
TM0:
CLR TR0
MOV TH0,#0FEH
MOV TL0,#0BH
SETB TR0
CPL P1.0
RETI
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)