搜索
bottom↓
回复: 3

谁进来帮忙看下"定时器的初值"是不是有问题啊?

[复制链接]

出0入0汤圆

发表于 2013-2-13 09:40:36 | 显示全部楼层 |阅读模式
本帖最后由 一匹狼 于 2013-2-13 11:03 编辑
  1. /********************************************************************/                                                         
  2. /*用动态扫描方法和定时器1在数码管的前三位显示出秒表,                                */
  3. /*精确到1%秒,即最后两位显示1%秒,一直循环下去                                                */
  4. /*设时钟频率为12M                                                                                                        */
  5. /********************************************************************/
  6. #include<reg52.h>  //52单片机头文件
  7. #include <intrins.h> //包含有左右循环移位子函数的库
  8. #define uint unsigned int    //宏定义
  9. #define uchar unsigned char  //宏定义
  10. sbit dula=P2^2;       //数码管段选锁存端
  11. sbit wela=P2^3;       ////数码管位选锁存端
  12. uchar ge,shi,bai;
  13. uint tt;
  14. uchar code table[]={
  15. 0x3f,0x06,0x5b,0x4f,
  16. 0x66,0x6d,0x7d,0x07,
  17. 0x7f,0x6f,0x77,0x7c,
  18. 0x39,0x5e,0x79,0x71};
  19. void display(uchar,uchar,uchar); //函数声明
  20. void delay(uint);
  21. void main()
  22. {
  23.         TMOD=0x10;//设置定时器1为工作方式1
  24.         TH1=(65536-10000)/256;
  25.         TL1=(65536-10000)%256;
  26.         EA=1;//开总中断
  27.         ET1=1;//开定时器1中断
  28.         TR1=1;//启动定时器1
  29.         while(1)
  30.         {
  31.                 display(bai,shi,ge);
  32.         }
  33. }


  34. void exter0() interrupt 3   // 定时器1中断
  35. {
  36.         TH1=(65536-10000)/256;
  37.         TL1=(65536-10000)%256;
  38.         tt++;
  39.         if(tt==1000)
  40.                 tt=0;
  41.         bai=tt/100;
  42.         shi=tt%100/10;
  43.         ge=tt%10;
  44. }

  45. void display(uchar one,uchar two,uchar three)
  46. {
  47.         dula=1;
  48.                 P0=table[one];   //送段数据
  49.                 dula=0;
  50.                 P0=0xff;                //送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器
  51.                 wela=1;
  52.                 P0=0xfe;
  53.                 wela=0;
  54.                 delay(1);

  55.                 dula=1;
  56.                 P0=table[two];
  57.                 dula=0;
  58.                 P0=0xff;
  59.                 wela=1;
  60.                 P0=0xfd;
  61.                 wela=0;
  62.                 delay(1);

  63.                 dula=1;
  64.                 P0=table[three];
  65.                 dula=0;
  66.                 P0=0xff;
  67.                 wela=1;
  68.                 P0=0xfb;
  69.                 wela=0;
  70.                 delay(1);
  71. }

  72. void delay(uint z)       //延时子函数
  73. {
  74.         uint x,y;
  75.         for(x=z;x>0;x--)
  76.                 for(y=110;y>0;y--);
  77. }
复制代码
设定初值时是不是有错?
        TH1=(65536-10000)/256;
        TL1=(65536-10000)%256;
后面是tt=1000;所以
        TH1=(65536-1000)/256;
        TL1=(65536-1000)%256;
郭天祥十天学会单片机的课后习题,感觉不对劲啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入90汤圆

发表于 2013-2-13 09:44:33 | 显示全部楼层
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读

出0入0汤圆

发表于 2013-2-14 16:00:08 | 显示全部楼层
是12M晶振吗,是滴话1ms定时应该是65536-1000才对,10000就10ms了

出0入0汤圆

 楼主| 发表于 2013-2-14 16:49:19 | 显示全部楼层
tony90 发表于 2013-2-14 16:00
是12M晶振吗,是滴话1ms定时应该是65536-1000才对,10000就10ms了

已经想明白了,因为秒表最后两位表示分秒 想成ms了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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