3083|3

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

有利用单片机实现数据采集之后再串口传输的实例吗? [复制链接]

因为接触单片机应用的时间不常,想看看有没有这方面的实例可以参考的
谢谢啦!!

最新回复

这一版块,太没人气了,是不是大家都成大侠了 如果成大侠了,也常回家看看嘛,家里太冷清了 据说努力顶帖也是一种美德,但我只想大家常回家看看 毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来  详情 回复 发表于 2008-4-4 01:07
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
c8051f020例程



  1. //-----------------------------------------------------------------------------
  2. // Temp_3.c
  3. //-----------------------------------------------------------------------------
  4. // Copyright (C) 2005 Silicon Laboratories, Inc.
  5. //
  6. // AUTH: BW
  7. // DATE: 19 JUL 01
  8. //
  9. // This program prints the C8051F020 die temperature out the hardware
  10. // UART at 9600bps. Assumes an 22.1184MHz crystal is attached between
  11. // XTAL1 and XTAL2.
  12. //
  13. // Target: C8051F02x
  14. // Tool chain: KEIL C51 6.03 / KEIL EVAL C51
  15. //

  16. //-----------------------------------------------------------------------------
  17. // Includes
  18. //-----------------------------------------------------------------------------

  19. #include                  // SFR declarations
  20. #include

  21. //-----------------------------------------------------------------------------
  22. // 16-bit SFR Definitions for 'F02x
  23. //-----------------------------------------------------------------------------

  24. sfr16 DP       = 0x82;                 // data pointer
  25. sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
  26. sfr16 TMR3     = 0x94;                 // Timer3 counter
  27. sfr16 ADC0     = 0xbe;                 // ADC0 data
  28. sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
  29. sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
  30. sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
  31. sfr16 T2       = 0xcc;                 // Timer2
  32. sfr16 RCAP4    = 0xe4;                 // Timer4 capture/reload
  33. sfr16 T4       = 0xf4;                 // Timer4
  34. sfr16 DAC0     = 0xd2;                 // DAC0 data
  35. sfr16 DAC1     = 0xd5;                 // DAC1 data

  36. //-----------------------------------------------------------------------------
  37. // Global CONSTANTS
  38. //-----------------------------------------------------------------------------

  39. #define BAUDRATE     115200            // Baud rate of UART in bps
  40. #define SYSCLK       22118400          // SYSCLK frequency in Hz
  41. #define SAMPLE_RATE  50000             // Sample frequency in Hz
  42. #define INT_DEC      256               // integrate and decimate ratio

  43. sbit LED = P1^6;                       // LED='1' means ON
  44. sbit SW1 = P3^7;                       // SW1='0' means switch pressed

  45. //-----------------------------------------------------------------------------
  46. // Function PROTOTYPES
  47. //-----------------------------------------------------------------------------

  48. void SYSCLK_Init (void);
  49. void PORT_Init (void);
  50. void UART0_Init (void);
  51. void ADC0_Init (void);
  52. void Timer3_Init (int counts);
  53. void ADC0_ISR (void);

  54. //-----------------------------------------------------------------------------
  55. // Global VARIABLES
  56. //-----------------------------------------------------------------------------

  57. long result;                           // ADC0 decimated value

  58. //-----------------------------------------------------------------------------
  59. // MAIN Routine
  60. //-----------------------------------------------------------------------------

  61. void main (void) {
  62.    long temperature;                   // temperature in hundredths of a
  63.                                        // degree C
  64.    int temp_int, temp_frac;            // integer and fractional portions of
  65.                                        // temperature

  66.    WDTCN = 0xde;                       // disable watchdog timer
  67.    WDTCN = 0xad;

  68.    SYSCLK_Init ();                     // initialize oscillator
  69.    PORT_Init ();                       // initialize crossbar and GPIO
  70.    UART0_Init ();                      // initialize UART0
  71.    Timer3_Init (SYSCLK/SAMPLE_RATE);   // initialize Timer3 to overflow at
  72.                                        // sample rate

  73.    ADC0_Init ();                       // init ADC

  74.     AD0EN = 1;                          // enable ADC

  75.    EA = 1;                             // Enable global interrupts

  76.     while (1) {
  77.       EA = 0;                          // disable interrupts
  78.       temperature = result;
  79.       EA = 1;                          // re-enable interrupts

  80.       // calculate temperature in hundredths of a degree
  81.       temperature = temperature - 42380;
  82.       temperature = (temperature * 100L) / 156;
  83.       temp_int = temperature / 100;
  84.       temp_frac = temperature - (temp_int * 100);
  85.        printf ("Temperature is %+02d.%02d\n", temp_int, temp_frac);

  86.       LED = ~SW1;                      // LED reflects state of switch
  87.     }
  88. }

  89. //-----------------------------------------------------------------------------
  90. // SYSCLK_Init
  91. //-----------------------------------------------------------------------------
  92. //
  93. // This routine initializes the system clock to use an 22.1184MHz crystal
  94. // as its clock source.
  95. //
  96. void SYSCLK_Init (void)
  97. {
  98.    int i;                              // delay counter

  99.    OSCXCN = 0x67;                      // start external oscillator with
  100.                                        // 22.1184MHz crystal

  101.    for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)

  102.    while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

  103.    OSCICN = 0x88;                      // select external oscillator as SYSCLK
  104.                                        // source and enable missing clock
  105.                                        // detector
  106. }

  107. //-----------------------------------------------------------------------------
  108. // PORT_Init
  109. //-----------------------------------------------------------------------------
  110. //
  111. // Configure the Crossbar and GPIO ports
  112. //
  113. void PORT_Init (void)
  114. {
  115.    XBR0    = 0x04;                     // Enable UART0
  116.    XBR1    = 0x00;
  117.    XBR2    = 0x40;                     // Enable crossbar and weak pull-ups
  118.    P0MDOUT |= 0x01;                    // enable TX0 as a push-pull output
  119.    P1MDOUT |= 0x40;                    // enable P1.6 (LED) as push-pull output
  120. }

  121. //-----------------------------------------------------------------------------
  122. // UART0_Init
  123. //-----------------------------------------------------------------------------
  124. //
  125. // Configure the UART0 using Timer1, for and 8-N-1.
  126. //
  127. void UART0_Init (void)
  128. {
  129.    SCON0   = 0x50;                     // SCON0: mode 1, 8-bit UART, enable RX
  130.    TMOD    = 0x20;                     // TMOD: timer 1, mode 2, 8-bit reload
  131.    TH1    = -(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
  132.    TR1    = 1;                         // start Timer1
  133.    CKCON |= 0x10;                      // Timer1 uses SYSCLK as time base
  134.    PCON  |= 0x80;                      // SMOD00 = 1
  135.    TI0    = 1;                         // Indicate TX0 ready
  136. }

  137. //-----------------------------------------------------------------------------
  138. // ADC0_Init
  139. //-----------------------------------------------------------------------------
  140. //
  141. // Configure ADC0 to use Timer3 overflows as conversion source, to
  142. // generate an interrupt on conversion complete, and to use left-justified
  143. // output mode.  Enables ADC end of conversion interrupt. Leaves ADC disabled.
  144. //
  145. void ADC0_Init (void)
  146. {
  147.    ADC0CN = 0x05;                      // ADC0 disabled; normal tracking
  148.                                        // mode; ADC0 conversions are initiated
  149.                                        // on overflow of Timer3; ADC0 data is
  150.                                        // left-justified
  151.    REF0CN = 0x07;                      // enable temp sensor, on-chip VREF,
  152.                                        // and VREF output buffer
  153.    AMX0SL = 0x0f;                      // Select TEMP sens as ADC mux output
  154.    ADC0CF = (SYSCLK/2500000) << 3;     // ADC conversion clock = 2.5MHz
  155.    ADC0CF |= 0x01;                     // PGA gain = 2

  156.    EIE2 |= 0x02;                       // enable ADC interrupts
  157. }


复制代码
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
继续



  1. //-----------------------------------------------------------------------------
  2. // Timer3_Init
  3. //-----------------------------------------------------------------------------
  4. //
  5. // Configure Timer3 to auto-reload at interval specified by (no
  6. // interrupt generated) using SYSCLK as its time base.
  7. //
  8. void Timer3_Init (int counts)
  9. {
  10.    TMR3CN = 0x02;                      // Stop Timer3; Clear TF3;
  11.                                        // use SYSCLK as timebase
  12.    TMR3RL  = -counts;                  // Init reload values
  13.    TMR3    = 0xffff;                   // set to reload immediately
  14.    EIE2   &= ~0x01;                    // disable Timer3 interrupts
  15.    TMR3CN |= 0x04;                     // start Timer3
  16. }

  17. //-----------------------------------------------------------------------------
  18. // Interrupt Service Routines
  19. //-----------------------------------------------------------------------------

  20. //-----------------------------------------------------------------------------
  21. // ADC0_ISR
  22. //-----------------------------------------------------------------------------
  23. //
  24. // ADC0 end-of-conversion ISR
  25. // Here we take the ADC0 sample, add it to a running total , and
  26. // decrement our local decimation counter .  When reaches
  27. // zero, we post the decimated result in the global variable .
  28. //
  29. void ADC0_ISR (void) interrupt 15
  30. {
  31.    static unsigned int_dec=INT_DEC;    // integrate/decimate counter
  32.                                        // we post a new result when
  33.                                        // int_dec = 0
  34.    static long accumulator=0L;         // here's where we integrate the
  35.                                        // ADC samples            

  36.    AD0INT = 0;                                  // clear ADC conversion complete
  37.                                        // indicator

  38.     accumulator += ADC0;                // read ADC value and add to running
  39.                                        // total
  40.    int_dec--;                          // update decimation counter

  41.    if (int_dec == 0) {                 // if zero, then post result
  42.       int_dec = INT_DEC;               // reset counter
  43.       result = accumulator >> 8;
  44.       accumulator = 0L;                // reset accumulator
  45.    }
  46. }

复制代码



顺便说说eeworld,这点代码要我分两次发
太不厚道了
f*ck
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
这一版块,太没人气了,是不是大家都成大侠了

如果成大侠了,也常回家看看嘛,家里太冷清了

据说努力顶帖也是一种美德,但我只想大家常回家看看

毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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