找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2753|回复: 9
收起左侧

请大师解惑,为什么灯不亮,附单片机源程序

[复制链接]
ID:578842 发表于 2020-8-22 18:55 | 显示全部楼层 |阅读模式
学习定时器的应用,小灯以500Ms时间闪烁。发现中断一次1Ms,灯不亮;中断一次10Ms,50Ms都可以了。不明白程序怎么回事,请
高手解释解释,感谢朋友们。


#include<reg52.h>

typedef unsigned char uchar;

sbit p1=P1^0;

uchar tmr500ms;




void main()
{
        TMOD=0x01;
        TH0=(65536-917)/256;
        TL0=(65536-917)%256;
        EA=1;
        TR0=1;
        ET0=1;
        
        while(1)
                {
                        if(tmr500ms==500)
                              {

                                tmr500ms=0;
                                p1=~p1;


                               }        
               
                }
        

}



void tim0() interrupt 1
{

        TH0=(65536-917)/256;
        TL0=(65536-917)%256;

        tmr500ms++;

}

回复

使用道具 举报

ID:213173 发表于 2020-8-22 20:34 | 显示全部楼层
uchar tmr500ms;数据类型最大255,if(tmr500ms==500)永远不能满足条件。
回复

使用道具 举报

ID:332444 发表于 2020-8-22 20:54 | 显示全部楼层
本帖最后由 xianfajushi 于 2020-8-22 23:02 编辑

用多级累加运算判断以达到规定的数目。
回复

使用道具 举报

ID:275826 发表于 2020-8-22 21:54 | 显示全部楼层
typedef unsigned char uchar;改成typedef unsigned int uint;
uint tmr500ms;
回复

使用道具 举报

ID:462827 发表于 2020-8-22 22:01 | 显示全部楼层
uchar (即unsigned char) 型的值最大只能到255,肯定到不了500的呀
回复

使用道具 举报

ID:739727 发表于 2020-8-22 23:39 | 显示全部楼层
tmr500ms 这个变量溢出啦
回复

使用道具 举报

ID:752225 发表于 2020-8-23 00:15 | 显示全部楼层
unsingend char字符型的值0~255
回复

使用道具 举报

ID:795361 发表于 2020-8-23 06:36 来自手机 | 显示全部楼层
uchar数据类型限制
回复

使用道具 举报

ID:155507 发表于 2020-8-23 07:18 | 显示全部楼层
给你改了一下试试。

  1. #include<reg52.h>

  2. typedef unsigned char uchar;   //unsingend char字符型的值0~255
  3. typedef unsigned int uint;

  4. sbit p1=P1^0;

  5. uint tmr500ms;


  6. void main()
  7. {
  8.         TMOD=0x01;
  9.         TH0=(65536-917)/256;
  10.         TL0=(65536-917)%256;
  11.         EA=1;
  12.         TR0=1;
  13.         ET0=1;
  14.        
  15.         while(1)
  16.         {
  17.                 if(tmr500ms>=500)
  18.                 {

  19.                         tmr500ms=0;
  20.                         p1=~p1;


  21.                 }        
  22.         }
  23. }


  24. void tim0() interrupt 1
  25. {

  26.         TH0=(65536-917)/256;
  27.         TL0=(65536-917)%256;

  28.         tmr500ms++;

  29. }



复制代码
回复

使用道具 举报

ID:578842 发表于 2020-8-23 07:43 | 显示全部楼层
哈哈,谢谢大家,明白了。溢出了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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