1、十秒对于单片机来说是很长很长的时间了,单片机十秒的时间什么事都不能做,只在跑这延时程序,那是什么概念,用中断的话,单片机正常运行其他程序,只是时间到了才过来处理延时以后的程序,效率不知道高了多少 。
2、例程:
//假设晶振12MHZ
#include "reg51.h"unsigned int YSJS=0
void main(void)
{
TMOD |= 0X10 //定时器1工作于方式1,16位定时器
TH1 = 0XFF //定时器1定时时间=500uS
TL1 = 0X06
ET1 = 1 //使能定时器1中断
EA =1 //开总中断
while(1)
{
}
}
void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组
{
TH1 = 0XFF //定时器1定时时间=500us
TL1 = 0X06
YSJS++
if(YSJS==20000) //500uS*20000=10000000us=10s
{
P1 = P1 ^ 0X01 //P1.0十秒钟翻转一次
YSJS = 0
}
}
定时 7.5ms,即可。程序如下:
#include<reg51.h>
sbit P10=P1^0
unsigned int counter = 200
void main()
{
TMOD = 0x00
TH0 = (8192 - 7500) / 32 //0X63
TL0 = (8192 - 7500) % 32 //0X18
TR0 = 1
ET0 = 1
EA = 1
while(1) {
}
}
void isr_time0(void) interrupt 1
{
TH0 = (8192 - 7500) / 32 //0X63
TL0 = (8192 - 7500) % 32 //0X18
counter--
if(!counter) {counter = 200P10 = !P10}
}
初始值可以用编译软件自动算出,并不用人工计算。
其实,人工计算出来的初始值,就是下面的数值:
TH0 = 0x15
TL0 = 0x14
打开法兰克系统的参数。开启程序流程电源开关,在主要参数里边设定1815的主要参数。
转动四轴到设置的起点的部位,81815的主要参数相匹配的四四轴的主要参数设成零。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)