1.51单片机中,定时器怎么做延时函数用,比如说,要精确延时1s,该怎unsigned long TimeTickCount;//1ms计时器
void Timer0Configuration();
void Delay1ms(unsigned int a);
void main()
{
while(1)
{
Delay1ms(1000);//1s延时;
【51延时函数怎么写】}
}
void Delay1ms(unsigned int a)//0~65535
{
unsigned long b;//0~0xffffffff
b = TimeTickCount;//记下及时器初始值
while((TimeTickCount-b<a)||(0xffffffff+TimeTickCount-b<a));
//当计数器未溢出只须用 计数器实时变化的值-其初始值
//当计数器溢出则须用 计时器上限值+计数器实时变化的值-其初始值
}
void Timer1Configuration()
{
TMOD=0X10;//选择为定时器模式 , 工作方式1 。
TH1=0Xfc; //给定时器赋初值 , 定时1000us
TL1=0X18;
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void interrupt_timer1() interrupt 3 //1000us
{
TH1 = 0xfc; //重装
TL1 = 0x18;
TimeTickCount++;//1000us计时器
}
2.51单片机中,写个延时函数,延时1ms,该怎么写,为什么用汇编语言写可以精确计算 , 但有时想拼出整数的ms或10ms也不容易 , 计算方法如下图说明:
而C语言靠经验和实验得来的 , 如下面程序
如果不准(与晶振频率有关) , 调K的值 , , 软件仿真查看 , 直到大致准确 , 想更精确用定时器
void delay(unsigned char i) //延时程序
{
unsigned char i,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
3.51单片机用软件定时来控制舵机,延时函数怎么写延时可以用定时器来实现 , 也可以自己写延时函数 。
这是51单片机定时器初始化示例程序 。
TMOD = 0x10f; //GATE=0 01010001
//C/T=0--定时/计数器1工作于定时方式
//M1=1;M0=0--选择工作模式1 , 构成最大定时器
//T0:在此程序不使用
TL1 = 0x13; TH1 = 0x2C; //指定定时时间为50ms 65536-50/(11.0592/12)=11283=2C13h
EA = 1; //开总中断
TF1 = 0;
ET1 = 1; //开定时器中断
TR1 = 1; //开始计时
如果用延时函数 , 要精确计算时间 。
这是精确定时1ms的程序 , 你可以参考一下 。
void delay1ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
4.单片机的延时函数如何编写准确时间如实现知精确延时时间1ms(假设频率为6MHz , 则1Tm=2us)
YS10: MOV R7,#124 ;循环计数器赋初值道
L1: NOP
NOP ;空操作1Tm
DJNZ R7,L1 ;循环体内4Tm
NOP
RET
实际延时时间为8μs*124+8μs=1000μs=1ms
所以从上可知 , 主要从循环次数 , 和专循环体内的每个循环的周期数关系很大 , 只要在此基础上 , 增加适当的NOP指令属就好 。
文章插图
- 图书馆占座检查怎么写
- 设备需求报告怎么写
- 工程量计算书怎么写
- 销毁报告怎么写
- 段字旁行书怎么写
- 内衣有限公司会计实习报告怎么写
- 申请租用营业厅怎么写
- 表字的繁体字怎么写
- 微信公众平台申请认证理由怎么写
- 经销商荣誉证书怎么写