EDN首页   博客首页

最新日志

发表于:2008-10-10 17:53:05
标签:无标签

1

pwm实现24位adc

http://www.tudou.com/v/bhNf1TSAVbw

 

 

pwm实现24位adc

系统分类: ARM   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(118)
发表于:2008-6-29 15:56:26
标签:无标签

1

LPC2148自动波特率的使用

LPC2148自动波特率的使用

今天,发现LPC2148还有自动设置波特率的功能,但开始的时候没有能成功应用。主要原因忘记了设置数据长度,停止位数,奇偶校验位。实际应用代码如何下。

 PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x00000005;//设置p0.1,p0.2为UART的对应管脚
  U0ACR = 0x03;//开启自动波特率的功能
  while((U0ACR&0x01)!=0);//等待设置波特率结束
  U0LCR = 0x83;//设定数据长度位8,停止位位1位,无奇偶校验

以下可以,通过串口向上位机发送数据。

在使用中发现,LPC2148 用户手册中发现以下问题。文档中描述波特率计算公式:

UART baud= Pclk / (16 * (16* UDLM + UDLL) )

但个人觉的应该是下面的:

UART baud= Pclk / (16 * (256* UDLM + UDLL))

在实际的应用中使用如下代码时间,设定波特率。

PINSEL0 = (PINSEL0&0xFFFFFFF0)|0x00000005;
 U0LCR = 0x80;                      
 bak = (Fpclk>>4)/baud;
 U0DLM = bak>>8;
 U0DLL = bak&0xff;

也就印证上面的公式。

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(243)
发表于:2008-6-29 15:54:26
标签:无标签

2

C语言可变参数函数使用总结

C语言可变参数函数使用总结

//ADS1.2下编译使用
void TestFun(char* fmt,...)
{
    int ch;
    char selch = 0;
    va_list ap = NULL;
    va_start(ap, fmt);
    do
    {
        selch = *fmt;
        if (selch!='%')
        {
            putchar(*fmt);
        }
        else
        {
            selch = *++fmt;
            switch(selch)
            {
            case 'c':
                    ch = va_arg(ap, int);
                    printf("%c",ch);
                    break;
            case 'd':
                    ch = va_arg(ap,int);
                    printf("%d",ch);
                    break;
            case 'x':
                    ch = va_arg(ap, int);
                    printf("%#x",ch);
                    break;
            }
        }

        ++fmt;

    }while(*fmt!='\0');

    va_end(ap);    
   }


  //调用
   TestFun((char*)"this is %d,%c,%x",1234,'6',0x12345);

//WIN-TC编译通过
   #i nclude    <stdarg.h>
/************************************************************
typedef void    *va_list;

#define va_start(ap, parmN)    (ap = ...)
#define va_arg(ap, type)    (*((type *)(ap))++)
#define va_end(ap)

********************************************************************/
void TestFun(cosnt char* fmt,...)
{
    int ch;
    long i32value = 0;
    char selch = 0;
    va_list ap = 0;
    va_start(ap, fmt);
    do
    {
        selch = *fmt;
        if (selch!='%')
        {
            putch(*fmt);
        }
        else
        {
            selch = *++fmt;
            switch(selch)
            {
            case 'c':
                    ch = va_arg(ap, int);
                    printf("%c",ch);
                    break;
            case 'd':
                    ch = va_arg(ap,int);
                    printf("%d",ch);
                    break;
            case 'x':
                    ch = va_arg(ap, int);
                    printf("%#x",ch);
                    break;
            case 'l':
                    if(*++fmt== 'd')
                    {
                        i32value = va_arg(ap, long);
                        printf("%ld",i32value);
                    }
                    else
                    {
                        putch('l');

                        if(*fmt!=0)
                        {
                            putch(*fmt);
                        }
                    }
                    break;
            default:
                    break;
            }
        }

        ++fmt;

    }while(*fmt!='\0');

    va_end(ap);   
}   
   
   void    main(void)  
   {
   TestFun("this is %d,%c,%x,%ld",1234,'6',0x2345,(long)12345678);
   getch();
   }

    
   void    main(void)  
   {
      TestFun("this is %d,%c,%x,%ld",1234,(char)'6',0x2345,(long)12345678);
   getch();
   }    

上述的example使用宏定义, var_start(ap, pareN),var_arg(ap,type),var_end(ap).

var_start(ap, pareN) //是ap指向第一个变参.

var_arg(ap,type),//返回变参的实际值.

var_end(ap).//是ap指向空指针.

具体的实现,在不同的编译环境下有所不同.

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(226)
发表于:2008-6-20 14:37:47
标签:无标签

2

二进制的时钟 附源代码

点击下载估计没学过二进制的人要看懂时间有点难啊

based 89c51  proteus单片机仿真

系统分类: 单片机   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(200)
总共 , 当前 /