2559|0

1万

帖子

16

TA的资源

版主

楼主
 

【R7F0C809】在工程中加入自己的定时程序 [复制链接]

本帖最后由 ddllxxrr 于 2015-9-9 18:11 编辑

定时器我看了半天觉得比较复杂,相比12位间隔定时器来说,12位间隔定时器简单多了。

那么,用其定时可以不????答案是肯定的。

我不必说寄存器的结构及功能,这些都可在中文用户手册上找到,

我要说的是,在给定记数值到一定要使之运行就是高寄存器的最后一位一定要置1。



再有注意下中断,只要中断系统的中断名称搞对了(见手册中断),那么后边的中断名称可以自己起哈!!!!

我的程序如下:

  1. #pragma interrupt INTIT mytime_in

  2. #pragma "sfr"
  3. #include "mytime.h"
  4. extern uint8_t mydisplaydata[4];
  5. extern uint8_t hour,second,minute;


  6. unsigned int count;


  7. void mytime(void)
  8. {
  9.    //PER0=0x80;
  10.    OSMC=0x10; //¿aÆô15Kê±Öó
  11.    ITMK=1;
  12.    ITIF=0;
  13.    ITPR0=0;//1
  14.    ITPR1=0;//1
  15.    TMKAEN=1;
  16.    ITMCH=0x83;
  17.    ITMCL=0xe8;
  18.    ITMK=0;   //ê1ÄüÖD¶Ï
  19.    
  20. }





  21. __interrupt void mytime_in(void)    /*Stepper motor commutation operation*/
  22. {
  23.     ITMCH=0x83;
  24.     ITMCL=0xe8;
  25.     count++;
  26.     if(count>=15)
  27.     {
  28.             count=0;
  29.             P0.6 = 0;
  30.             second++;
  31.                     if(second>=60)
  32.                     {
  33.                        second=0;
  34.                        minute++;
  35.                        if(minute>=60)
  36.                        {
  37.                           minute=0;
  38.                           hour++;
  39.                           if(hour>=24)
  40.                           {
  41.                              hour=0;
  42.                           }
  43.                        }
  44.                     }   
  45.    
  46.     }
  47.   
  48. }

复制代码


我又在显示时加上了与那个点,这样就象流水上灯一样每隔一秒闪一下每个LED都有份。

  1. void my_LED_Display()
  2. {
  3.     static uint8_t s_COM = 3;                               /* COM ports state */           
  4.    
  5.       
  6.     s_COM++;                    
  7.     if (s_COM > 3)
  8.         s_COM = 0;
  9.    
  10.     /* COM ports control */
  11.     P0 &= 0xc3;                                             /* All COM ports OFF */
  12.    
  13.    
  14.     /* SEG ports control */
  15.     P1 |= 0x3f;
  16.     P0 |= 0xc3;                                             /* All SEG ports OFF */
  17.    
  18.     mydisplaydata[3] = (hour/10)+0x30;
  19.     mydisplaydata[2] = (hour%10)+0x30;
  20.     mydisplaydata[1] = (minute/10)+0x30;
  21.     mydisplaydata[0] = (minute%10)+0x30;
  22.    
  23.     switch (mydisplaydata[s_COM])
  24.     {
  25.         case 0x30: P1 &= 0xc0;                              /* Display "0" */
  26.                    break;
  27.         case 0x31: P1 &= 0xe7;                              /* Display "1" */
  28.                    break;
  29.         case 0x32: P1 &= 0xc9;                              /* Display "2" */
  30.                    P0 &= 0x7f|P0.6;  
  31.                    break;
  32.         case 0x33: P1 &= 0xc3;                              /* Display "3" */
  33.                    P0 &= 0x7f|P0.6;  
  34.                    break;
  35.         case 0x34: P1 &= 0xe6;                              /* Display "4" */
  36.                    P0 &= 0x7f|P0.6;  
  37.                    break;
  38.         case 0x35: P1 &= 0xd2;                              /* Display "5" */
  39.                    P0 &= 0x7f|P0.6;  
  40.                    break;
  41.         case 0x36: P1 &= 0xd0;                              /* Display "6" */
  42.                    P0 &= 0x7f|P0.6;      
  43.                    break;
  44.         case 0x37: P1 &= 0xc7;                              /* Display "7" */
  45.                    break;
  46.         case 0x38: P1 &= 0xc0;                              /* Display "8" */
  47.                    P0 &= 0x7f|P0.6;  
  48.                    break;
  49.         case 0x39: P1 &= 0xc2;                              /* Display "9" */
  50.                    P0 &= 0x7f|P0.6;  
  51.                    break;
  52.           default: break;
  53.     }
  54.    
  55.     P0 |= c_COM_Data[s_COM];                                /* A COM port ON */

  56. }
复制代码

还得说下这个怎么算的,我呈参考手册上说的,但我实现觉得不准,我于是这么干,
15K是固定的,也就是说每计一次数就1/15000=66MS 而1S=1000ms,所以,1000/66 = 15.151515......

那我就记1000次,循环15次。

以下是编译通过截图:




点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
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
快速回复 返回顶部 返回列表