1,若某一51单片机系统的晶振频率为6MHz(12MHz),试编一个延时1s(2s)的程序。

如题所述

;本程序所用晶振为12MHz,12周期模式

;定时时间为0.5秒的延时器
nop
LCALL DELAY ;4uS
;执行上句的时间:4+499995+1(ret时间)=0.5秒
NOP

;=======包含LCALL DELAY是0.5秒====
DELAY:
MOV R7,#9 ;1uS
DELAY1:
MOV R6,#128 ;1uS
DELAY2:
MOV R5,#215 ;=215*2=430uS
NOP ;1uS
DJNZ R5,$
;上一句执行完后用时:215*2=430uS
DJNZ R6,DELAY2
;执行完上句后用时:[430+2(是上句每次执行时间)+1(执行MOV R5的时间)+1(nop)]*128=55552uS
DJNZ R7,DELAY1
;执行完上句后用时:[55552+2(本句每次执行时间)+1(MOV R6的时间)]*9=499995uS
RET ;1uS
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-10-17
1000000US=250*40*100
DELAY:
MOV R5,#50
DL0:
MOV R6,#20
DL1:
MOV R7,#250
DJNZ R7,$
DJNZ R6,DL1
DJNZ R5,DL0
RET

不是十分准确,能用就行了本回答被提问者采纳

MCS-51单片机外接晶振频率6MZH时,它的双周期指令的指令周期是多少...
指令周期是指执行一条指令所占用的全部时间,一个指令周期通常含有1~4个机器周期(依指令类型而定)。显然,当震荡频率为12MHz时,一个机器周期为1us;当振荡频率为6MHz时,一个机器周期为2us。具体各指令周期时间见下图:

51单片机怎么延时程序
500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)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单片机延时函数的问题。晶振是12MHz..需要延时1秒
很明显 远远超过了1个最小指令.9秒的的误差算少的了...所以说,假如你要做1s的延迟, 最好使用内部时钟中断来做,直接在程序内部delay延时的话,占用系统资源还算不准...具体解释下上图, 为了拿这5分还真不容易...首先, 进入函数就需要5个汇编指令, 这些指令主要是入栈,备份指针的操作, 不同的...

51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波...
51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波,使用定时器 51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波,使用定时器T1工作方式2... 51单片机晶振频率12MHz,编程实现P1.0输出频率为2KHz,占空比为50%的方波,使用定时器T1工作方式2 展开 我来答 答题抽奖 首次...

假设单片机的晶体震荡器的频率是12MHz,利用定时器1采用方式1定时2ms...
51单片机指令频率是晶振频率的12分频,所以单片机的指令周期为1\/1MHz=1uS,所以定时器计一个数就是1uS,要定时2mS需要计数的数量为:2mS\/1uS=2000,定时器计满溢出定时器产生中断,所以初值为:65536-2000=63536,希望对你有帮助

一般的51系列的单片机晶振频率有6、12Mhz,为什么我们老师说其运行速度...
我举个例子吧,假如是12Mhz的晶振,那么执行速度是12分之1的晶振频率,也就是1Mhz的执行速度。而mcs 51单片机(一般指课本上那些过时的货色,像宏晶就不同,好像震荡周期最高33Mhz)最高的晶振频率就是24Mhz,这个是有数据可查的,你可以查看at89s51的数据手册,高于这个频率可能工作就不稳定或者不能...

一个单片机晶振频率为6MHZ,那么,一个机器周期是多少
振荡周期:石英振荡器的振荡周期,为频率的导数,如石英频率为12MHz12MHz,在振荡周期为1\/12us1\/12us。状态周期:单片机完成一个最基本动作需要的时间周期,1个状态周期=2个振荡周期,单片机完成一次完整的具有一定功能的动作所需要的时间周期,1个机器周期=6个状态周期=12个振荡周期,如石英频率为12MHz...

单片机的程序怎么延时1s?
单片机常用的编程语言有汇编语言、C语言等。以下是使用汇编语言实现延时1s的程序:以上程序中,使用了一个8位计数器来实现延时功能。由于单片机晶振频率为12MHz,每个指令需要执行12\/4=3个机器周期(其中4代表指令周期),因此可以通过调整计数器初值来实现不同的延时时间。具体计算过程如下:每个指令需要执行...

设51单片机晶振频率为12MHZ,延时1m的子程序
用的是11.0592M的,你如果真的需要是12M的,那自己直接修改成12M就可以了。调用的时候直接把uinsigned int ms改成1就是1ms.void ConfigTimer0(unsigned int ms){ unsigned long tmp;tmp = 11059200\/12;tmp = (tmp * ms)\/1000;tmp = 65536 - tmp;tmp = tmp + 18;T0RH = (unsigned char...

已知单片机系统频率FOSC=6MHz\/12MHz,若要求定时值为1ms,
t为定时时间;Fosc为晶体频率 当Fosc=6MHz 时 方式0:X=2^13-1*10^(-3)*6*10^6\/12=8192-500=7692 方式1:X=2^16-1*10^(-3)*6*10^6\/12=65536-500=65036 当Fosc=12MHz 时 方式0:X=2^13-1*10^(-3)*12*10^6\/12=8192-1000=7192 方式1:X=2^16-1*10^(-3)*12*10^...

相似回答