请教一个关于51单片机定时器的问题

作者&投稿:不连 (若有异议请与网页底部的电邮联系)
关于51单片机定时器的问题。~

看来,你对定时器真是不理解呀。
1.关于定时器最长的定时时间,假如晶振频率是12MHz,机器周期是1us,最长定时的时间是65.536ms。所以,你想定时1秒是不可能的。通常是定时50ms,以中断方式,这样,每中断一次50ms,则中断20次就是1秒。
2.你这个程序就是定时50ms的,变成50000us。晶振频率是12M,初始值计算,X=65535-50000=15536=3CB0H,所以,高8位,TH0=0x3C;
低8位,TL0=0xB0;

第一 ,变量 定义 uchar temp;a;b; 中间的 2个 冒号 应该是 逗号(uchar tmep,a,b;),使用 分号的俺还真没 试过;
第二,定时器的 2处 初始化值 均错误,TL1=(65536-50000)%256,是 % 运算,不是 / 运行,TH1 是正确的。
第三,按12MHz 晶振计算,定时器为 50ms 中断,程序 的内容 是 1s 数码管 更新一个数0-F,1s 流动 一个 LED灯,一个周期 是 8s 而不是 1s。想要 周期为 1s 的话,定时器的时间应该 是 125ms,一次性 都 定时不到,就只能是 定时 25ms,分5次,为一 颗灯 的时间,40次 为一个数码管 数值 的时间。

第一种,定时中断触发,引脚翻转,但是立刻回到while循环中,将引脚置低,所以只有极短暂的瞬间引脚电平变高,人眼根本不可能反应过来
另外,由于使用模式1,且定时中断中没有有对计数器赋值,所以导致计时器溢出,从0开始计数,所以实际上第一次触发中断后,每次都是从0计数到65536才触发的中断


求教一个51单片机程序。。(LCD电子时钟)
这一次老师要求做一个基于LCD显示的电子时钟。完全不知所云,所以希望能请教一下高手关于LCD时钟的事情。做一个LCD时钟需要些什么东西啊,具体步骤是怎么做的呢?现在手上有一块单片机... 这一次老师要求做一个基于LCD显示的电子时钟。完全不知所云,所以希望能请教一下高手关于LCD时钟的事情。做一个LCD时钟需要些...

关于51单片机的几个问题: 经过一段时间的学习,对单片机有了初步的认...
④P3口:是准双向8位I\/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。P3能驱动(吸收或输出电流)4个LS型的TTL负载。作为第一功能使用时,就作为普通I\/O口用,功能和操作方法与P1口相同。作为第二功能使用时,各引脚的定义如表所示。值得强调的是,P3口的每一条引脚均可独立定义...

51单片机4个独立按键怎么写一个中断
要实现4个独立按键的中断,可以采用外部中断的方式。在51单片机中,可以通过P3口的外部中断请求(P3.2-P3.5)实现多个独立按键的中断响应。具体实现方法如下:1. 首先需要将P3.2-P3.5设置为输入模式,并使能中断请求。2. 在程序中,需要编写中断服务函数,用于处理按键中断事件。当某个按键按下时...

求一个51单片机C语言程序编程
全部点亮;按下第四次K1,灯全灭 include<reg51.h> \/*甲机*\/ sbit k=P1^0;sbit P00=P0^0;sbit P03=P0^3;unsigned chari,NO;void main(void) \/* 主函数*\/ { SCON=0x40; \/*方式1只发送,不接收*\/ TMOD=0x20;TH1=0xfd; \/*给定时器T1赋初值,波特率为9600*\/ TL1...

请教51单片机前辈们一个关于定时器的问题,中断程序响应以后定时器不是...
中断响应后,定时器的值不会清零的,只有中断标志会自动清零。定时器的清零发生在定时器溢出,这时候产生中断请求(如果中断允许),从定时器溢出到MCU调用中断程序,需要一定的时间,自这期间,定时器继续运行,因此TL0的值不为0,需要在中断程序里手动清零。

零基础十天学会51单片机视频教程10、51单片机视频HL-1测试方法
详情请查看视频回答

单片机新手请教一个问题,内容在下面的图片里面
首先我们要知这51单片机的计数器是一个加法计数器,也就是说它是从0开始一直加到65535时再加一就会溢出,如这时中断打开的就会产生一个中断。第二在它的工作在1方式时它是一个16位长度的,也就是共可计数是2的16次方。第三这个计数初值是什么!?这就是这16位计数器可数的最大值和我们要计的个...

我想问一下关于51单片机单键识别的松手检测的问题
在这里加一个while语句的目的是防抖动,也就是说防止你按一下键,由于抖动的原因,而单片机响应好几下。比如你的按键接在P0.0上,sbit ds=p0.0 当你按下的时候ds=0,放手的时候又是1,所以应该是while(ds==0);这句话就是在等待你松手,你松手以后才继续执行命令 ...

51单片机关于寄存器的问题,请帮助我解释一下
P1M0和P1M1是两个寄存器,用来设置P1口各个端口的工作状态的,从说明上看,你的P1的八个口中的每一个口都有四个工作状态,分别为00b,01b,10b,11b这四种状态。用P1M0的第一位和P1M1的第一位控制P1.0这个端口的工作方式,用P1M0和P1M1的第二位的两个位来控制P1.1的端口的工作状态。所以,P1M0...

51单片机智能小车制作,求通俗易懂的讲解
系统的单片机程序:include"reg52.h"definedet_Dist2.55\/\/ 单个脉冲对应的小车行走距离,其值为车轮周长 \/4#defineRD9\/\/ 小车对角轴长度。definePI3.1415926 defineANG_9090 defineANG_90_T102 defineANG_180189\/ 全局变量定义区。\/sbitP10=P1^0;\/\/ 控制继电器的开闭sbitP11=P1^1;\/\/ 控制金属...

怀安县14737563668: 51单片机的计时器问题 -
郟定金花: 0x是16进制数的前缀.0x01的意思是后面的01是一个16进制数字,换算成二进制就是00000001.意思就对TMOD寄存器依次赋值为00000001.因为TMOD的每一位都是针对于定时器的设置,所以这句话的意思就是设置定时器1工作在方式0,而定时器0工作在方式1.

怀安县14737563668: 悬赏:关于51单片机定时器的一个小问题
郟定金花: 1 ] 定时器开始计时但未发生中断的时候主程序仍然在运行,不占用主系统资源. 2 ] 当中断开始后,运行中断程序,运行结束后RETI返回到停等待的那段程序,jmp $ .

怀安县14737563668: 关于51单片机定时器的疑问 -
郟定金花: 1、这个函数是初始化TO,意思是将T0初始化为16位定时器(置位TMOD的0位,清TMOD的1、2、3位),并开启T0和中断总开关.这样操作是有些繁琐,你也可以直接写为TMOD=设定值,但这样写有一个缺点,就是也直接改动了对T1的设...

怀安县14737563668: 一个关于单片机定时器的问题 -
郟定金花: 定时器的初值跟设置的模式有关,就拿定时器0的模式1(即16位模式)来说 ,由于51系列单片机是8位的,所以需要2个寄存器,高8位称为TH0,低8为称为TL0.定时器的工作原理是输入一个脉冲,寄存器计数+1,等到2个寄存器计数到全部位...

怀安县14737563668: 怎样使用51单片机的定时器? -
郟定金花: 1. 设定工作方式TMOD=..... 2. 装入初值 TH0=...TL0=....TH1=....TL1=..... 3.开启定时器中断和总中断ET0=1或ET1=1 EA=1 4.启动时器 TR0=1 TR1=1 5.写中断服务程序 其中 3和5可以没有

怀安县14737563668: 51单片机中断定时 -
郟定金花: 51单片机定时器T1,直接定时30秒是不行的,但是,可以定时50ms,以晶振为12M为例,时间常数是:TH1=(65536-50000)/256; TL1=(65536-50000)%256; 开中断,在中断程序中计数,每中断计一个数,计数600次,就是30秒了,对一个引脚取反,就可以高低变化了,每隔30秒一变.

怀安县14737563668: 你好 我刚开始学习单片机 请教你个问题 51单片机定时器0最大可以定时多长时间?麻烦你详解一下 -
郟定金花: 51单片机定时器0最大定时时间由晶振决定,如果是12M晶振,最大可以定时时间是65.536ms,也就是初始为0.

怀安县14737563668: 问一下各位大神一个简单的51单片机定时器计数初值的问题设单片机晶振频率f=6MHz,使用定时器1以方式0产生周期为600us的等宽方波脉冲,并由p1.7输... -
郟定金花:[答案] 周期为600us的等宽方波脉冲,那么高低电平持续时间就是300US,所以那里会乘以2.晶振为6MHz,则一个机器周期为2US,600US就是300个机器周期 (8192-N)*2=300这里的300说的是300个机器周期.课本是对的

怀安县14737563668: 51单片机定时器设置: -
郟定金花: TMOD = (TMOD & 0XF0) | 0X01; //定时器0工作在模式1,16Bit定时器模式 上述表达式中0XF0的作用是什么? 1 (TMOD & 0XF0) 其中&为逻辑与指令,按位与操作,定时器的模式寄存器TMOD与上0XF0的作用是高4位不变,低4位被清零.(1与上...

怀安县14737563668: 51单片机定时计数器工作方式疑点 -
郟定金花: 因为51单片机处理数据是按八位进行的,所以给定时器赋初值的时候,不能将一个数直接赋到T0中,而是将这个数先转化为一个十六进制数,将它的高两位数(也就是二进制的高八位)传送给TH0,将低两位(也就是二进制的低八位)传送给TL0!(65536-x)/256就是取计数值的高八位运算表达式,因为八位二进制的最大值为256,所以将一个十进制数除以256后就会得到这个十进制数高八位数.最后将所得的余数传送到TL0,也就是后面(65536-x)%256的工作!希望能帮助你

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网