社区
单片机/工控
帖子详情
单片机定时/计数器T1定时100ms,在P1.0引脚上产生周期为100ms的方波信号,晶振频率为12MHZ,请编写程序。
LOVEMENYU520
2011-01-02 04:17:42
单片机定时/计数器T1定时100ms,在P1.0引脚上产生周期为100ms的方波信号,晶振频率为12MHZ,请编写程序。 大家帮个忙。谢谢、
...全文
11149
18
打赏
收藏
单片机定时/计数器T1定时100ms,在P1.0引脚上产生周期为100ms的方波信号,晶振频率为12MHZ,请编写程序。
单片机定时/计数器T1定时100ms,在P1.0引脚上产生周期为100ms的方波信号,晶振频率为12MHZ,请编写程序。 大家帮个忙。谢谢、
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Anjal2010
2011-03-11
打赏
举报
回复
可以用多个短的定时周期累加!你可以把100ms分为两个50ms来定时!
Barry-当下
2011-03-07
打赏
举报
回复
注意是周期!!!
okliujieko
2011-03-06
打赏
举报
回复
楼主若要周期为100ms的方波信号,定时50ms取反即可:
50ms / (1秒 / (12MHz / 12分频)) == 5 0000<65535
若要定时100ms,楼上说的是真理。
不知楼主是否误解了。
100ms定时取反是产生200ms周期方波。
lbing7
2011-01-26
打赏
举报
回复
定时是定在100ms。这个倒底能不能做到。
那就算一下。定时100ms需要多少个时钟周期。
100ms / (1秒 / (12MHz / 12分频)) == 10 0000(这个明显超出了65535这个16位定时器的长度)
如果不多次累积,咱的小51是做不到的。
pang123hui
2011-01-25
打赏
举报
回复
main()
{
IE = 0x88;
TMOD = 0x10;
TR1 = 1;
while (1) ;
}
void timer0() interrupt 1
{
// 定时50ms,要知道51单片机最长只能定时65.536ms
TL1 = (65536-50000)%256; // 得到定时器寄存器低位
TH1 = (65536-50000)/256; // 得到定时器寄存器高位
count++;
if(count == 2) //两次即100ms
{
count = 0;
P 10 = !P10;
}
}
pang123hui
2011-01-25
打赏
举报
回复
你这个题目无解的,先不说100ms定时,产生100ms方波,不现实
还有,51单片机貌似一般的最小系统12Mhz的晶振最多出65.536ms的延时
jnwsh
2011-01-12
打赏
举报
回复
100ms定时器能产生200ms方波这个不假?产生100ms方波表示怀疑。
doushi87
2011-01-12
打赏
举报
回复
51单片机是12分频的,12M的晶振则说明一个机器周期是12/12,即1us。所以定时从65536-50000到65536总共花了50000个机器周期,即50000us = 50ms。这样应该明白了吧!
doushi87
2011-01-12
打赏
举报
回复
void timer0() interrupt 1
{
// 定时50ms,要知道51单片机最长只能定时65.536ms
TL1 = (65536-50000)%256; // 得到定时器寄存器低位
TH1 = (65536-50000)/256; // 得到定时器寄存器高位
count++;
if(count == 2) //两次即100ms
{
count = 0;
P10 = !P10;
}
}
我觉得这样写中断函数更加容易理解!
mycrazycracy
2011-01-06
打赏
举报
回复
用的是51?那不是很简单,看书上都有写啊。
至于为什么要设那个计数初值,有两种办法:一个是上网下一个单片机小精灵,直接给程序,想都不用想。另一个是通过晶振自己算
tengchao998
2011-01-06
打赏
举报
回复
用带有比较匹配功能的单片机吧,如:c8051f310,配置好就行了,连中断都不用进
Great_Bug
2011-01-03
打赏
举报
回复
假定是标准的80C51,12MHz的时钟,一个周期是1uS,50毫秒要50000个周期。至于右移8位,是因为要把高8位送给寄存器
上面程序是用T0,如果用T1,可以像这样
sbit P1_0 = P1^0;
main()
{
IE = 0x88;
TMOD = 0x10;
TR1 = 1;
while (1) ;
}
void t1_isr() interrupt 3
{
P1_0 = !P1_0;
TR1 = 0; /* 改常数的时候其实应当把它停下来。。。于是就不会很准 */
TL1 = 65536-50000;
TH1 = (65536-50000) >> 8;
TR1 = 1;
}
LOVEMENYU520
2011-01-03
打赏
举报
回复
还不是很明白。。请指点
czk111111
2011-01-03
打赏
举报
回复
先算出时间周期
65536减去要定的时间就是定时器应该设定的时间
LOVEMENYU520
2011-01-03
打赏
举报
回复
P1_0 = !P1_0;
TL0 = 65536-50000;
TH0 = (65536-50000) >> 8;
这里的50000是怎么计算出来了呢?
还有为什么要 >> 8;
谢谢
LOVEMENYU520
2011-01-03
打赏
举报
回复
你QQ多少
zhm39913884
2011-01-03
打赏
举报
回复
交流交流,学习学习!
加我为好友吧!
Great_Bug
2011-01-02
打赏
举报
回复
sbit P1_0 = P1^0;
main()
{
IE = 0x82;
TMOD = 1;
TR0 = 1;
while (1) ;
}
void t0_isr() interrupt 1
{
P1_0 = !P1_0;
TL0 = 65536-50000;
TH0 = (65536-50000) >> 8;
}
51
单片机
(二十)——
定时
器
产生
方波
信号
在本文中,我们用
定时
器0来
产生
方波
信号
,包含两个实验,实验1
产生
一个
频率
为10kHz的
方波
信号
,实验2
产生
一个
频率
为100Hz的
方波
信号
。 实验1 实验1 中
定时
器0的初始化代码如下所示。 void init_T0(void) { TMOD|= 0x02; //使用方式2,8位自动重装载
定时
器 TH0=256-50; //...
51
单片机
开发入门(5)-
定时
器/
计数器
51
单片机
开发入门(5)-
定时
器/
计数器
51
单片机
定时
器/
计数器
1.基本概念:89C51有两个
计数器
T0和
T1
,每个
计数器
都是由两个8位的RAM 单元组成的,即每个
计数器
都是16 位的
计数器
,最大的计数容量是2的6次方=65536,记住是从0-65535。
定时
器的本质也是
计数器
,只不过
定时
器的脉冲来自内部的
晶振
,而
计数器
的脉冲来时外部,当检测的脉冲的下降沿时,计数寄存器加一,直到溢出,然后
单片机
产生
一个中断。所以需要
定时
时,先给计数寄存器设定一个初值,每有一个
单片机
c语言1ms 2ms 4ms
方波
,
定时
器使用:利用
单片机
内部
定时
器0通过
P1
.0端口输出一定
周期
的
方波
信号
。 - 试题答案网问答...
相关题目与解析使用
定时
/
计数器
0以工作方式2实现
定时
,在
P1
.0输出
周期
为200s的连续
方波
。已知
晶振
频率
fosc=6
MHz
。已知
单片机
的
晶振
频率
为6
MHz
,下面程序用
单片机
内部
定时
器T0工作在方式1下,从
P1
.0输出
周期
为_____已知
单片机
时钟振荡
频率
为6
MHz
,利用T0
定时
器,在
P1
.1
引脚
上输出连续
方波
,波形如图9-23所示。使用
定时
器T0以方式2
产生
50us
定时
,在
P1
.0输出
周期
为10...
单片机
接口与技术 实验05
定时
器/
计数器
keil c51
单片机
的实验5--
定时
器
计数器
控制直流电机的转动。 (1)学习51
单片机
定时
器/
计数器
的使用方法; (2)学习
定时
器实现PWM电机调速的方法。 (3)继续巩固lcd1602的使用。 (4)学习模块化开发的方法
单片机/工控
27,521
社区成员
28,798
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章