
看看下面的程序,是不是最简单:
ORG 0000H
SETB TR0 启动T0
MOV R2, #250 定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ 等待8ms
CLR TF0
DJNZ R2, LOOP 每隔8ms,R2减一次一
CPL P1.0 R2为0则LED亮灭转换
LJMP 0000H
END
本程序,已经实验成功。
你试试吧,定义为有意义的名称是给编程者看的,编译器或单片机处理的是实际地址或数值....按你所说的要求,用一条求反语句即可实现..
//先定义IO引脚
sbit
pin=P3^7
//初始化一次
EA=1//开总中断
ET0=1//开定时器0中断
TMOD&=0xf1//设置定时器1为工作方式1
//TH0=(65536-1000)/256//根据晶振,对计数器赋初值,使计数器溢出更准确.
//TL0=(65536-1000)%256
TR0=1//启动定时器0
//中断处理函数
void
int_proc()
interrupt
1
{
static
unsigned
int
times//通过中断次数来实现长时间延时
//TH0=(65536-1000)/256根据晶振,对计数器赋初值,使计数器溢出更准确.
//TL0=(65536-1000)%256
if(++times>10)
{
times=0
pin=!pin//求反
}
}
NOPSJMP $
QD:MOV TH0, ....
MOV TL0,...
原来的结构有问题.
打字不易,如满意,望采纳。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)