4284|13

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

下面程序为什么不能实现1M钟闪烁?12M振晶 [复制链接]

#define uchar unsigned char
#define uint unsigned int

#include
//#include

static uint n;

Delate1ms(uint count)
{
        TMOD = 0x02;
        TR0 = 1;
        EA = 1;
        ET0 = 1;
        TH0 = 0xFC;
        TL0 = 0x18;
        n = count;
        while(n);
        return ;
}

timer0() interrupt 1
{
        TH0 = 0xFC;
        TL0 = 0x18;
        n--;
}

void main(void)
{
        uchar cont = 1000;
        while(1)
        {
                P1_0 = ~P1_0;
                Delate1ms(cont);
        }
}

最新回复

还有你的TMOD=0x02也是不对的,工作方式2的最大定时时间是256us   详情 回复 发表于 2009-4-24 02:18
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1ms你想用眼睛看出来?你太高估你的眼睛了吧?
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是1秒钟,不是1MS
我是高估了你的眼睛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用楼主 l70770777 的帖子:
#define uchar unsigned char
#define uint unsigned int

#include
//#include

static uint n;

Delate1ms(uint count)
{
TMOD = 0x02;
TR0 = 1;
EA = 1;
ET0 = 1;
TH0 = 0xFC;
TL0 = 0x18;
n = count;
while(n);
return ;
}

timer0() interrupt 1
{
TH0 = 0xFC;
TL0 = 0x18;
n--;
}

void main(void)
{

while(1)




uchar cont = 1000; // 这里是字符型8-bit的数据,数据被截掉了实际上cont = 0xE8(1000d=3E8H)
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

5
 
发上来的时候发错了 其实改过来了
但是我仿真的时候 灯还是闪的很快
苦恼~~!
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
晕,你倒底设的多少时间?

另外把你的n定义成volatile 看看。
如果闪烁过快是感觉不到的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
不好意思,没看到你给count赋1000;
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 5 楼 zyzhang365 的回复:
晕,你倒底设的多少时间?

另外把你的n定义成volatile 看看。
如果闪烁过快是感觉不到的。


while判断的变量如果中断会去改变它是要设成volatile的,否则有些编译器一优化你的程序就要出问题了。

TH0 = 0xFC;
TL0 = 0x18;

确定这个值能实现1MS?根据你的频率再细算下吧。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

9
 
TH0 = 0xFC;
TL0 = 0x18;

这样初始化难道不对吗? 我计算了很多遍了
12M HZ 就是一个机器周期是1us
定时1ms就是65536 - 1000 = 64536 = FC18H啊?

请指点一下
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 
你的单片机没用过,但是感觉问题还是出在这里,换些数据试试吧。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
uchar cont = 1000;

谁家的uchar能有1000的范围?

反正我家的只有256

呵呵
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 
#include
#define uchar unsigned char
uchar count,sec;
sbit P1_0=P1^0;

void main()
{
        TMOD=0x01;
        TH0=0X3C;
        TL0=0XB0;


        EA=1;
        ET0=1;
        TR0=1;
   
        while(1);
}            

void timer0() interrupt 1
{
                  
        TH1=0X3C;
        TL1=0XB0;
          count++;
          if(count==20)
            {
                   count=0;
                   sec++;
                   if(sec==60)
                     { sec=0;
                          P1_0 = ~P1_0;
                           }
                }

}               

我是新手,随便写写....
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

13
 

把uchar cont = 1000;改成 uint cont = 1000;就可以了,以后写程序要注意数据类型,
很重要的
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

14
 
还有你的TMOD=0x02也是不对的,工作方式2的最大定时时间是256us
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表