tag 标签: c30

相关博文
  • 热度 10
    2013-10-8 15:53
    1533 次阅读|
    0 个评论
    在程序中,为了使得代码的通用性好,有时需要根据MCU的型号做一些自适应的调整,这就需要识别当前MCU的型号或者系列。   在C30/XC16中,定义了这样几个有用的宏:   __dsPIC30F__  dsPIC30F target device family. __dsPIC33E__  dsPIC33E target device family. __dsPIC33F__  dsPIC33F target device family. __PIC24E__    PIC24E target device family. __PIC24F__    PIC24FJ target device family. __PIC24FK__   PIC24FK target device family. __PIC24H__    PIC24H target device family. 这些宏可以方便的识别出当前使用MCU的系列。如果还要识别当前的型号,可以使用宏 -mcpu 它代表了当前MCU型号。      
  • 热度 13
    2013-9-16 22:16
    2722 次阅读|
    0 个评论
        在C30中,可以用printf函数,将数据输出到串口。很多PIC24/PIC30/PIC33单片机有两个串口,但是默认情况下,数据是输出到串口1的,怎样将printf输出到串口2呢? 在microchip的网站上有一篇相关的说明,说可以通过重载write函数达到使用串口2的目的。但是这篇文档说的不是很清楚,用起来也不太方便。我研究了一下,其实还有更简单的办法: 在pic的库文件libpic30.zip中,我们可以看到write.c这个文件。write.c中包含了write函数的原型: #include  #include  #include "simio.h"   extern int __C30_UART;   extern volatile UxMODEBITS U2MODEbits __attribute__((__sfr__,weak)); extern volatile UxSTABITS U2STAbits __attribute__((__sfr__,weak)); extern volatile unsigned int U2TXREG __attribute__((__sfr__,weak)); extern volatile unsigned int U2BRG __attribute__((__sfr__,weak));     static void __inline__ dowrite(PSIMIO psimio) {  __asm__(".pword 0xDAC000" :: "a" (psimio) :  "memory"); }   int __attribute__((__weak__, __section__(".libc"))) write(int handle, void *buffer, unsigned int len) {  int i;  volatile UxMODEBITS *umode = U1MODEbits;  volatile UxSTABITS *ustatus = U1STAbits;  volatile unsigned int *txreg = U1TXREG;  volatile unsigned int *brg = U1BRG;    switch (handle)  {    case 0:    case 1:    case 2:      if ((__C30_UART != 1) (U2BRG)) {        umode = U2MODEbits;        ustatus = U2STAbits;        txreg = U2TXREG;        brg = U2BRG;      }      if ((umode-UARTEN) == 0)      {        *brg = 0;        umode-UARTEN = 1;      }      if ((ustatus-UTXEN) == 0)      {        ustatus-UTXEN = 1;      }      for (i = len; i; --i)      {        while ((ustatus-TRMT) ==0);        *txreg = *(char*)buffer++;      }      break;      default: {      SIMIO simio;      register PSIMIO psimio asm("w0") = simio;        simio.method = SIM_WRITE;      simio.u.write.handle = handle;      simio.u.write.buffer = buffer;      simio.u.write.len = len;      dowrite(psimio);      len = simio.u.write.len;      break;    }  }  return(len); }   注意上面用黄色标明的语句,我们可以看到如果(__C30_UART != 1)并且U2BRG(存在串口2),那么就可以将输出转到串口2。而__C30_UART是libpic30内部定义的变量,这样毕竟简单了。 首先定义一个变量: extern int __C30_UART; 通过这个变量就可以灵活的将printf、scanf等标准函数的输入输出定义到需要的串口上。 使用串口1:__C30_UART = 1; 使用串口2:__C30_UART = 2;
相关资源
  • 所需E币: 0
    时间: 2021-4-26 23:51
    大小: 23.8KB
    上传者: Argent
    AI产品层出不穷,手里收藏了有关电子通信,毕业设计等资料,方案诸多,可实施性强。单片机的应用开发,外设的综合运用,纵使智能产品设计多么复杂,但其实现的基本功能都离不开MCU的电路设计与驱动编程,无论是使用51单片机还是AVR单片机,其方案的选择因项目需求而定,需要这方面资料的工程师们,看过来吧。