3787|7

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机用定时写流水 [复制链接]

初学单片机中断定时感觉什么也不懂,哪位能帮我写个用定时的流水灯!(要用汇编写)

最新回复

太简单了,不好意思写哦,楼主还不知道如何调试吧?   详情 回复 发表于 2009-10-28 15:56
点赞 关注

回复
举报

126

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我也是新手,我觉得这样的程序网上一大把奥
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
帮顶
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
很简单的吧???
先确定它是什么样的行为,然后找个合适的MCU,然后就可以写程序了........
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
网上是一大把但是都是用延时写的,我要用定时的
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
现在谁还用汇编啊??

  1. //-----------------------------------------------------------------------------
  2. // T2Cal31x.c
  3. //-----------------------------------------------------------------------------
  4. // 版权归新华龙电子有限公司所有
  5. //
  6. // 作者:Robi Ken
  7. // 日期: 2004.12.30
  8. //
  9. // 功能:使用片内温度传感器实验
  10. // 目标板: C8051F31x
  11. // 开发工具: Silicon Laboratories  IDE

  12. //-----------------------------------------------------------------------------
  13. // 头文件定义
  14. //-----------------------------------------------------------------------------

  15. #include                  
  16. #include
  17. #include

  18. //-----------------------------------------------------------------------------
  19. // F31x’定时器2的16位SFR
  20. //-----------------------------------------------------------------------------

  21. sfr16 DP       = 0x82;                 
  22. sfr16 TMR2RL   = 0xca;                 
  23. sfr16 TMR2     = 0xcc;                 
  24. sfr16 TMR3     = 0x94;                 
  25. sfr16 TMR3RL   = 0x92;                 
  26. sfr16 PCA0CP0  = 0xfb;                 
  27. sfr16 PCA0CP1  = 0xe9;                 
  28. sfr16 PCA0CP2  = 0xeb;               
  29. sfr16 PCA0CP3  = 0xed;                 
  30. sfr16 PCA0CP4  = 0xfd;               
  31. sfr16 PCA0     = 0xf9;                 
  32. sfr16 ADC0     = 0xbd;                 
  33. sfr16 ADC0GT   = 0xc3;                 
  34. sfr16 ADC0LT   = 0xc5;                 

  35. //-----------------------------------------------------------------------------
  36. // 定义常数
  37. //-----------------------------------------------------------------------------

  38. #define SYSCLK      24500000           
  39. #define BAUDRATE        9600           
  40. #define TIMER2_RATE     1000           


  41. sbit LED = P3^3;                       
  42. //-----------------------------------------------------------------------------
  43. // 温度传感器参数
  44. //-----------------------------------------------------------------------------
  45. #define AMB_TEMP           25         
  46.                                        

  47. #define TEMP_SENSOR_GAIN   3300        

  48. #define VREF               3300        

  49. #define SOAK_TIME          15         


  50. //-----------------------------------------------------------------------------
  51. // 全局变量
  52. //-----------------------------------------------------------------------------


  53. unsigned int code TEMP_OFFSET = 0xFFFF;

  54. //-----------------------------------------------------------------------------
  55. // 功能函数
  56. //-----------------------------------------------------------------------------

  57. void SYSCLK_Init (void);
  58. void ADC0_Init (void);
  59. void UART0_Init (void);
  60. void PORT_Init (void);
  61. void Timer2_Init (int);

  62. int get_temp (void);
  63. void calibrate(void);
  64. unsigned int measure(void);
  65. void wait_one_second (void);

  66. //-----------------------------------------------------------------------------
  67. // 主程序
  68. //-----------------------------------------------------------------------------

  69. void main (void) {

  70.    unsigned temperature;

  71.    
  72.    PCA0MD &= ~0x40;                    // 禁止看门狗
  73.                                        
  74.    PORT_Init();                        
  75.    SYSCLK_Init ();                     

  76.    ADC0_Init ();                       
  77.    Timer2_Init(SYSCLK/TIMER2_RATE);   
  78.    UART0_Init();

  79.    AD0EN = 1;                          // 使能 ADC0

  80.    if (TEMP_OFFSET == 0xFFFF) {        
  81.       printf ("Calibrating...\n");
  82.       calibrate ();                    
  83.    } else {
  84.       printf ("Not calibrating.\n");
  85.    }

  86.    while (1) {
  87.       
  88.       LED = 1;
  89.       temperature = get_temp ();
  90.       LED = 0;
  91.       printf ("Temperature = %+02d hundredths degrees C\n", temperature);
  92.    }
  93. }

  94. //-----------------------------------------------------------------------------
  95. // 初始化子程序
  96. //-----------------------------------------------------------------------------

  97. //-----------------------------------------------------------------------------
  98. // 端口初始化
  99. //-----------------------------------------------------------------------------
  100. //
  101. // P0.4 - UART TX
  102. // P0.5 - UART RX
  103. // P3.3 - LED

  104. void PORT_Init (void)
  105. {
  106.    XBR0    = 0x01;                                          
  107.    XBR1    = 0x40;                     
  108.                                        
  109.    P0MDOUT |= 0x10;                    
  110.    P3MDOUT |= 0x08;                    
  111. }

  112. //-----------------------------------------------------------------------------
  113. // 系统时钟初始化
  114. //-----------------------------------------------------------------------------


  115. void SYSCLK_Init (void)
  116. {
  117.    OSCICN |= 0x03;                     
  118.                                        
  119.    RSTSRC = 0x04;                     
  120. }

  121. //-----------------------------------------------------------------------------
  122. // ADC初始化
  123. //-----------------------------------------------------------------------------


  124. void ADC0_Init (void)
  125. {
  126.    ADC0CN = 0x40;                     
  127.                                        
  128.                                        
  129.    AMX0P  = 0x1E;                     
  130.    AMX0N  = 0x1F;                     

  131.    ADC0CF = (SYSCLK/3000000) << 3;        

  132.    ADC0CF &= ~0x04;                    
  133.    REF0CN = 0x0e;                     
  134.                                        

  135.    EIE1 &= ~0x08;                      // 禁止 ADC0 EOC 中断
  136. }

  137. //-----------------------------------------------------------------------------
  138. // 串口初始化
  139. //-----------------------------------------------------------------------------


  140. void UART0_Init (void)
  141. {
  142.    SCON0 = 0x10;                     
  143.                                        
  144.                                        
  145.                                        
  146.                                        
  147.    if (SYSCLK/BAUDRATE/2/256 < 1) {
  148.       TH1 = -(SYSCLK/BAUDRATE/2);
  149.       CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
  150.       CKCON |=  0x08;
  151.    } else if (SYSCLK/BAUDRATE/2/256 < 4) {
  152.       TH1 = -(SYSCLK/BAUDRATE/2/4);
  153.       CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01                  
  154.       CKCON |=  0x09;
  155.    } else if (SYSCLK/BAUDRATE/2/256 < 12) {
  156.       TH1 = -(SYSCLK/BAUDRATE/2/12);
  157.       CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
  158.    } else {
  159.       TH1 = -(SYSCLK/BAUDRATE/2/48);
  160.       CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
  161.       CKCON |=  0x02;
  162.    }

  163.    TL1 = TH1;                          
  164.    TMOD &= ~0xf0;                     
  165.    TMOD |=  0x20;                       
  166.    TR1 = 1;                           
  167.    TI0 = 1;                           
  168. }

  169. //-----------------------------------------------------------------------------
  170. // 系统时钟2中断
  171. //-----------------------------------------------------------------------------

  172. void Timer2_Init (int counts)
  173. {
  174.    TMR2CN = 0x00;                      // 停止 Timer2; 清除 TF2H 和 TF2L;
  175.                                        
  176.                                        
  177.    CKCON |= 0x10;                     

  178.    TMR2RL  = -counts;                  
  179.    TMR2    = TMR2RL;                  
  180.    ET2 = 0;                            // 禁止定时器2中断
  181.    TR2 = 1;                           
  182. }


  183. //-----------------------------------------------------------------------------
  184. // 等待结束
  185. //-----------------------------------------------------------------------------

复制代码
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
大哥你用C语言我看不懂啊,汇编刚学,C语言还没入门呢!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
太简单了,不好意思写哦,楼主还不知道如何调试吧?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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