您现在的位置是:首页 >

晶振的封装 请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1ms(书本上是这样的,不懂),是怎样得来的?

火烧 2022-07-26 21:07:52 1069
请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1m (书本上是这样的,不懂),是怎样得来的? 请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1m (

请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1ms(书本上是这样的,不懂),是怎样得来的?  

请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1ms(书本上是这样的,不懂),是怎样得来的?

C的话其实时间没有办法完全定性地计算的
如果非得精确的话只能使用定时器了,或者汇编的也行
不过时间要求精度不是很高的话使用下面的程式码就行了
当时使用示波器把时间完全调准的,65536ms范围内还是比较准的,已经可以满足通常的要求了:
#include "reg51.h" 标头档案包含
巨集定义
#define uint unsigned int
#define uchar unsigned char
void delay(uint ms) 毫秒级延时(AT89C52 @ 11.0592MHz)
{
uint ti;
while(ms--)
{
for(ti=0;ti<112;ti++){}112
}
}
呼叫方式如下:
delay(400); 开机延时400ms
够详细了吧?!

C语言程式设计时,延时函式125次=1ms(书本上是这样的,不懂),是怎样得来的?

我想是通过程式的汇编程式码再结合机器指令的执行周期分析出具体延时多长时间的吧。

微控制器外接12M的晶振,1ms的基准延时函式用C语言怎么写?


void delay1ms(void) 延时1ms子程式
{
unsigned char i,j;
for(i=5;i>0;i--)
for(j=98;j>0;j--);
}
对应汇编

LCALL DELAY1MS ;2us
DELAY1MS:
MOV R6,#5 ;1us
DEL1: MOV R7,#98 ;1us
DJNZ R7,$ ;2*98=196us
DJNZ R6,DEL1 ;2us DLE1执行完所用时间(1+196+2)*5=995us。
RET ;2us

晶振的封装 请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1ms(书本上是这样的,不懂),是怎样得来的?

51微控制器求10微秒的延时函式 C语言(晶振11.0592MHz)

1、下面几个是微控制器的延时程式(包括asm和C程式,都是我在学微控制器的过程中用到的),在微控制器延时程式中应考虑所使用的晶振的频率,在51系列的微控制器中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR微控制器上常用的有8.000MHz和4.000MH的晶振所以在网上查询程式时如果涉及到精确延时则应该注意晶振的频率是多大。
2、软体延时:(asm)
晶振12MHZ,延时1秒
程式如下:
DELAY:MOV 72H,#100
LOOP3:MOV 71H,#100
LOOP1:MOV 70H,#47
LOOP0:DJNZ 70H,LOOP0
NOP
DJNZ 71H,LOOP1
MOV 70H,#46
LOOP2:DJNZ 70H,LOOP2
NOP
DJNZ 72H,LOOP3
MOV 70H,#48
LOOP4:DJNZ 70H,LOOP4
定时器延时:
晶振12MHZ,延时1s,定时器0工作方式为方式1
DELAY1:MOV R7,#0AH ;;晶振12MHZ,延时0.5秒
AJMP DELAY
DELAY2:MOV R7,#14H ;;晶振12MHZ,延时1秒
DELAY:CLR EX0
MOV TMOD,#01H ;设定定时器的工作方式为方式1
MOV TL0,#0B0H ;给定时器设定计数初始值
MOV TH0,#3CH
SETB TR0 ;开启定时器
HERE:JBC TF0,NEXT1
SJMP HERE
NEXT1:MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R7,HERE
CLR TR0 ;定时器要软体清零
SETB EX0
RET
3、C语言延时程式:
10ms延时子程式(12MHZ)
void delay10ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延时子程式(12MHZ)
void delay1s(void)
{
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延时子程式(12MHZ)
void delay200ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延时子程式程式: (12MHZ)
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}

51微控制器延时1us,12M晶振怎么用c语言写

51微控制器12M晶振延时1us,只需要执行一个NOP就是了。C语言中也是如此。
#include<reg51.h>
#include<intrins.h>
main()
{
_nop_(); 延时1us
while(1);
}

微控制器C语言程式设计关于延时函式

微控制器的C语言关于延时函式主要有两种
一种是用for回圈,通过微控制器执行空指令达到延时的目的
如:
for(i=0;i<100;i++)
{
;
}
这个简单的语句会执行100次空指令
每一次指令的时间可以大概确定
因此这个是最简单的延时函式
第二种是通过定时器的方式来实现
定时器是通过对微控制器的晶振进行计数
然后在定时器中断服务函式里面实现定时时间的计算及设定
51微控制器的定时器0中断服务函式为
void time0() interrupt 1
{
...
}

微控制器外接24M的晶振,1ms的基准延时函式用C语言怎么写?

定时器T0 工作方式1 晶振频率24MHz
定时器最大定时时间(us):32768
定时器最小定时时间(us):0.5
【1ms精确定时C51程式码】
void T0_init(void) 定时器初始化
{
TMOD |= 0x01;
TH0 = 0xf8; 设定定时器计数初值,定时1000us
TL0 = 0x33;
IE |= 0x82; 开启总中断
TR0 = 1; 启动定时器
}
void T0_intservice(void) interrupt 1 定时器中断服务
{
TH0 = 0xf8; 重灌载定时器计数初值
TL0 = 0x33;
这里可以插入其他处理程式,不会影响定时器工作
}

请问AT89S52微控制器用C语言程式设计时延时函式的延时时长怎么计算!(系统时钟为12M)!

时钟周期T1=1/12M
机器周期T2=T1*12
指令周期T3:1~4个机器周期
要算的话只能是看有几个指令了,然后大致预测一下。。。当然以实际为准。用keil测比较好

51微控制器怎样延时时间更长?晶振12M

汇编的
MOV R0,#20 ;将立即数200传递到工作暂存器R0中
D6: MOV R1,#255 ;将立即数200传递到工作暂存器R1中
D7: DJNZ R1,D7 ;检测R1中的数值是否为0,不为0则R1减1并转移到标号D9,为0则顺序执行
DJNZ R0,D6 ;检测R0值是否为0,不为0则R0减1并转移到标号D8,为0则顺序执行

51微控制器定时器方式1,晶振33hz,延时1秒,怎么用c语言程式设计

33MHz 一个定时周期延时50ms
#include <reg51.h>
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0CA;
TL0 = 0x4A;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main(void)
{
InitTimer0();
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0CA;
TL0 = 0x4A;
add your code here!
}

  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码