51单片机定时器初值计算中定时器中段溢出出错的最小值?(65535-N)/256,这里N的最小值?N=5会出错吗

51单片机 ,定时器 工作方式2,是8位的 怎么给TH0和TL0赋初值? 如果是方式1的话就_百度知道
51单片机 ,定时器 工作方式2,是8位的 怎么给TH0和TL0赋初值? 如果是方式1的话就
51单片机 ,定时器 工作方式2,是8位的
怎么给TH0和TL0赋初值?
如果是方式1的话就是16位的
那么用TH0=(65536-初值)/256
TL0=(65536-初值)%256,那方式2 的话是TH0=(256-初值)/16
TL0=(256-初值)%16 ??????是这样的吗?方式2怎么赋初值
我有更好的答案
不是你写的那样 机器周期 :Tcy
定时器产生一次中断的时间为 : t
计算的个数 ; N= t/Tcy
晶振12的好计算11.0592的要换算
THx = 256 -N
TLx = 256 - N;
Tcy = 12 * (1/.0851以1秒计时为例
当计数250个数时 需要耗时 1.0851 * 250 = 271.275us
然后在计算需要溢出的次数对吧;.275 = 3686;(以上是11.0592晶振 12的为4000自己算一下根据我给你的公式和步骤)打个比方1秒吧 TMOD = 0x02;TH0 = 6;TLO = 6;EA = 1;ET0 = 1;TR0 = 1;while(1){
if(num == 3686)
led = ~led;
}void TO_time()interrupt 1{
磐石电子技术
模式2是8位定时器,所以TH0和TL0都=256-初值。
本回答被网友采纳
方式2是8位自动重装的;TH0=TL0=256-初值,这样就可以了
何必那么麻烦,下一个单片机小精灵,全搞定
自己搞懂了比较靠谱吧~_~
1条折叠回答
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51单片机定时器中断程序怎么办?_百度知道
51单片机定时器中断程序怎么办?
再次重新启动。用C语言实现的,先要定义好定时器的初值,不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期,机器周期=12/n(n指晶振频率),假设你要定时的时间为M,那么定时的初值为:M/机器周期=初值;TH0=(65536-初值)%256;TL0=(65536-初值)/256;将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值,例如用12M晶振做1ms定时计算如下:机器周期=12/12*10^6=1us(微秒)定时初值=(1*10^-3)/(1*10^-6)=1000;所以:TH0=()%256;TL0=()/256;将=64536化为16进制为:0xFC18,TH0=0xFC,TL0=0X18;定好初值后要延迟一秒就定一个延时参数,这里使用1000就行了(定时为1ms)中断程序为:timer0() interrupt 1 // 1ms延时(12.0MHz)
采纳率:99%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
单片机 考前复习习题4
下载积分:900
内容提示:单片机 考前复习习题4
文档格式:DOC|
浏览次数:23|
上传日期: 05:00:50|
文档星级:
全文阅读已结束,如果下载本文需要使用
 900 积分
下载此文档
该用户还上传了这些文档
单片机 考前复习习题4
关注微信公众号21ic官方微信-->
学了一段51定时器程序:TH0=-;TL0=-
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
偶是个单片机初学者,昨晚上鼓捣单片机,惊现一段诡异的程序:
上网一搜索,发现n多和我一样的初学者有这个疑问,后来一想,这应该是个常用的写法,查了几本基础知识的书,终于搞懂了,并且发现其中涉及很多有用的小知识。
所以发帖记录一下,也为我在21IC发帖开个头,希望大家以后多多指教,论坛越办越好
这里就以定时/计数器0为例吧,
使用Tmer首先要依据定时时间给它赋初值X,n=8、13、16为定时寄存器位数
定时时间Tout=(2^n-X)*机器周期T
& && && && &=(2^n-X)/机器频率f
& && && && &=(2^n-X)*(12/晶振频率fsos)
这时,出现一个特例,就是选16位定时计数器,同时晶振12MHz,有这个公式:Tout=(2^16-X)*(1us)
& && && && && & =(2^16-X)*(1us)
& && && && && & =(25536-X)*(1us)
在MCU中一个16位内存单元最大有效值为65535
所以,Tout=(65536-X)*(1us)
& && && & =(0-X)*(1us)=-X*(1us)=-X us
又通过物理上关于单位的量纲可知:X即可以表示成单位为1的定时寄存器初值,也可以理解为单位为微妙的定时时间
另外当将一个常数X赋值给一个16位单元时,若要求分高8位和低8位分别赋值时,可以用二进制的概念:
TH0=X/256;TL0=X%256;
这样就可以理解TH0=-; TL0=-;的含义了:就是定时5000微秒
路过帮顶一下
中级工程师, 积分 3165, 距离下一级还需 1835 积分
中级工程师, 积分 3165, 距离下一级还需 1835 积分
中级工程师, 积分 3165, 距离下一级还需 1835 积分
中级工程师, 积分 3165, 距离下一级还需 1835 积分
T0 /T1 初值应为负值!
本帖最后由 冷漠 于
13:49 编辑
领悟了半天,还是错了。
51定时器是增长计数器,所以,欲设置定时5000微秒,应设T0/T1初值为- 5000(0xEC78)!
相差甚远。
中级工程师, 积分 3165, 距离下一级还需 1835 积分
中级工程师, 积分 3165, 距离下一级还需 1835 积分
中级工程师, 积分 3165, 距离下一级还需 1835 积分
中级工程师, 积分 3165, 距离下一级还需 1835 积分
本帖最后由 冷漠 于
14:09 编辑
这么看清楚点:
#include &reg52.h&& && && && && && && && && && && &&&
sfr16&&DPTR = 0x82;
void main()
& &TMOD=0x01;
& &DPTR= - 5000;
// TH0=()/256;&&//5ms
// TL0=()%256;
扫描二维码,随时随地手机跟帖
技术领袖奖章
人才类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
您需要登录后才可以回帖
热门推荐 /7
MACOM在线研讨会正在召开~为何51单片机计算超过65535就会出现错误的数据?_百度知道
为何51单片机计算超过65535就会出现错误的数据?
不是关于定时器的,就是单纯的计算结果。
我有更好的答案
超过65535就错误,肯定是溢出了,溢出看看是不是数据定义错误了。看到楼主说定义uint32,51的开发环境中uint32并不是关键字,看看是不是人为定义错误了#define uint32 unsigned long int 或者typedef uint32 unsigned long int找找看喜欢对你有帮助。
采纳率:53%
数据定义有问题,16bit的数据最大65535,超过了就溢出了,所以出错。
定义的是32bituint32tmp = ;
应该是这个样子:uint32 tmp=1;tmp = tmp*;以后用的时候小心,因为实际计算遵循第一个变量的定义类型,一般人都不告述的
那先给它初始化为0,可以?uint32 tmp = 0;
傻得,给0算的不就是0了
惯性,初始化0;谢谢解决了!
本回答被提问者采纳
因为51单片机T0,T1计数器工作方式1满计算值就是2^16,其他3种工作方式都比这个小。
51中最大的计数是方式1有16个位其最大的数是2^16,也就是16个一当再计一次就会变成16个0,如果要计较大的数可以通过设置标志位
其他1条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机定时器程序 的文章

 

随机推荐