OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5840|回复: 8

可是百思不得其解,求助!定时器里的全局变量自加不起作用?

[复制链接]

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-6-15
在线时间
3 小时
发表于 2013-6-22 18:35:03 | 显示全部楼层 |阅读模式

定时器里的全局变量自加不起作用,非常简单的程序,请看:

void main()
{
// hong_fashe是p1^2.
 hong_fashe =0;   //开机后先低电平,防止烧毁。
 Delay500ms() ; Delay500ms() ; Delay500ms() ;
 time0_init();
 hong_fashe=1;
 EA =1;
 while(1)
 {
   if(ms_mark==1)   hong_fashe =0;
  if(ms_mark==2)    hong_fashe =1;   
 }
}


void time0()interrupt 1

 TF0 =0;
 TH0 =T0_MS_H;
 TL0 =T0_MS_L;
 ms_mark++;
}


void time0_init()
{
  TMOD &=0XF1;  //定时器0工作于模式一下,定时器1的位数保持不变
 TH0 =T0_MS_H;    //晶振12m 另一个有语句#define T0_MS_H   0XEC  ,#define T0_MS_L   0X78  //需要定时的系统基准时间,5ms
 TL0 =T0_MS_L;
 ET0 =1;
 TR0 =1;

}

应该是每5ms变量 ms_mark自动加一,进入while前是高电平,过5ms为低电平,再过5ms为高电平,,是这样吧??
实际显示的图像见附件

IMG_20130622_181110.jpg
诗人出身的工程师,建造一千零一夜的一千零一个梦!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-6-22 19:09:42 | 显示全部楼层
你这个变化很快的哦...
ms_mark要很久才出现一次1,一次2.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-6-15
在线时间
3 小时
 楼主| 发表于 2013-6-22 19:39:38 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
什么很快呀?
进入while前为高电平,进入while等待5ms,ms_mark加1 hong_fashe变成低电平,再等待5ms再加一,hong_fashe变为高电平。以后没有if语句适合了,一直保持高电平。应该这样吧??
诗人出身的工程师,建造一千零一夜的一千零一个梦!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-6-22 20:58:54 | 显示全部楼层
是的
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-6-15
在线时间
3 小时
 楼主| 发表于 2013-6-22 21:38:34 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
可是实际波形不是这样的!!
诗人出身的工程师,建造一千零一夜的一千零一个梦!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-6-22 23:21:29 | 显示全部楼层
加到255后,又会从1,2开始计算啊.
5ms*255=1.3秒左右,就会出现一次低电平.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-6-15
在线时间
3 小时
 楼主| 发表于 2013-6-23 09:15:55 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
对,关键是开始的1,2个脉冲的周期是不对的。。
我把TMOD &=0XF1,改成了TMOD =0X01;就正常了,
我只是用了定时器0,工作于模式一,TMOD &=0XF1的作用不就是,让t0定时、工作模式1与int0无关,定时器1保持不变嘛!和TMOD =0X01;等价的呀!错误找到了,不知道什么原因
诗人出身的工程师,建造一千零一夜的一千零一个梦!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-6-23 11:11:59 | 显示全部楼层
TMOD &=0XF1  和TMOD =0X01,完全不等价!!!
TMOD = 0X01的等价写法为:TMOD &=~(0XFE)
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-6-15
在线时间
3 小时
 楼主| 发表于 2013-6-26 10:47:16 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
哎,犯了个低级错误,那天写程序写糊涂了。。。谢谢站长同志啊!
诗人出身的工程师,建造一千零一夜的一千零一个梦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 11:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表