cpubbs 日志(2) - cpubbs虚拟仪器论坛 - cpubbs论坛免费虚拟仪器博客 labview虚拟仪器讨论区 - cpubbs论坛 虚拟仪器论坛|labview论坛|labwindows论坛|vi|cvi|数据采集卡|入门教程|初学|软件下载|虚拟仪器免费博客|虚拟仪器电子商务|虚拟仪器商城|虚拟仪器人才中心|图形化单片机编程cpuview|虚拟仪器在线商城 - Powered by X-Space
cpubbs论坛,专业的labview,labwindows,虚拟仪器数据采集卡交流论坛,免费博客,人才中心,电子商贸,欢迎您的光临!

发布新日志

  • 常用电阻值[转贴]

    2008-03-19 21:23:48

    转贴自:

    http://www.c51bbs.com/c51bbs/topic/c51bbs721694.htm

     

    精度为5%的碳膜电阻,以欧姆为单位的标称值:
    1.0    5.6    33     160     820      3.9K     20K     100K     510K     2.7M 
    1.1    6.2    36     180     910      4.3K     22K     110K     560K     3M 
    1.2    6.8    39     200     1K       4.7K     24K     120K     620K     3.3M 
    1.3    7.5    43     220     1.1K     5.1K     27K     130K     680K     3.6M 
    1.5    8.2    47     240     1.2K     5.6K     30K     150K     750K     3.9M 
    1.6    9.1    51     270     1.3K     6.2K     33K     160K     820K     4.3M 
    1.8    10     56     300     1.5K     6.6K     36K     180K     910K     4.7M 
    2.0    11     62     330     1.6K     7.5K     39K     200K     1M       5.1M 
    2.2    12     68     360     1.8K     8.2K     43K     220K     1.1M     5.6M 
    2.4    13     75     390     2K       9.1K     47K     240K     1.2M     6.2M 
    2.7    15     82     430     2.2K     10K      51K     270K     1.3M     6.8M 
    3.0    16     91     470     2.4K     11K      56K     300K     1.5M     7.5M 
    3.3    18     100    510     2.7K     12K      62K     330K     1.6M     8.2M 
    3.6    20     110    560     3K       13K      68K     360K     1.8M     9.1M 
    3.9    22     120    620     3.2K     15K      75K     390K     2M       10M 
    4.3    24     130    680     3.3K     16K      82K     430K     2.2M     15M 
    4.7    27     150    750     3.6K     18K      91K     470K     2.4M     22M 
    5.1    30   
    精度为1%的金属膜电阻,以欧姆为单位的标称值: 

    10      33      100    332    1K       3.32K    10.5K    34K      107K    357K 
    10.2    33.2    102    340    1.02K    3.4K     10.7K    34.8K    110K    360K 
    10.5    34      105    348    1.05K    3.48K    11K      35.7K    113K    365K 
    10.7    34.8    107    350    1.07K    3.57K    11.3K    36K      115K    374K 
    11      35.7    110    357    1.1K     3.6K     11.5K    36.5K    118K    383K 
    11.3    36      113    360    1.13K    3.65K    11.8K    37.4K    120K    390K 
    11.5    36.5    115    365    1.15K    3.74K    12K      38.3K    121K    392K 
    11.8    37.4    118    374    1.18K    3.83K    12.1K    39K      124K    402K 
    12      38.3    120    383    1.2K     3.9K     12.4K    39.2K    127K    412K 
    12.1    39      121    390    1.21K    3.92K    12.7K    40.2K    130K    422K 
    12.4    39.2    124    392    1.24K    4.02K    13K      41.2K    133K    430K 
    12.7    40.2    127    402    1.27K    4.12K    13.3K    42.2K    137K    432K 
    13      41.2    130    412    1.3K     4.22K    13.7K    43K      140K    442K 
    13.3    42.2    133    422    1.33K    4.32K    14K      43.2K    143K    453K 
    13.7    43      137    430    1.37K    4.42K    14.3K    44.2K    147K    464K 
    14      43.2    140    432    1.4K     4.53K    14.7K    45.3K    150K    470K 
    14.3    44.2    143    442    1.43K    4.64K    15K      46.4K    154K    475K 
    14.7    45.3    147    453    1.47K    4.7K     15.4K    47K      158K    487K 
    15      46.4    150    464    1.5K     4.75K    15.8K    47.5K    160K    499K 
    15.4    47      154    470    1.54K    4.87K    16K      48.7K    162K    511K 
    15.8    47.5    158    475    1.58K    4.99K    16.2K    49.9K    165K    523K 
    16      48.7    160    487    1.6K     5.1K     16.5K    51K      169K    536K 
    16.2    49.9    162    499    1.62K    5.11K    16.9K    51.1K    174K    549K 
    16.5    51      165    510    1.65K    5.23K    17.4K    52.3K    178K    560K 
    16.9    51.1    169    511    1.69K    5.36K    17.8K    53.6K    180K    562K 
    17.4    52.3    174    523    1.74K    5.49K    18K      54.9K    182K    576K 
    17.8    53.6    178    536    1.78K    5.6K     18.2K    56K      187K    590K 
    18      54.9    180    549    1.8K     5.62K    18.7K    56.2K    191K    604K 
    18.2    56      182    560    1.82K    5.76K    19.1K    57.6K    196K    619K 
    18.7    56.2    187    562    1.87K    5.9K     19.6K    59K      200K    620K 
    19.1    57.6    191    565    1.91K    6.04K    20K      60.4K    205K    634K 
    19.6    59      196    578    1.96K    6.19K    20.5K    61.9K    210K    649K 
    20      60.4    200    590    2K       6.2K     21K      62K      215K    665K 
    20.5    61.9    205    604    2.05K    6.34K    21.5K    63.4K    220K    680K 
    21      62      210    619    2.1K     6.49K    22K      64.9K    221K    681K 
    21.5    63.4    215    620    2.15K    6.65K    22.1K    66.5K    226K    698K 
    22      64.9    220    634    2.2K     6.8K     22.6K    68K      232K    715K 
    22.1    66.5    221    649    2.21K    6.81K    23.2K    68.1K    237K    732K 
    22.6    68      226    665    2.26K    6.98K    23.7K    69.8K    240K    750K 
    23.2    68.1    232    680    2.32K    7.15K    24K      71.5K    243K    768K 
    23.7    69.8    237    681    2.37     7.32K    24.3K    73.2K    249K    787K 
    24      71.5    240    698    2.4K     7.5K     24.9K    75K      255K    806K 
    24.3    73.2    243    715    2.43K    7.68K    25.5K    76.8K    261K    820K 
    24.7    75      249    732    2.49K    7.87K    26.1K    78.7K    267K    825K 
    24.9    75.5    255    750    2.55K    8.06K    26.7K    80.6K    270K    845K 
    25.5    76.8    261    768    2.61K    8.2K     27K      82K      274K    866K 
    26.1    78.7    267    787    2.67K    8.25K    27.4K    82.5K    280K    887K 
    26.7    80.6    270    806    2.7K     8.45K    28K      84.5K    287K    909K 
    27      82      274    820    2.74K    8.66K    28.7K    86.6K    294K    910K 
    27.4    82.5    280    825    2.8K     8.8K     29.4K    88.7K    300K    931K 
    28      84.5    287    845    2.87K    8.87K    30K      90.9K    301K    953K 
    28.7    86.6    294    866    2.94K    9.09K    30.1K    91K      309K    976K 
    29.4    88.7    300    887    3.0K     9.1K     30.9K    93.1K    316K    1.0M 
    30      90.9    301    909    3.01K    9.31K    31.6K    95.3K    324K    1.5M 
    30.1    91      309    910    3.09K    9.53K    32.4K    97.6K    330K    2.2M 
    30.9    93.1    316    931    3.16K    9.76K    33K      100K     332K     
    31.6    95.3    324    953    3.24K    10K      33.2K    102K     340K     
    32.4    97.6    330    976    3.3K     10.2K    33.6K    105K     348K   

  • AD7705的Meag16单片机源程序[转贴]

    2008-03-05 19:27:03

    原贴地址:

    http://www.51xueshu.com/html/20/396.html

     

    这是在用的AD7705源程序,基于Meag16单片机,共享给用到AD7705的各位。希望大家相互学习,相互交流。
    ------------AD7705头文件开始-------------------
    #ifndef _AD7705_H
    #define _AD7705_H

    //
    通讯寄存器地址定义
    #define    WR_SETUP_REG       0x10  //
    选中写设置寄存器
    #define    RD_SETUP_REG       0x18  //
    选中写设置寄存器
    #define    WR_CLOCK_REG    0x20  //
    选中写时钟寄存器
    #define RD_DATA_REG        0x38  //
    选中数据寄存器读
    #define    WR_OFFSET_REG     0x60  //
    选中写offset寄存器
    #define    RD_OFFSET_REG     0x68  //
    选中读offset寄存器
    #define    WR_FULL_REG       0x70  //
    选中写full scale寄存器
    #define    RD_FULL_REG       0x78  //
    选中读full scale寄存器

    #define    SYS_ZERO_CALI    0x80  //
    系统零校准模式
    #define    SYS_FULL_CALI    0xC0  //
    系统满量程校准模式

    #define ZERO_CALIBRATION   0x00 //
    系统零校准
    #define FULL_CALIBRATION   0x01 //
    系统满量程校准

    //CLOCK
    寄存器设置,无分频,50HZ输出更新速率
    #define CLOCK_REG_SET   0X04

    //
    函数声明
    void reset_AD7705(void);

    unsigned char read_AD7705_byte(void);
    unsigned int  read_AD7705_word(void);
    unsigned long int read_AD7705_dword(void);

    void write_AD7705_byte(unsigned char data);
    void write_AD7705_word(unsigned int data);
    void write_AD7705_dword(unsigned long int data);

    void ReadData7705(unsigned int *const pdata);
    void AD7705_calibration(void);
    void start_AD7705(void);

    #endif

    -----------AD7705主文件开始--------------
    #include <util/delay.h>
    #include <avr/eeprom.h>
    #include "ad7705.h"
    #include "main.h"
    #include "crc16.h"
    #include "Usart.h"

    //
    针对四个量程的设置寄存器的设置内容
    //
    1)对于单极性V级别输入0-5V0-20mA0-10V这三个量程,输入范围为0-2V,无极性,增益为1,缓冲模式--0-2V
    //
    2)对于双极性V级别输入+-2.5V+-5V这两个量程,输入范围为+-1V,双极性,增益为2,缓冲模式--+-2V
    //
    3)对于双精度mV级别输入+-500mV,增益为4,双极性,缓冲模式--+-2V
    //
    4)对双精度mV级别+-50mV,增益为32,双极性,缓冲模式--+-1.6V
    //----MD1(0)   MD0(0)   G2(0)   G1(0)   G0(0)   B/U(0)   BUF(0)   FSYNC(0)--------------------//
    const unsigned char text_of_setup[4]={0X06,0X0A,0X12,0X2A}; //
    缓冲模式,数字滤波同步

    extern volatile unsigned char  command[7];   //
    校准命令全局数组
    extern volatile unsigned char  scale;        //
    记录系统量程
    extern volatile unsigned char  NO_CALI_TYPE; //
    未校准类型
    extern volatile unsigned long  int ZS,GS;   //
    当前量程的校准系数
    extern volatile unsigned char  time_count;   //
    超时标志

    //----------------------------------------------------------------------------
    //
    函数:reset_AD7705
    //
    功能:AD7705串行接口失步后将其复位。复位后要延时500us再访问
    //
    参数:无
    //
    返回:无
    //
    变量:无
    //
    备注:无
    //----------------------------------------------------------------------------
    void reset_AD7705(void)
    {
         unsigned char i;
         
         AD_DIN1;
         for( i=0; i<36; i++ )
         {
             AD_CLK0;
             asm("nop");
             asm("nop");
             asm("nop");         
             AD_CLK1;
             asm("nop");
             asm("nop");
             asm("nop");         
         }     
         _delay_us(30);
    }

    //------------------------------------------------------------------------------------------
    //
    函数:read_AD7705_byte
    //
    功能:从AD7705读一个字节的数据
    //
    参数:无
    //
    返回:读到的一字节数据
    //
    变量:无
    //
    备注:无
    //------------------------------------------------------------------------------------------
    unsigned char read_AD7705_byte(void)
    {
         unsigned char data = 0;
         unsigned char i = 0;
         
         for( i=0; i<8; i++ )
         {
             data <<= 1;
             AD_CLK0;         
             asm("nop");
             asm("nop");
             asm("nop");
             if(AD_DOUT)
             {
                 data++;
             }
             AD_CLK1;         
             asm("nop");
             asm("nop");
             asm("nop");
         }     
         return data;    
    }

    //------------------------------------------------------------------------------------------
    //
    函数:read_AD7705_word
    //
    功能:从AD7705读一个字的数据,共16bit
    //
    参数:无
    //
    返回:读到的一字节数据
    //
    变量:无
    //
    备注:无
    //------------------------------------------------------------------------------------------
    unsigned int read_AD7705_word(void)
    {
         unsigned int data = 0;
         unsigned char i = 0;
         
         for( i=0; i<16; i++ )
         {
             data <<= 1;
             AD_CLK0;         
             asm("nop");
             asm("nop");
             asm("nop");
             if(AD_DOUT)
             {
                 data++;
             }
             AD_CLK1;         
             asm("nop");
             asm("nop");
             asm("nop");
         }     
         return data;    
    }


    //------------------------------------------------------------------------------------------
    //
    函数:read_AD7705_dword
    //
    功能:从AD7705读一个24的数据
    //
    参数:无
    //
    返回:读到的一字节数据
    //
    变量:无
    //
    备注:AD7705是一个16AD
    //------------------------------------------------------------------------------------------
    unsigned long int read_AD7705_dword(void)
    {
         unsigned long data = 0;
         unsigned char i = 0;
         
         for( i=0; i<24; i++ )
         {
             data <<= 1;
             AD_CLK0;         
             asm("nop");
             asm("nop");
             asm("nop");
             if(AD_DOUT)
             {
                  data++;
             }
             AD_CLK1;         
             asm("nop");
             asm("nop");
             asm("nop");
         }     
         return data;    
    }


    //------------------------------------------------------------------------------------------
    //
    函数:write_AD7705_byte
    //
    功能:往AD77058位数据
    //
    参数:IN - uint8_t  data,要写入AD7705的数据
    //
    返回:无
    //
    变量:无
    //
    备注:无
    //------------------------------------------------------------------------------------------
    void write_AD7705_byte(unsigned char data)
    {
         for(unsigned char i=0; i<8; i++)
         {
             AD_CLK0;
             if(data&0x80)
                 AD_DIN1;
             else
                 AD_DIN0;         
             asm("nop");
             asm("nop");
             asm("nop");
             AD_CLK1;         
             asm("nop");
             asm("nop");
             asm("nop");
             data <<= 1;
         }     
         AD_DIN1;     
    }

    //------------------------------------------------------------------------------------------
    //
    函数:write_AD7705_dword
    //
    功能:往AD770524位数据,因为AD770524位的器件
    //
    参数:IN - int32_t  data,要写入AD7705的数据
    //
    返回:无
    //
    变量:无
    //
    备注:无
    //------------------------------------------------------------------------------------------
    void write_AD7705_dword(unsigned long int data)
    {
        for(unsigned char i = 0; i<24; i++)
        {
             AD_CLK0;
             if(data&0x800000)
                 AD_DIN1;
             else
                 AD_DIN0;         
             asm("nop");
             asm("nop");
             asm("nop");
             AD_CLK1;         
             asm("nop");
             asm("nop");
             asm("nop");
             data <<= 1;
         }     
         AD_DIN1;
    }

    //------------------------------------------------------------------------------------------
    //
    函数:AD7705_calibration
    //
    功能:根据cali_type的值对AD7705进行系统0校正或系统满量程校正,并将各校正值和校正标志存入
    //      EEPROM
    ,数据保存为双备份。数据块格式为: 内部0校正值(4byte), 内部满量程校正值(4byte),
    //         
    系统0校正值(4byte), 系统满量程校正值(4byte), 系统0校正标志(1byte),系统满量程校正标志
    //      (1byte),CRC16
    校验值(2byte),共20byte
    //
    参数:IN - uint8_t board, 0 对主板进行校正,1-对副板进行校正
    //        IN - uint8_t range,
    需要校正的量程
    //      IN - uint8_t cali_type,
    校正类型,ZERO_CALIBRATION 0校正;
    //           FULL_CALIBRATION
    满量程校正
    //
    返回:返回-1表示校准失败,非0表示校正成功,并返回相应的索引值
    //
    变量:无
    //
    备注:做满量程校正前必须先做零校正
    //------------------------------------------------------------------------------------------
    //
    校准命令格式    
    //STX    Data Long    Command Code    Parameter    CheckSum    ETX
    //0x55    
    数据长度(2    量程指示    00H/01H        CRC16(2)    0x0D
    //
    //
    校准过程中要用到Command[]的数据,所以校准之前要关掉串口接收中断

    void AD7705_calibration(void)
    {
         //
    记录读取EEPROM的次数
         unsigned char readtimes =0;
         
         //
    记录上位机发送的校准量程类型
         unsigned char cali_scale =0;
         
         //
    读取24位校准系数的临时变量
         unsigned long int temp =0;
         
         //
    临时的校准系数数组,存放格式ZSLZSMZSHGSLGSMGSHCRCLCRCH
         //
    并在校准结束时作为参数传递给TXOUT()函数,发送校准系数给上位机
         unsigned char coefficient[8] ={0}; //test[8]={0};
         
         //16
    位校验和的临时变量
         unsigned int crcvalue =0;
         
         AD_CS1;
         
         cali_scale = command[2]; //
    获取上位机发送的要校准的量程类型
           
         //
    读取EEPROM的第一份校准系数
         eeprom_busy_wait();
         eeprom_read_block( &coefficient[0], (void*)(ADDR_EEPROM_1+(cali_scale-1)*10), 8 );
         crcvalue = checksum( &coefficient[0], 6 ); //
    6个值调用CRC校验函数得到校验
         if( (coefficient[7]*256+coefficient[6]) != crcvalue )
         {
             readtimes++;        
         }
         
         //
    如果校准系数不可用则读取第二份
         if( 1 == readtimes )
         {
             eeprom_busy_wait();
             eeprom_read_block( &coefficient[0], (void*)(ADDR_EEPROM_2+(cali_scale-1)*10), 8 );
             crcvalue = checksum( &coefficient[0], 6 ); //
    6个值调用CRC校验函数得到校验
             if( (coefficient[7]*256+coefficient[6]) != crcvalue )
             {
                 readtimes++;             
             }
         }<

  • AD7705应用 C51源程序[转贴]

    2008-03-05 19:16:55

    转贴自:

    http://blog.sina.com.cn/s/print_4ee752d601000fhx.html

     

    源程序有很多不妥之处:1、程序中电压结果换算不好,没用“%”取余方法 2、没有对最小精度进行换,方法是2.5/65535=38.14uV,然后用T_Voltage*38.14uV。另有问题请指出;希望大家能共享自己的原创,谢谢!游客说AD7710源程序与此差不多,不知是否能帮得上忙。

    #include<reg52.h>
    #include<absacc.h>
    #include<intrins.h>
    #include<math.h>
     
    sbit Number_BIT0 = P2^7;
    sbit Number_BIT1 = P2^6;
    sbit Number_BIT2 = P2^5;
    sbit Number_BIT3 = P2^4;
    sbit BUZZER = P2^3;

    sbit AD7705_DATA=P3^0;       // AD7705 input & output data
    sbit AD7705_CLK=P3^1;        // AD7705 CLK

    sbit AD7705_DRDY=P1^2;       // AD7705 data ready
    sbit AD7705_CS  =P1^3;       // AD7705 CS

    unsigned char Counter,dis_index,dis_digit;
    unsigned int T_Voltage;
    unsigned char MSB_Data,LSB_Data,temp0,temp1,temp2,temp3,temp4,temp5;

    unsigned char code Display_code[11]=
    //{0xa0,0xF9,0xc4,0xd0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,};
    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};

    void Delayms(unsigned char ms);
    void AD7705_Start();
    void AD7705_Read ();
    void AD7705_Write_Reg(unsigned char Data_byte);
    unsigned char AD7705_Read_Reg();

    main()
    {
     TMOD = 0x11;
     IT0 = 1;
     PCON=0X00;
     ET0 = 1;
     TH1 = 0xFC;
     TL1 = 0x17;
        TR0 = 1;
            
     EA = 1; 
     P0 = 0xff; P1 = 0xff; P2 = 0xf7; P3 = 0xff;
     dis_digit = 0x77;
     dis_index = 0;
     Counter  = 0;
     AD7705_Start();
     
     while(1)
     {
     while(AD7705_DRDY);
        AD7705_Read();
     Delayms(50);
     }
    }

    void Delayms(unsigned char ms) 
    // relay ms
    { unsigned char i;
     while(ms--)
     {
      for(i = 0; i < 120; i++);
     }
    }

    void AD7705_Start()
    {
     AD7705_Write_Reg(0x20);
     AD7705_Write_Reg(0x0c);
     AD7705_Write_Reg(0x10);
     AD7705_Write_Reg(0x44);
    }

    void AD7705_Read()
    {
     AD7705_Write_Reg(0x38);
     MSB_Data = AD7705_Read_Reg();
     LSB_Data = AD7705_Read_Reg();
     T_Voltage =(unsinged int)MSB_Data;
     T_Voltage = T_Voltage<<8;
     T_Voltage = T_Voltage | (unsigned int)LSB_Data;

     temp0 = T_Voltage/100000;
     temp1 = ((T_Voltage-temp0*100000)/10000);
     temp2 = ((T_Voltage-temp0*100000-temp1*10000)/1000);
     temp3 = ((T_Voltage-temp0*100000-temp1*10000-temp2*1000)/100);
     temp4 = (T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100)/10;
     temp5 = (T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100-temp4*10);

    }

    void AD7705_Write_Reg(unsigned char Data_byte)

     unsigned char i;
     AD7705_CS = 0;
     AD7705_CLK = 1;
            _nop_();
      _nop_();
     for(i = 0; i < 8; i++) 
     {
         AD7705_DATA = (bit)(Data_byte & 0x80);
      AD7705_CLK = 0;
            _nop_();
      _nop_();
      _nop_();
      AD7705_CLK = 1;
          
         Data_byte <<= 1;
     }
      _nop_();
      AD7705_CS = 1;
    }
    unsigned char AD7705_Read_Reg()

     unsigned char i,Data_read;
     AD7705_CS = 0;
     AD7705_CLK = 1;
         _nop_();
     for(i = 0; i < 8; i++) 
     {
         AD7705_CLK = 0;
            _nop_();
         _nop_();
      Data_read <<= 1;
      Data_read |= (unsigned char)AD7705_DATA;
      _nop_();
      _nop_();
            AD7705_CLK = 1;
            _nop_();
         _nop_();
     }
       _nop_();
      AD7705_CS = 1;
      AD7705_DRDY = 1;
      return(Data_read);
    }

    void time0(void) interrupt 1
    {
     TR0 = 0;
     P2 = dis_digit;   //P2.7 --DS8
     P0 = Display_code[dis_index];
       
     TH0 = 0xFC;
     TL0 = 0x17;
     Counter++;
     if(Counter==1)
     {
     dis_digit = 0x77;
      dis_index = temp5;
        }else if(Counter==2)
     {
     dis_digit = 0xb7;
      dis_index = temp4;
     }else if(Counter==3)
     {
     dis_digit = 0xd7;
      dis_index = temp3;
     }else if(Counter==4)
     {
     dis_digit = 0xe7;
      dis_index = temp2;
     Counter = 0;
     }
     
        TR0 = 1;
    }

  • AD7707 PIC程序

    2008-03-03 21:29:29

    原贴地址:

    http://user.chol.com/smarty/bbs/bbs.php?page=4&id=ascbbs&db=homefirmware&s_category=&s_type=&s_keyword=&p=view&uid=44

     

    // Driver routines for the AD7707 chip

    #define AD7707_DRDY PIN_B0
    #define AD7707_DO PIN_B1
    #define AD7707_DI PIN_B2
    #define AD7707_CLK PIN_C0
    #define AD7707_CS PIN_C1
    #define AD7707_RESET PIN_C2

    void AD7707_write_byte(byte data)
    {
    byte i;

    output_low(AD7707_CS);

    for(i=1;i<=8;++i) {
    output_low(AD7707_CLK);
    output_bit(AD7707_DI, shift_left(&data,1,0));
    output_high(AD7707_CLK);
    }
    output_high(AD7707_CS);
    }

    void AD7707_init()
    {

    output_low(AD7707_RESET);
    output_high(AD7707_CLK);
    output_high(AD7707_RESET); //Set high to AD7715 reset low pin
    output_high(AD7707_CS); //Set low to AD7715 chip select low pin
    delay_ms(100);

    //0DRDY/RS2/RS1/RS0/RW/STBY/CH1/CH0
    // 0 / 0 / 1 / 0 /0 / 0 / 1 / 1 // 0x13 : Ch3狼 clock write operation
    AD7707_write_byte(0x23); //Communications Register
    //zero/zero/clkdis/clkdiv/clk/fs2/fs1/fs0
    // 0 / 0 / 0 / 1 / 0 / 0 / 0 / 0
    AD7707_write_byte(0x10); //Clock Register

    //0DRDY/RS2/RS1/RS0/RW/STBY/CH1/CH0
    // 0 / 0 / 0 / 1 /0 / 0 / 1 / 1 // 0x13 : Ch3狼 setup register write operation
    AD7707_write_byte(0x13); //Communications Register
    // MD1/MD0/G2/G1/G0/BU/BUF/FSYNC
    // 0 / 1 / 0/ 0/ 0/ 0/ 0 / 0 // Gain=1 bipolar, buffer off,
    AD7707_write_byte(0x40); // Setup register

    while(input(AD7707_DRDY));
    }

    long int AD7707_read_word(void)
    {
    byte i;
    long data;

    output_low(AD7707_CS);
    for(i=1;i<=16;++i) {
    output_low(AD7707_CLK);
    output_high(AD7707_CLK);
    shift_left(&data,2,input(AD7707_DO));
    }
    output_high(AD7707_CS);
    return data;
    }

    long int AD7707_read_value(void)
    {
    //0DRDY/RS2/RS1/RS0/RW/STBY/CH1/CH0
    // 0 / 0 / 1 / 1 /1 / 0 / 1 / 1 // 0x38 : Ch3狼 Data Register read operation
    AD7707_write_byte(0x3B); // Data Register ch3 read operation
    while(input(AD7707_DRDY));

    return AD7707_read_word();
    }

  • 老和尚:我早已经把她放下了,你怎么还没放下呢

    2008-02-20 20:03:59

    有一个故事,说一个老和尚带着小和尚去化缘,路过一座小桥,桥很长而桥面很窄,只能通过一个人。当他们走到桥中间时,发现对面走来一个少妇,在无路可退的情况下,老和尚便抱起少妇将她送回桥的那一头,之后继续上路化缘。又走了一程,小和尚突然问老和尚:“师傅,出家人不是男女授受不亲么?你为什么还抱那个女人呢?”师傅听了大笑起来:“你是说桥上那个妇女么,我早已经把她放下了,你怎么还没放下呢?”

        是的,现实中,我们很多时候并不是遇到的事情有多么复杂,而是自己放不下!其实,想开了,想通了,自然就释然了。一个朋友打过这样一个比方,他说,在遇到一个自己认为很大很麻烦很费劲的事情时,感觉就像到了一座大山前,抬头看时,阴天蔽日,高不可攀,何时才能跨过去啊?可是,等事情过了,回头看时,不过一个小土堆而已!多么形象而富有哲理的比方啊!只要把凡事看淡,正像有句话所说,没有过不去的火焰山!

        人的愿望有时就那么简单,那么容易满足,而很多时候,人是多么不知足啊。红楼梦《好了歌》云:世人都晓神仙好,惟有功名忘不了!古今将相在何方?荒冢一堆草没了。世人都晓神仙好,只有金银忘不了!终朝只恨聚无多,及到多时眼闭了……把凡事看淡,就不会耿耿于怀;把凡事看淡,多轻松啊。

        生活、做人、交友……总有许多令人放不下的东西,把凡事看淡也非宜事。真正做起来也不容易。不过有一个故事,对我们来说,还是很有启发。说老婆婆晴天为二姑娘卖不出去伞发愁,雨天为大姑娘卖不出去鞋发愁,别人开导她说:你这样想啊,雨天你二姑娘的伞卖得特别好,晴天你大姑娘的鞋卖得特别好啊!老婆婆一听,破涕为笑了。把凡事看淡,有时不就是一种思维方式的改变吗?

        把凡事看淡,不是回避,不是装糊涂,而是以乐观的心态去面对一切。把凡事看淡,心境自然会开朗许多,安闲许多,舒缓许多……
  • VC命名规则[转载]

    2008-02-19 10:04:47

    转自:

    http://blog.163.com/ustcwudi@126/blog/static/2675028020080164586563/

     

     一、程序风格:    

      1、严格采用阶梯层次组织程序代码:    

      各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如:    

      2、提示信息字符串的位置    

      在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。    

      3、对变量的定义,尽量位于函数的开始位置。    

      二、命名规则:    

      1、变量名的命名规则    

      ①、变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。    

      即:   变量名=变量类型+变量的英文意思(或缩写)    

      对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。    

      见下表:    

      bool(BOOL)   用b开头   bIsParent    

      byte(BYTE)   用by开头   byFlag    

      short(int)   用n开头   nStepCount    

      long(LONG)   用l开头   lSum    

      char(CHAR)   用c开头   cCount    

      float(FLOAT)   用f开头   fAvg    

      double(DOUBLE)   用d开头   dDeta    

      void(VOID)   用v开头   vVariant    

      unsigned   int(WORD)   用w开头   wCount    

      unsigned   long(DWORD)   用dw开头   dwBroad    

      HANDLE(HINSTANCE)   用h开头   hHandle    

      DWORD   用dw开头   dwWord    

      LPCSTR(LPCTSTR)   用str开头   strString    

      用0结尾的字符串   用sz开头   szFileName    

       

      对未给出的变量类型要求提出并给出命名建议给技术委员会。    

       

      ②、指针变量命名的基本原则为:    

      对一重指针变量的基本原则为:    

      “p”+变量类型前缀+命名    

      如一个float*型应该表示为pfStat    

      对多重指针变量的基本规则为:    

      二重指针:   “pp”+变量类型前缀+命名    

      三重指针:   “ppp”+变量类型前缀+命名    

      ......    

      ③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写)    

      ④、静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即:   变量名=s_+变量类型+变量的英文意思(或缩写)    

      ⑤、成员变量用m_开头,如一个长型成员变量定义为m_lCount;即:变量名=m_+变量类型+变量的英文意思(或缩写)    

      ⑥、对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。    

      如:enum   cmEMDAYS    

      {    

      EMDAYS_MONDAY;    

      EMDAYS_TUESDAY;    

      ……    

      };    

      ⑦、对struct、union、class变量的命名要求定义的类型用大写。并要加上前缀,其内部变量的命名规则与变量命名规则一致。    

      结构一般用S开头    

      如:struct   ScmNPoint    

      {    

      int   nX;//点的X位置    

      int   nY;   //点的Y位置    

      };    

      联合体一般用U开头    

      如:   union   UcmLPoint    

      {    

      long   lX;    

      long   lY;    

      }    

      类一般用C开头    

      如:    

      class   CcmFPoint    

      {    

      public:    

      float   fPoint;    

      };    

      对一般的结构应该定义为类模板,为以后的扩展性考虑    

      如:    

      template    

      class   CcmTVector3d    

      {    

      public:    

      TYPE   x,y,z;    

      };    

      ⑧、对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思。    

      如:#define   CM_FILE_NOT_FOUND   CMMAKEHR(0X20B)   其中CM表示类别。    

      ⑨、对const   的变量要求在变量的命名规则前加入c_,即:c_+变量命名规则;例如:    

      const   char*   c_szFileName;    

      2、   函数的命名规范:    

      函数的命名应该尽量用英文表达出函数完成的功能。遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母。    

      例如:    

      long   cmGetDeviceCount(……);    

      3、函数参数规范:    

      ①、   参数名称的命名参照变量命名规范。    

      ②、   为了提高程序的运行效率,减少参数占用的堆栈,传递大结构的参数,一律采用指针或引用方式传递。    

      ③、   为了便于其他程序员识别某个指针参数是入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志。如:    

      ……cmCopyString(const   char   *   c_szSource,   char   *   szDest)    

      4、引出函数规范:    

      对于从动态库引出作为二次开发函数公开的函数,为了能与其他函数以及Windows的函数区分,采用类别前缀+基本命名规则的方法命名。例如:在对动态库中引出的一个图象编辑的函数定义为   imgFunctionname(其中img为image缩写)。    

      现给出三种库的命名前缀:    

      ①、   对通用函数库,采用cm为前缀。    

      ②、   对三维函数库,采用vr为前缀。    

      ③、   对图象函数库,采用img为前缀。    

      对宏定义,结果代码用同样的前缀。    

      5、文件名(包括动态库、组件、控件、工程文件等)的命名规范:    

      文件名的命名要求表达出文件的内容,要求文件名的长度不得少于5个字母,严禁使用象file1,myfile之类的文件名。    

      三、注释规范:    

      1、函数头的注释    

      对于函数,应该从“功能”,“参数”,“返回值”、“主要思路”、“调用方法”、“日期”六个方面用如下格式注释:    

      //程序说明开始    

      //================================================================//    

      //   功能:   从一个String   中删除另一个String。    

      //   参数:   strByDelete,strToDelete    

      //   (入口)   strByDelete:   被删除的字符串(原来的字符串)    

      //   (出口)   strToDelete:   要从上个字符串中删除的字符串。    

      //   返回:   找到并删除返回1,否则返回0。(对返回值有错误编码的要//   求列出错误编码)。    

      //   主要思路:本算法主要采用循环比较的方法来从strByDelete中找到    

      //   与strToDelete相匹配的字符串,对多匹配strByDelete    

      //   中有多个strToDelete子串)的情况没有处理。请参阅:    

      //   书名......    

      //   调用方法:......    

      //   日期:起始日期,如:2000/8/21.9:40--2000/8/23.21:45    

      //================================================================//    

      函数名(……)    

      //程序说明结束    

      ①、   对于某些函数,其部分参数为传入值,而部分参数为传出值,所以对参数要详细说明该参数是入口参数,还是出口参数,对于某些意义不明确的参数还要做详细说明(例如:以角度作为参数时,要说明该角度参数是以弧度(PI),还是以度为单位),对既是入口又是出口的变量应该在入口和出口处同时标明。等等。    

      ②、   函数的注释应该放置在函数的头文件中,在实现文件中的该函数的实现部分应该同时放置该注释。    

      ③、   在注释中应该详细说明函数的主要实现思路、特别要注明自己的一些想法,如果有必要则应该写明对想法产生的来由。对一些模仿的函数应该注释上函数的出处。    

      ④、   在注释中详细注明函数的适当调用方法,对于返回值的处理方法等。在注释中要强调调用时的危险方面,可能出错的地方。    

      ⑤、   对日期的注释要求记录从开始写函数到结束函数的测试之间的日期。    

      ⑥、   对函数注释开始到函数命名之间应该有一组用来标识的特殊字符串。    

      如果算法比较复杂,或算法中的变量定义与位置有关,则要求对变量的定义进行图解。对难以理解的算法能图解尽量图解。    

      2、变量的注释:    

      对于变量的注释紧跟在变量的后面说明变量的作用。原则上对于每个变量应该注释,但对于意义非常明显的变量,如:i,j等循环变量可以不注释。    

      例如:   long   lLineCount   //线的根数。    

       3、文件的注释:    

      文件应该在文件开头加入以下注释:    

      /////////////////////////////////////////////////////////////////////    

      //   工程:   文件所在的项目名。    

      //   作者:**,修改者:**    

      //   描述:说明文件的功能。    

      //   主要函数:…………    

      //   版本:   说明文件的版本,完成日期。    

      //   修改:   说明对文件的修改内容、修改原因以及修改日期。    

      //   参考文献:   ......    

      /////////////////////////////////////////////////////////////////////    

      为了头文件被重复包含要求对头文件进行定义如下:    

      #ifndef   __FILENAME_H__    

      #define   __FILENAME_H__    

      其中FILENAME为头文件的名字。    

         4、其他注释:    

      在函数内我们不需要注释每一行语句。但必须在各功能模块的每一主要部分之前添加块注释,注释每一组语句,在循环、流程的各分支等,尽可能多加以注释。    

      其中的循环、条件、选择等位置必须注释。    

      对于前后顺序不能颠倒的情况,建议在注释中增加序号。    

      例如:    

      在其他顺序执行的程序中,每隔3—5行语句,必须加一个注释,注明这一段语句所组成的小模块的作用。对于自己的一些比较独特的思想要求在注释中标明。    

      四、程序健壮性:    

      1、函数的返回值规范:    

      对于函数的返回位置,尽量保持单一性,即一个函数尽量做到只有一个返回位置。(单入口单出口)。    

      要求大家统一函数的返回值,所有的函数的返回值都将以编码的方式返回。    

      例如编码定义如下:    

      #define   CM_POINT_IS_NULL   CMMAKEHR(0X200)    

      :    

      :    

      建议函数实现如下:    

      long   函数名(参数,……)    

      {    

      long   lResult;   //保持错误号    

      lResult=CM_OK;    

      //如果参数有错误则返回错误号    

      if(参数==NULL)    

      {    

      lResult=CM_POINT_IS_NULL;    

      goto   END;    

      }    

      ……    

      END:    

      return   lResult;    

      }    

      2、关于goto的应用:    

      对goto语句的应用,我们要求尽量少用goto语句。对一定要用的地方要求只能向后转移。    

      3、资源变量的处理(资源变量是指消耗系统资源的变量):    

      对资源变量一定赋初值。分配的资源在用完后必须马上释放,并重新赋值。    

      4、对复杂的条件判断,为了程序的可读性,应该尽量使用括号。    

      例:if(((szFileName!=NULL)&&(lCount>=0)))||(bIsReaded==TRUE))    

      五、可移植性:    

      1、高质量的代码要求能够跨平台,所以我们的代码应该考虑到对不同的平台的支持,特别是对windows98和windowsnt的支持。    

      2、由于C语言的移植性比较好,所以对算法函数要求用C代码,不能用C++代码。    

      3、对不同的硬件与软件的函数要做不同的处理

  • 可用的来电显示指令AT+CLIP=1;

    2008-02-16 19:45:46

    可用的来电显示指令AT+CLIP=1;
  • PADS技巧[转贴]

    2008-02-15 17:41:58

    原贴地址:

    http://hi.baidu.com/hyh424/blog/item/9fbd0aa9eb2de0ff1f17a263.html

     

    PADS技巧

    偶是PADS的新手,原来一直用protel。花了四天时间第一次用PADS2005画了一块大板子,开始确实有很多感觉不方便不熟悉的地方。现在算是入门了,也总结了一些经验和技巧。希望对PADS的新手能有所帮助。

    1布局时飞线(鼠线,connection)的处理。 Layout的缺省设置并不是让飞线最短化。一开始布元件时,飞线实在是密如蛛网,晕头转向。Tools\length minimization (CRTLM) 也没有用,硬着头皮在缺省设置下完成了元件布局。几欲faint。后来才发现其实没有设置好。正确或者说方便的设置应该是让飞线最短并且在移动中始终最短。

    Setup\design rules\default rules\routing\ topology type\minimize

    这样在按CTRLM,很多飞线就消失了,也就最短了

    Setup\preference\length minimize\during moving

    这样移动元件是飞线始终最短。

    另外,很多飞线其实是地线。可以把地线的飞线先hide起来。并把地线的net设置成比较特殊的颜色。这样就布局就方便多了。

    View\nets\ 选在左边net list GND net,加到右边view list。在右边选GND,下面view unroute details none 在左边颜色中选一个颜色。

    这样地线的飞线就hide起来了,并且是同一种颜色。当然这里要小心信号地和power地要分开先。

    这样的设置布局起来就方便多了。早知道就好,ft

    2改全部元件的字体属性。和protel一样,这个是可以一次全部改成相同的属性的。

    单击鼠标右键,选select components, 再单击右键,选 select all CTRLA)。再单击右键,选query/modify (CTRL+Q) part outline width 输入想要的宽度,下面选label Ref. Des. Press the big button under it. 弹出新窗口, input the value you want at size and width. Press OK. Then the size, width , even the part outline width are same. 有点麻烦。呵呵。

    3加过孔。开始我也以为PADS不能随便加via,必须要画trace,然后加了还一段在top另一段在bottom,很让人ft,因为这via实在是太常用了。对GNDvia要能经常的加随意的加才好。其实这也可以。

    单击老鼠右键,check “select net”, select the net you want to add via, usually, GND net, the GND is high light. Then right click mouse again, select “ add via”, then you can add vias which are connected to GND net. Freely and put them wherever you want. Remember, if the GND net is hide and set to a special color, no connection for these vias, but they are same color as other pads and trace in GND net.

    4. 覆铜。覆铜应该是PADS的一大优点。快了很多。对于焊盘可以选择铜是盖过去(flood over)还是用对角(orthogonal, diagonal)连

    接。对某一个形状的焊盘只能一种设置。如果有几个圆形焊盘希望铜铺过去,而几个相同的圆形焊盘想用梅花连接。那可以这

    样。覆铜时preference\thermals\, select the pad and shape, check “ orthogonal” or “diagonal”, then all these shape pads are orthogonal or

    diagonal connection to the copper. And then, put a copper (铜皮)to the pads you want the copper flood overand assign the same net to the

    copper. Then these pads are flooded over by the copper.

  • 一些AD,DA的术语[转贴自TI]

    2008-02-12 17:02:09

    原文件地址:http://www.maxim-ic.com.cn/appnotes.cfm/an_pk/641

     

    ADC and DAC Glossary

    Abstract: This document collects and defines technical terms commonly used with analog-to-digital converters (ADCs) and digital-to-analog converters (DACs).

    Acquisition Time

    Acquisition time is the interval between the release of the hold state (imposed by the input circuitry of a track-and-hold) and the instant at which the voltage on the sampling capacitor settles to within 1 LSB of a new input value. The equation for acquisition time (Tacq) is:



    where RSOURCE is the source impedance, CSAMPLE is the sampling capacitance, and N is the number of resolution bits.

    Aliasing

    In sampling theory, input-signal frequencies that exceed the Nyquist frequency are "aliased." That is, they are "folded back" or replicated at other positions in the spectrum above and below the Nyquist frequency. To prevent aliasing, you must adequately filter all undesired signals so the ADC does not digitize them. Aliasing can be used to advantage when undersampling.

    See also application note Filter Basics: Anti-Aliasing

    Aperture Delay

    Aperture delay (tAD) in an ADC is the interval between the sampling edge of the clock signal (the rising edge of the clock signal in the figure) and the instant when the sample is taken. The sample is taken when the ADC's track-and-hold goes into the hold state.

    Aperture delay (red) and jitter (blue).
    Aperture delay (red) and jitter (blue).

    Aperture Jitter

    Aperture jitter (tAJ) is the sample-to-sample variation in the aperture delay, as shown in this figure. Typical ADC aperture jitter values are much smaller than those of aperture delay.

    Binary Coding (Unipolar)

    Straight binary is a coding scheme typically used for unipolar signals. The binary code (zero scale to full scale) ranges from all zeros (00...000) to the positive full-scale value of all ones (11...111). Midscale is represented by a one (the MSB) followed by all zeros (10...000). This code is similar to offset binary coding, which accommodates the positive and negative values of bipolar transfer functions.

    Bipolar Inputs

    The term 'bipolar' indicates that the signal swings above and below some reference level. In single-ended systems, the input is typically referenced to analog ground, so a bipolar signal is one that swings above and below ground. In differential systems, where the signal is not referenced to ground but where the positive input is referenced to the negative input, a bipolar signal is one in which the positive input swings above and below the negative input.

    Common-Mode Rejection (CMR)

    Common-mode rejection is the ability of a device to reject a signal that is common to both inputs. The common-mode signal can be an AC or DC signal, or a combination of the two. Common-mode rejection ratio (CMRR) is the ratio of the differential signal gain to the common-mode signal gain. CMRR is often expressed in decibels (dB).

    Crosstalk

    Crosstalk is a measure of how well each analog input is isolated from the others. For an ADC with more than one input channel, crosstalk is the amount of signal that couples from one analog input into another. This value is typically specified in decibels (dB). For a DAC with more than one input channel, crosstalk is the amount of noise that appears on a DAC output when another DAC output channel is updated.

    Differential Nonlinearity (DNL) Error

    For an ADC, the analog-input levels that trigger any two successive output codes should differ by one LSB (DNL = 0). Any deviation from one LSB is defined as DNL. For a DAC, DNL error is the difference between the ideal and the measured output responses for successive DAC codes. An ideal DAC response would have analog output values exactly one code (LSB) apart (DNL = 0). (A DNL specification of greater than or equal to 1LSB guarantees monotonicity.) (See "Monotonic.")

    DNL for an ADC and a DAC.
    DNL for an ADC and a DAC.

    See also application note INL/DNL Measurements for High-Speed Analog-to-Digital Converters (ADCs)

    Digital Feedthrough

    Digital feedthrough is the noise that appears on a DAC output when the digital control lines are toggled. In the figure, feedthrough on the DAC output is the result of noise from the serial clock signal.

    Digital feedthrough.
    Digital feedthrough.

    Dynamic Range

    Typically expressed in dB, dynamic range is defined as the range between the noise floor of a device and its specified maximum output level. An ADC's dynamic range is the range of signal amplitudes which the ADC can resolve; an ADC with a dynamic range of 60dB can resolve signal amplitudes from x to 1000x. Dynamic range is important in communication applications, where signal strengths vary dramatically. If the signal is too large, it over-ranges the ADC input. If the signal is too small, it gets lost in the converter's quantization noise.

    Effective Number Of Bits (ENOB)

    ENOB specifies the dynamic performance of an ADC at a specific input frequency and sampling rate. An ideal ADC's error consists only of quantization noise. As the input frequency increases, the overall noise (particularly in the distortion components) also increases, thereby reducing the ENOB and SINAD. (See 'Signal-to-Noise and Distortion Ratio (SINAD).') ENOB for a full-scale, sinusoidal input waveform. is computed from:



    Force-Sense Outputs

    This is a measurement technique in which a voltage (or current) is forced at a remote point in a circuit, and the resulting current (or voltage) is measured (sensed). DACs with integrated output amplifiers, for example, sometimes include force-sense outputs. The inverting input of the output amplifier is available for external connection, and the feedback path must be closed externally.

    Full-Power Bandwidth (FPBW)

    An ADC is operated with an applied analog input at or near the converter's specified full-scale amplitude. The input frequency is increased to the point at which the amplitude of the digitized conversion result has decreased by 3dB. That input frequency is defined as the full-power input bandwidth.

    Full-Scale (FS) error

    Full-scale error is the difference between the actual value that triggers the transition to full-scale and the ideal analog full-scale transition value. Full-scale error equals offset error + gain error, as shown in this figure.

    Full-scale error for an ADC and a DAC.
    Full-scale error for an ADC and a DAC.

    FS Gain Error (DACs)

    The full-scale gain error of an digital-to-analog converter (DAC) is the difference between the actual and the ideal output span. The actual span is determined by the output when all inputs are set to 1s, minus the output when all inputs are set to 0s. The full-scale gain error of any data converter can be affected by the choice of reference used to measure the gain error.

    Gain Error

    The gain error of an ADC or DAC indicates how well the slope of an actual transfer function matches the slope of the ideal transfer function. Gain error is usually expressed in LSB or as a percent of full-scale range (%FSR), and it can be calibrated out with hardware or in software. Gain error is the full-scale error minus the offset error.

    Gain error for an ADC and a DAC.
    Gain error for an ADC and a DAC.

    Gain Error Drift

    Gain-error drift is the variation in gain error due to a change in ambient temperature, typically expressed in ppm/°C.

    Gain Matching

    Gain matching indicates how well the gains of all channels in a multichannel ADC are matched to each other. To calculate gain matching, apply the same input signal to all channels, and report the maximum deviation in gain, typically in dB.

    Glitch Impulse

    Glitch impulse is the voltage transient that appears at the DAC output when a major-carry transition occurs. Typically measured as nV•s, it equals the area under the curve on a voltage-vs-time graph.

    Harmonic

    A harmonic of a periodic signal is a sinewave multiple of the signal's fundamental frequency.

    Integral Nonlinearity (INL) Error

    For data converters, INL is the deviation of an actual transfer function from a straight line. After nullifying offset and gain errors, the straight line is either a best-fit straight line or a line drawn between the end points of the transfer function. INL is often called 'relative accuracy.'

    See also application note INL/DNL Measurements for High-Speed Analog-to-Digital Converters (ADCs).

    INL for an ADC and a  DAC.
    INL for an ADC and a DAC.

    Intermodulation Distortion (IMD)

    IMD is a phenomenon in which nonlinearity in a circuit or device creates new frequency components not in the original signal. IMD includes the effects of harmonic distortion and two-tone distortion. It is measured as the total power of those selected intermodulation products (i.e., IM2 through IM5) to the total power of the two input signals, f1 and f2. The signals f1 and f2 are of equal amplitude and very close to one another in frequency. The 2nd- to 5th-order intermodulation products are as follows:
    • 2nd-order intermodulation products (IM2): f1 + f2, f2 - f1
    • 3rd-order intermodulation products (IM3): 2 x f1 - f2, 2 x f2 - f1, 2 x f1 + f2, 2 x f2 + f1
    • 4th-order intermodulation products (IM4): 3 x f1 - f2, 3 x f2 - f1, 3 x f1 + f2, 3 x f2 + f1
    • 5th-order intermodulation products (IM5): 3 x f1 - 2 x f2, 3 x f2 - 2 x f1, 3 x f1 + 2 x f2, 3 x f2 + 2 x f1.

    Least Significant Bit (LSB)

    In a binary number, the LSB is the least weighted bit in the group. Typically, the LSB is the furthest right bit. For an ADC or DAC, the weight of an LSB equals the full-scale voltage range of the converter divided by 2N, where N is the converter's resolution. For a 12-bit ADC with a unipolar full-scale voltage of 2.5V, 1LSB = (2.5V/212) = 610µV

    Major-Carry Transition

    At the major-carry transition (around mid-scale), either the MSB changes from low to high and all other bits change from high to low, or the MSB changes from high to low and all other bits change from low to high. For example, 01111111 to 10000000 is a major-carry transition. Major-carry transitions often produce the worst switching noise. (See Glitch Impulse.)

    Monotonic

    A sequence increases monotonically if for every n, Pn + 1 is greater than or equal to Pn. Similarly, a sequence decreases monotonically if for every n, Pn + 1 is less than or equal to Pn. A DAC is monotonic if the analog output always increases as the DAC-code input increases. An ADC is monotonic if the digital output code always increases as the ADC analog input increases. A converter is guaranteed monotonic if the DNL error is no greater than ±1LSB

    Most Significant Bit (MSB)

    In a binary number, the MSB is the most weighted bit in the number. Typically, the MSB is the left-most bit.

    Multiplying DAC (MDAC)

    A multiplying DAC allows an AC signal to be applied to the reference input. By feeding the signal of interest into the reference input and by using the DAC codes to scale the signal, the DAC can be used as a digital attenuator.

    No Missing Codes

    An ADC has no missing codes if it produces all possible digital codes in response to a ramp signal applied to the analog input.

    Nyquist Frequency

    The Nyquist principle states that, to allow an analog signal to be completely represented with no aliasing effects, the ADC's sampling rate must be at least twice the maximum bandwidth of the signal. This maximum bandwidth is called the Nyquist frequency.

    Offset Binary Coding

    Offset binary is a coding scheme often used for bipolar signals. In offset binary coding, the most negative value (negative full scale) is represented by all zeros (00...000) and the most positive value (positive full scale) is represented by all ones (11...111). Zero-scale is represented by a one (MSB) followed by all zeros (10...000). This scheme is similar to straight binary coding, which is typically used for unipolar signals. (See Binary Coding, Unipolar.)

    Offset Error (Bipolar)

    The measurement of offset error in bipolar converters is similar to that of offset error in unipolar converters. However, the error measured at zero-scale is at the midpoint of the bipolar transfer functions. (See Offset Error (Unipolar).)

    Offset Error (Unipolar)

    Offset error, often called 'zero-scale' error, indicates how well the actual transfer function matches the ideal transfer function at a single point. For an ideal data converter, the first transition occurs at 0.5LSB above zero. For an ADC, the zero-scale voltage is applied to the analog input and is increased until the first transition occurs. For a DAC, offset error is the analog output response to an input code of all zeros.

    Offset error for an ADC and a DAC.
    Offset error for an ADC and a DAC.

    Offset Error Drift

    Offset-error drift is the variation in offset error due a change in ambient temperature, typically expressed in ppm/°C.

    Oversampling

    For an ADC, sampling the analog input at a rate much higher than the Nyquist frequency is called oversampling. Oversampling improves the ADC's dynamic performance by effectively reducing its noise floor. Improved dynamic performance leads, in turn, to higher resolution. Oversampling is the basis of sigma-delta ADCs.

    See also application note Demystifying Sigma-Delta ADCs

    Phase-Matching

    Phase matching indicates how well matched are the phases of identical signals applied to all channels in a multichannel ADC. Phase matching is the maximum deviation in phase among all the channels, and is typically reported in degrees.

    Power-Supply Rejection (PSR)

    Power Supply Rejection Ratio (PSRR) is the ratio of the change in DC power supply voltage to the resulting change in full-scale error, expressed in dB.

    Quantization Error

    For an ADC, quantization error is defined as the difference between the actual analog input and the digital representation of that value. (See 'Quantization.')

    Ratiometric Measurement

    Instead of a constant-valued reference voltage, a fraction of the signal applied to the transducer (i.e., the load cell or bridge) is applied to the ADC's voltage reference input. This type of measurement, called ratiometric, eliminates any errors introduced by changes in the reference voltage. An example of ratiometric measurement using a resistive bridge is shown in the figure below.

    Ratiometric measurement using resistive bridge network.
    Ratiometric measurement using resistive bridge network.

    Resolution

    ADC resolution is the number of bits used to represent the analog input signal. To more accurately replicate the analog signal, you must increase the resolution. Using an ADC with higher resolution also reduces the quantization error. For DACs, resolution is similar but reversed—incrementing the code applied to a higher resolution DAC produces smaller step sizes in the analog output.

    Root Mean Square (RMS)

    2/2 (or 0.707) times the peak value, which is 0.354 times the peak-to-peak value.

    Sampling Rate/Frequency

    Sampling rate or sampling frequency, specified in samples per second (sps), is the rate at which an ADC acquires (samples) the analog input. For ADCs that perform. one sample per conversion (such as SAR, flash, and pipeline ADCs), the sampling rate is also referred to as the throughput rate. For sigma-delta ADCs, the sampling rate is typically much higher than the output data rate.

    Settling Time

    For a DAC, settling time is the interval between a command to update (change) its output value and the instant it reaches its final value, within a specified percentage. Settling time is affected by the slew rate of an output amplifier and by the amount of amplifier ringing and signal overshoot. For an ADC, it is essential that the time required for voltage on the sampling capacitor to settle to within 1 LSB be less than the converter's acquisition time.

    Signal-to-Noise And Distortion (SINAD)

    SINAD is the ratio of the RMS value of the sinewave (input for an ADC, or reconstructed output for a DAC) to the RMS value of the converter noise plus distortion (without the sinewave). RMS noise plus distortion includes all spectral components up to the Nyquist frequency, excluding the fundamental and the DC offset. SINAD is typically expressed in dB.

    Signal-to-Noise Ratio (SNR)

    SNR is the ratio of the amplitude of the desired signal to the amplitude of the noise signals at a given point in time. For a waveform. perfectly reconstructed from digital samples, the theoretical maximum SNR is the ratio of the full-scale analog input (RMS value) to the RMS quantization error (residual error).The ideal, theoretical minimum ADC noise is caused by quantization error only and results directly from the ADC's resolution (N bits):



    (Actual ADCs produce thermal noise, reference noise, clock jitter, etc., in addition to quantization noise.)

    Signed Binary Coding

    Signed binary is a coding scheme in which the MSB represents the sign (positive or negative) of a binary number. Thus, the 8-bit representation of -2 is 10000010, and the representation of +2 is 00000010.

    Slew Rate
    Slew rate is the maximum rate at which a DAC output can change, or the maximum rate at which an ADC's input can change without causing an error in the digitized output. For a DAC with output amplifier, the specified slew rate is typically that of the amplifier.

    Small-Signal Bandwidth (SSBW)

    To measure SSBW, apply to an ADC an analog input signal of sufficiently small amplitude that its slew rate does not limit the ADC performance. Then, sweep the input frequency up to the point where the amplitude of the digitized conversion result decreases by -3dB. SSBW is often limited by the performance of the associated track-and-hold amplifier.

    Spurious-Free Dynamic Range (SFDR)

    SFDR is the ratio of the RMS amplitude of the fundamental (maximum signal component) to the RMS value of the next largest spurious component, excluding DC offset. SFDR is specified in decibels relative to the carrier (dBc).

    Total Harmonic Distortion (THD)

    THD measures the distortion content of a signal, and is specified in decibels relative to the carrier (dBc). For ADCs, THD is the ratio of the RMS sum of the selected harmonics of the input signal to the fundamental itself. Only harmonics within the Nyquist limit are included in the measurement.

    Track-and-Hold

    Track-and-hold, often called 'sample-and-hold,' refers to the input-sampling circuitry of an ADC. The most basic representation of a track-and-hold input is an analog switch and a capacitor. (See figure.) The circuit is in 'track' mode when the switch is closed. When the switch opens, the last instantaneous value of the input is held on the sampling capacitor, and the circuit is in 'hold' mode.

    Basic track-and-hold.
    Basic track-and-hold.

    Transition Noise

    Transition noise is the range of input voltages that cause an ADC output to toggle between adjacent output codes. As you increase the analog input voltage, the voltages that define where each code transition occurs (code edges) are uncertain due to the associated transition noise.

    Two's Complement Coding

    Two's complement is a digital coding scheme for positive and negative numbers that simplifies addition and subtraction computations. In this scheme, the 8-bit representation of -2 is 11111110, and the representation of +2 is 00000010.

    Undersampling

    Undersampling is a technique in which the ADC sampling rate is lower than the analog input frequency?a condition that causes aliasing. Given the Nyquist criterion, it is natural to expect that undersampling would result in a loss of signal information. However, with proper filtering of the input signal and with proper selection of the analog input and sampling frequencies, the aliased components that contain the signal information can be shifted from a higher frequency to a lower frequency and then converted. This method effectively uses the ADC as a downconverter, shifting higher-bandwidth signals into the ADC's desired band of interest. For this technique to be successful, the bandwidth of the ADC's track-and-hold must be capable of handling the highest frequency signals anticipated.

    Unipolar

    For an ADC with single-ended analog input, the unipolar input ranges from zero-scale (typically ground) to full scale (typically the reference voltage). For an ADC with differential inputs, the unipolar input ranges from zero-scale to full-scale, with the input measured as the positive input with respect to the negative input.

    Zero-Scale Error

    See offset error (unipolar).

  • 关于SPI口和AT45DB081连接的问题![转贴]

    2008-02-03 22:17:36

    转贴自:http://bbs.21ic.com/club/bbs/list.asp?boardid=39&t=1461844&tp=%u5173%u4E8ESPI%u53E3%u548CAT45DB081%u8FDE%u63A5%u7684%u95EE%u9898%uFF01

     

    放一段程序吧。读写没优化过,但保证能用


    INT8U   AT45DBBuf[528];
    static  OS_EVENT* AT45DBSem;

    void AT45DBInit(void)
    {
    #if OS_CRITICAL_METHOD == 3
      OS_CPU_SR  cpu_sr;
    #endif

      AT45DBSem = OSSemCreate(1);
      OS_ENTER_CRITICAL();
      PCONP   |= 0x00000100;
      PINSEL0 &= 0xFFFF00FF;
      PINSEL0 |= 0x00005500;
      IO0DIR  |= AT45DB_CS;
      IO0SET   = AT45DB_CS;
      OS_EXIT_CRITICAL();
    }

    void AT45DBRead(INT16U u16_page)
    {
    #if OS_CRITICAL_METHOD == 3
      OS_CPU_SR  cpu_sr;
    #endif
      INT16U u16_cnt;
      INT8U  u8_err;

      OSSemPend(AT45DBSem,0,&u8_err);
      OS_ENTER_CRITICAL();
      S0PCR  = 0x38;
      S0PCCR = FPCLK/2000000*2;
      
      IO0CLR = AT45DB_CS;
      S0PDR  = 0x52;
      while(0 == (S0PSR&0x80));
      S0PDR = (INT8U)(u16_page>>6);
      while(0 == (S0PSR&0x80));
      S0PDR = ((INT8U)(u16_page))<<2;
      while(0 == (S0PSR&0x80));
      S0PDR = 0x00;
      while(0 == (S0PSR&0x80));
      
      S0PDR = 0x00;
      while(0 == (S0PSR&0x80));
      S0PDR = 0x00;
      while(0 == (S0PSR&0x80));
      S0PDR = 0x00;
      while(0 == (S0PSR&0x80));
      S0PDR = 0x00;
      while(0 == (S0PSR&0x80));
      
      for(u16_cnt=0;u16_cnt<528;u16_cnt++)
      {
        S0PDR = 0x00;
        while(0 == (S0PSR&0x80));
        AT45DBBuf[u16_cnt] = S0PDR;
      }
      IO0SET = AT45DB_CS;
      
      OS_EXIT_CRITICAL();
      OSSemPost(AT45DBSem);
    }

    void AT45DBWrite(INT16U u16_page)
    {
    #if OS_CRITICAL_METHOD == 3
      OS_CPU_SR  cpu_sr;
    #endif
      INT16U u16_cnt;
      INT8U  u8_err;
      
      OSSemPend(AT45DBSem,0,&u8_err);
      OS_ENTER_CRITICAL();
      S0PCR  = 0x38;
      S0PCCR = FPCLK/2000000*2;
      IO0CLR = AT45DB_CS;
      
      S0PDR = 0x82;
      while(0 == (S0PSR&0x80));
      S0PDR = (INT8U)(u16_page>>6);
      while(0 == (S0PSR&0x80));
      S0PDR = ( (INT8U)(u16_page))<<2;
      while(0 == (S0PSR&0x80));
      S0PDR = 0x00;
      while(0 == (S0PSR&0x80));
        
      for(u16_cnt=0;u16_cnt<528;u16_cnt++)
      {
        S0PDR = AT45DBBuf[u16_cnt];
        while(0 == (S0PSR&0x80));
      }
      
      IO0SET = AT45DB_CS;
      OS_EXIT_CRITICAL();
      
      OSTimeDly(20);
      OSSemPost(AT45DBSem);   
    }
  • ARM注意事项

    2008-02-03 21:59:15

    “从机必须在主机发送数据前准备好数据(放在数据寄存器中)”很重要,我觉得主从SPI通讯要注意以下几点:
    1、主SSEL要上拉,从SSEL要受主机控制。
    2、“从机必须在主机发送数据前准备好数据(放在数据寄存器  中)”。
    3、LPC2114的P0.14脚一定要上拉,否则程序可以写进去,但不能运行。
    4、主从设置要一致(资料上已清楚)。

     

    转贴自21IC

  • LPC ARM SPI0改成16位的

    2008-02-03 17:54:19

    原贴地址:

     

    这是关于LPC2136的SPI0 的问题:以前是8 bits per transfer。今天把它改成16 bits per transfer:改动如下:
    1、
    #define SPDR            (*((volatile unsigned char *) 0xE0020008)) ==>
    #define SPDR            (*((volatile unsigned short *) 0xE0020008))
    2、
    SPCR  = (0 << 3) |     // CPHA = 0, 数据在SCK 的第一个时钟沿采样
            (1 << 4) | // CPOL = 1, SCK 为低有效
            (1 << 5) |     // MSTR = 1, SPI 处于主模式
            (0 << 6) |     // LSBF = 0, SPI 数据传输MSB (位7)在先
            (1 << 7);     // SPIE = 1,
    ==>
    SPCR  =(1 << 2 )|  //BitEnable
            (0 << 3) |     // CPHA = 0, 数据在SCK 的第一个时钟沿采样
            (1 << 4) | // CPOL = 1, SCK 为低有效
            (1 << 5) |     // MSTR = 1, SPI 处于主模式
            (0 << 6) |     // LSBF = 0, SPI 数据传输MSB (位7)在先
            (1 << 7);     // SPIE = 1,  
    结果呢?系统无法运行,死了?!
    把ZLG的SPI例程也用来调试,结果一样死在
    while( 0 == (SPI_SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕

    郁闷!后来急中生智地想,是不是SPCR的11:8 BITS 也应该写一次呢?
    于是做如下更改:
    1、
    #define SPCR            (*((volatile unsigned char *) 0xE0020000))
    ==>
    #define SPCR            (*((volatile unsigned short *) 0xE0020000))
    2、
    SPCR  =(1 << 2 )|  //BitEnable
            (0 << 3) |     // CPHA = 0, 数据在SCK 的第一个时钟沿采样
            (1 << 4) | // CPOL = 1, SCK 为低有效
            (1 << 5) |     // MSTR = 1, SPI 处于主模式
            (0 << 6) |     // LSBF = 0, SPI 数据传输MSB (位7)在先
            (1 << 7);     // SPIE = 1
    ==>
    SPCR  =(1 << 2 )|  //BitEnable
            (0 << 3) |     // CPHA = 0, 数据在SCK 的第一个时钟沿采样
            (1 << 4) | // CPOL = 1, SCK 为低有效
            (1 << 5) |     // MSTR = 1, SPI 处于主模式
            (0 << 6) |     // LSBF = 0, SPI 数据传输MSB (位7)在先
            (1 << 7) |     // SPIE = 1
            (0x00<<8);
    结果发现,正常工作了!

  • 另一个更详细的AT指令集列表

    2008-01-10 23:44:51

    原贴地址:

    http://www.mcublog.com/blog/group.asp?cmd=show&gid=21&pid=198

     

    A/  重新发送最后给的AT指令(Reissues the last command given)
    ATA 接听外来电话  (ANSWER INCOMING CALL)
    ATD 向外拨打电话   (MOBILE ORIGINATED CALL TO DIALABLE NUMBER)
    ATDL 重拨上次拨打的电话号码 (REDIAL LAST TELEPHONE NUMBER USED)
    ATE 设置回声模式 (SET COMMAND ECHO MODE)
    ATH 断开现有连接/挂断电话(DISCONNECT EXISTING CONNECTION)
    ATI 显示产品的标志信息(DISPLAY PRODUCT IDENTIFICATION INFORMATION)
    ATL 设置监听话筒大声(SET MONITOR SPEAKER LOUDNESS)
    ATM 设置监听话筒模式(SET MONITOR SPEAKER MODE)
    +++ 从数据模式或PPP上网模式回到命令模式(SWITCH FROM DATA MODE OR PPP ONLINE MODE TO COMMAND MODE)
    ATO 从命令模式回到数据模式(SWITCH FROM COMMAND MODE TO DATA MODE)
    ATP 选择脉冲拨号(SELECT PULSE DIALLING)
    ATQ 设定结果代码颁布方式 (SET RESULT CODE PRESENTATION MODE)
    ATS0 设置在接电话前的响铃次数(SET NUMBER OF RINGS BEFORE AUTOMATICALLY ANSWERING THE CALL)
    ATS3 设置命令行终止字符(SET COMMAND LINE TERMINATION CHARACTER)
    ATS4 设置响应初始化字符(SET RESPONSE FORMATTING CHARACTER)
    ATS5 设置命令行编辑特性(SET COMMAND LINE EDITING CHARACTER)
    ATS6 设置停止在盲目拨号之前(SET PAUSE BEFORE BLIND DIALLING)
    ATS7 设置等待连接完成的秒数(SET NUMBER OF SECONDS TO WAIT FOR CONNECTION COMPLETION)
    ATS8 设置当遇到逗号,拨出被修改者使用等待的秒数(SET NUMBER OF SECONDS TO WAIT WHEN COMMA DIAL MODIFIER USED)
    ATS10 设置在表明没有数据传送后断开延迟(SET DISCONNECT DELAY AFTER INDICATING THE ABSENCE OF DATA CARRIER)
    ATT 选择音频(SELECT TONE DIALLING)
    ATV 设置结果代码格式方式(SET RESULT CODE FORMAT MODE)
    ATX 设置连接结果码格式和呼叫监视(SET CONNECT RESULT CODE FORMAT AND CALL MONITORING)
    ATZ 设定用户定义当前所有参数(SET ALL CURRENT PARAMETERS TO USER DEFINED PROFILE)
    AT&C 设置DCD功能模式(SET DCD FUNCTION MODE)
    AT&D 设置DTR功能模式(SET DTR FUNCTION MODE)
    AT&F 设置缺省制造商当前所有参数(SET ALL CURRENT PARAMETERS TO MANUFACTURER DEFAULTS)
    AT&V 显示当前配置(DISPLAY CURRENT CONFIGURATION)
    AT&W 存储用户定义的当前参数(STORE CURRENT PARAMETER TO USER DEFINED PROFILE)
    AT+DR V.42bis数据压缩控制报告(V.42BIS DATA COMPRESSION REPORTING CONTROL)
    AT+DS V.42bis 数据压缩控制(V.42BIS DATA COMPRESSION REPORTING CONTROL)
    AT+GCAP 请求完成电讯能力清单(REQUEST COMPLETE TA CAPABILITIES LIST)
    AT+GMI 要求制造商鉴定(REQUEST MANUFACTURER IDENTIFICATION)
    AT+GMM 请求电讯模型鉴定(REQUEST TA MODEL IDENTIFICATION)
    AT+GMR 请求电讯修改鉴定(REQUEST TA REVISION IDENTIFICATION)
    AT+GOI 请求全球性对象鉴定(REQUEST GLOBAL OBJECT IDENTIFICATION)
    AT+GSN 请求电讯序号标志(IMEI)(REQUEST TA SERIAL NUMBER IDENTIFICATION (IMEI))
    AT+ICF 设置特讯控制性构筑(SET TE-TA CONTROL CHARACTER FRAMING)
    AT+IFC 设置特讯本地流量控制(SET TE-TA LOCAL DATA FLOW CONTROL)
    AT+ILRR 设置特讯本地速率报告模式(SET TE-TA LOCAL RATE REPORTING MODE)
    AT+IPR 设定当地固定速率(SET FIXED LOCAL RATE)

    在TCPIP 应用上的AT指令(AT Commands for TCPIP Application Toolkit)
    AT+CIPSTART 启动TCP或UDP的连接(START UP TCP OR UDP CONNECTION)
    AT+CIPSEND 发送数据通过TCP或UDP的连接(SEND DATA THROUGH TCP OR UDP CONNECTION)
    AT+CIPCLOSE 关闭连接(CLOSE CONNECTION)
    AT+CIPSHUT 撤销GPRS PDP 环境(DEACTIVATE GPRS PDP CONTEXT)
    AT+CLPORT 设置本地端口(SET LOCAL PORT)
    AT+CSTT 设置APN, 用户名, 密码(SET APN, USER NAME, PASSWORD)
    AT+CIICR 提出与GPRS 或CSD 的无线连接(BRING UP WIRELESS CONNECTION WITH GPRS OR CSD)
    AT+CIFSR 获得本地IP地址(GET LOCAL IP ADDRESS)
    AT+CIPSTATUS 查询当前的连接状态(QUERY CURRENT CONNECTION STATUS)
    AT+CDNSCFG 配置域名服务器(CONFIGURE DOMAIN NAME SERVER)
    AT+CDNSGIP 查询所给出域名的IP地址(QUERY IP ADDRESS OF GIVEN DOMAIN NAME)
    AT+CDNSORIP 连接用IP 地址或域名服务器(CONNECT WITH IP ADDRESS OR DOMAIN NAME SERVER)
    AT+CIPHEAD 接收数据时加上一个IP头(ADD AN IP HEADER WHEN RECEIVING DATA)
    AT+CIPATS 设置自动送出时间(SET AUTO SENDING TIMER)
    AT+CIPSPRT 当送数据时设置‘〉’提示(SET PROMPT OF ‘>’ WHEN SENDING DATA)
    AT+CIPSERVER 配置作为服务器(CONFIGURE AS SERVER)
    AT+CIPCSGP 设置CSD 或GPRS 为连接方式(SET CSD OR GPRS FOR CONNECTION MODE)
    AT+CIPCCON 选择连接(CHOOSE CONNECTION)
    AT+CIPFLP 固定本地端口(FIX LOCAL PORT)
    AT+CIPSRIP 设置从何处接收的数据(SHOW WHERE RECEIVED DATA FROM)
    AT+CIPDPDP 设置是否检查GPRS网络时间状态(SET WHETHER CHECK STATE OF GPRS NETWORK TIMING)
    AT+CIPSCONT 保存TCPIP应用背景(SAVE TCPIP APPLICATION CONTEXT)
    AT+CIPMODE 选择TCPIP 应用方式(SELECT TCPIP APPLICATION MODE)
    AT+CIPCCFG 配置透明传输模式(CONFIGURE TRANSPARENT TRANSFER MODE)

    根据GSM07.07的AT指令(AT Commands According to GSM07.07)
    AT+CACM 累计电话计量器(ACM) 重新设置或询问(ACCUMULATED CALL METER(ACM) RESET OR QUERY)
    AT+CAMM 累计电话计量器最大值的设置或查询(ACCUMULATED CALL METER MAXIMUM(ACMMAX) SET OR QUERY)
    AT+CAOC 咨询收费 (ADVICE OF CHARGE)
    AT+CBST 选择持有人服务类型(SELECT BEARER SERVICE TYPE)
    AT+CCFC 呼叫转移号码和条件控制(CALL FORWARDING NUMBER AND CONDITIONS CONTROL)
    AT+CCUG 关闭用户群控制(CLOSED USER GROUP CONTROL)
    AT+CCWA 呼叫等待控制(CALL WAITING CONTROL)
    AT+CEER 延期的错误报告(EXTENDED ERROR REPORT)
    AT+CGMI 要求制造商识别(REQUEST MANUFACTURER IDENTIFICATION)
    AT+CGMM 要求样式识别(REQUEST MODEL IDENTIFICATION)
    AT+CGMR 要求修正识别(REQUEST REVISION IDENTIFICATION)
    AT+CGSN 要求产品序号识别(同等+GSN )(REQUEST PRODUCT SERIAL NUMBER IDENTIFICATION(IDENTICAL WITH +GSN))
    AT+CSCS 选择TE 字符集(SELECT TE CHARACTER SET)
    AT+CSTA 选择地址类型(SELECT TYPE OF ADDRESS)
    AT+CHLD 电话挂起并多线(电话会议)(CALL HOLD AND MULTIPARTY)
    AT+CIMI 请求国际移动用户身份(REQUEST INTERNATIONAL MOBILE SUBSCRIBER IDENTITY)
    AT+CKPD 键盘控制(KEYPAD CONTROL)
    AT+CLCC 我的当前通话名单(LIST CURRENT CALLS OF ME)
    AT+CLCK 设备锁(FACILITY LOCK)
    AT+CLIP 呼叫线路识别介绍(CALLING LINE IDENTIFICATION PRESENTATION)
    AT+CMEE 报告移动设备错误(REPORT MOBILE EQUIPMENT ERROR)
    AT+COLP 连接的线路识别介绍(CONNECTED LINE IDENTIFICATION PRESENTATION)
    AT+COPS 操作员选择(OPERATOR SELECTION)
    AT+CPAS 移动设备的活动状态(MOBIL EQUIPMENT ACTIVITY STATUS)
    AT+CPBF 找到电话簿条目(FIND PHONEBOOK ENTRIES)
    AT+CPBR 读当前的电话本条目(READ CURRENT PHONEBOOK ENTRIES)
    AT+CPBS 选择电话本记忆存贮区(SELECT PHONEBOOK MEMORY STORAGE)
    AT+CPBW 写电话本条目(WRITE PHONEBOOK ENTRY)
    AT+CPIN 输入PIN(ENTER PIN)
    AT+CPWD 改变密码(CHANGE PASSWORD)
    AT+CR 服务报告控制(SERVICE REPORTING CONTROL)
    AT+CRC 设置手机结果码为来电标志(SET CELLULAR RESULT CODES FOR INCOMING CALL INDICATION)
    AT+CREG 网络注册(NETWORK REGISTRATION)
    AT+CRLP 选择无线电链路协议PARAM.ETER(SELECT RADIO LINK PROTOCOL PARAM.ETER)
    AT+CRSM 有限的SIM 通入(RESTRICTED SIM ACCESS)
    AT+CSQ 信号质量报告(SIGNAL QUALITY REPORT)
    AT+FCLASS 电传: 精选, 读或测试服务组(FAX: SELECT, READ OR TEST SERVICE CLASS)
    AT+FMI 电传: 报告制作的身份证明(FAX: REPORT MANUFACTURED ID)
    AT+FMM 电传: 报告模式身份证明(FAX: REPORT MODEL ID)
    AT+FMR 电传: 报告修正身份证明(FAX: REPORT REVISION ID)
    AT+VTD 长短音(TONE DURATION)
    AT+VTS DTMF以及拨号音的产生(DTMF AND TONE GENERATION)
    AT+CMUX 多重通道控制(MULTIPLEXER CONTROL)
    AT+CNUM 用户号码(SUBSCRIBER NUMBER)
    AT+CPOL 首选的操作员名单(PREFERRED OPERATOR LIST)
    AT+COPN 读操作员名字(READ OPERATOR NAMES)
    AT+CFUN 设置电话功能(SET PHONE FUNCTIONALITY)
    AT+CCLK 时钟(CLOCK)
    AT+CSIM 普通SIM 通入(GENERIC SIM ACCESS)
    AT+CALM 警报声模式(ALERT SOUND MODE)
    AT+CRSL ***等级(RINGER SOUND LEVEL)
    AT+CLVL 喇叭音量(LOUDSPEAKER VOLUME)
    AT+CMUT 静音控制(MUTE CONTROL)
    AT+CPUC 价格每单位货币表(PRICE PER UNIT CURRENCY TABLE)
    AT+CCWE 电话计量器最大值(CALL METER MAXIMUM EVENT)
    AT+CBC 电池充电(BATTERY CHARGE)
    AT+CUSD 非结构化补充业务数据(UNSTRUCTURED SUPPLEMENTARY SERVICE DATA)
    AT+CSSN 辅助服务的通知(SUPPLEMENTARY SERVICES NOTIFICATION)

    根据GSM07.05的AT指令(AT Commands According to GSM07.05)
    AT+CMGD 删除SMS 短信(DELETE SMS MESSAGE)
    AT+CMGF 选择SMS 短信格式(SELECT SMS MESSAGE FORMAT)
    AT+CMGL 从首选存储器的SMS短信清单(LIST SMS MESSAGES FROM PREFERRED STORE)
    AT+CMGR 读SMS短信(READ SMS MESSAGE)
    AT+CMGS 发送SMS短信(SEND SMS MESSAGE)
    AT+CMGW 往内存写SMS短信(WRITE SMS MESSAGE TO MEMORY)
    AT+CMSS 从存储器发送SMS短信(SEND SMS MESSAGE FROM STORAGE)
    AT+CMGC 发送SMS短信指令(SEND SMS COMMAND)
    AT+CNMI 新的SMS短信标志(NEW SMS MESSAGE INDICATIONS)
    AT+CPMS 首选SMS短信存储区(PREFERRED SMS MESSAGE STORAGE)
    AT+CRES 恢复SMS 设置(RESTORE SMS SETTINGS)
    AT+CSAS 保存SMS短信设置(SAVE SMS SETTINGS)
    AT+CSCA SMS 服务中心地址(SMS SERVICE CENTER ADDRESS)
    AT+CSCB 选择小区广播短讯(SELECT CELL BROADCAST SMS MESSAGES)
    AT+CSDH 显示SMS 文本方式参量(SHOW SMS TEXT MODE PARAMETERS)
    AT+CSMP 设置SMS 文本方式参量(SET SMS TEXT MODE PARAMETERS)
    AT+CSMS 选择信息服务(SELECT MESSAGE SERVICE)

    GPRS 支持的AT指令(AT Commands for GPRS Support)
    AT+CGATT 从GPRS服务附加/分离(ATTACH/DETACH FROM GPRS SERVICE)
    AT+CGDCONT 定义PDP环境(DEFINE PDP CONTEXT)
    AT+CGQMIN 服务质量概况(最低可接受)(QUALITY OF SERVICE PROFILE (MINIMUM ACCEPTABLE))
    AT+CGQREQ 服务质量概况(被请求的)(QUALITY OF SERVICE PROFILE (REQUESTED))
    AT+CGACT 环境激活(CONTEXT ACTIVATION)
    AT+CGDATA 进入数据状态(ENTER DATA STATE)
    AT+CGPADDR 显示PDP地址(SHOW PDP ADDRESS)
    AT+CGCLASS GPRS移动站种类(GPRS MOBILE STATION CLASS)
    AT+CGEREP 控制未经请求GPRS 事件报告(CONTROL UNSOLICITED GPRS EVENT REPORTING)
    AT+CGREG 网络注册状态(NETWORK REGISTRATION STATUS)
    AT+CGSMS 为MO SMS 消息选择服务(SELECT SERVICE FOR MO SMS MESSAGES)
    AT+CGCOUNT GPRS打包计数(GPRS PACKET COUNTERS)

    SIM应用集的AT指令(AT Commands for SIM Application Toolkit)
    不大会翻译。。。
    +STC: ()
    +STGC=… ()
    +STCR=… ()
    +STPD=… ()
    +STMS=… ()
    +STEV=… ()
    +STRT=… ()
    +STTONE=… ()

    专有的simcom AT指令(AT Commands Special for SIMCOM)
    AT+ECHO 回音消除技术控制(ECHO CANCELLATION CONTROL)
    AT+ SIDET 改变侧音增益等级(CHANGE THE SIDE TONE GAIN LEVEL)
    AT+CPOWD 断电(POWER OFF)
    AT+SPIC 时间保持以输入SIM PIN/PUK(TIMES REMAIN TO INPUT SIM PIN/PUK)
    AT+CMIC 改变手机增益等级(CHANGE THE MICOPHONE GAIN LEVEL)
    AT +UART 配置双串口模式 (CONFIGURE DUAL SERIAL PORT MODE)
    AT+CALARM 设置警报(SET ALARM)
    AT+CADC 读ADC(READ ADC)
    AT +CSNS 唯一编号模式(SINGLE NUMBERING SCHEME)
    AT +CDSCB 重新设置小区广播(RESET CELLBROADCAST)
    AT +CMOD 配置交替式来电(CONFIGURE ALTERNATION MODE CALLS)
    AT +CFGRI 当使用URC时表明RI(INDICATE RI WHEN USING URC)
    AT+CLTS 获取本地时间标志(GET LOCAL TIMESTAMP)
    AT+CEXTHS 外部耳机插孔控制(EXTERNAL HEADSET JACK CONTROL)
    AT+CEXTBUT 耳机按钮状态报告(HEADSET BUTTON STATUS REPORTING)
    AT+CSMINS SIM卡插入状况报告(SIM INSERTED STATUS REPORTING)
    AT+CLDTMF 本地的DTMF音生成(LOCAL DTMF TONE GENERATION)
    AT+CDRIND 政务语音/数据/传真来电或GPRS的PDP方面终止标志(CS VOICE/DATA/FAX CALL OR GPRS PDP CONTEXT TERMINATION INDICATION)
    AT+CSPN 从SIM获得服务提供商名称(GET SERVICE PROVIDER NAME FORM. SIM)
    AT+CCVM 获得并设置SIM的语音信箱号码(GET AND SET THE VOICE MAIL NUMBER ON THE SIM)
    AT+CBAND 取得或设置移动波段操作(GET AND SET MOBILE OPERATION BAND)
    AT+CHF 配置免提操作(CONFIGURES HANDS FREE OPERATION)
    AT+CHFA 交换音频频道(SWAP THE AUDIO CHANNELS)
    AT+CSCLK 配置慢时钟(CONFIGURE SLOW CLOCK)
    AT+CENG 开启或关闭工程模式(SWITCH ON OR OFF ENGINEERING MODE)
    AT+SCLASS0 当收到0级短讯存储0级手机短信到SIM(STORE CLASS 0 SMS TO SIM WHEN RECEIVED CLASS 0 SMS)
    AT+CCID 显示ICCID(SHOW ICCID)


    AT+CALARM   设置警报
    AT+CADC    读ADC
    AT+CSNS    单号码方案
    AT+CDSCB   重启小区广播
    AT+CMOD   配置交替模式呼叫
    AT+CFGRI   用URC时通知RI
    AT+CLTS   获得当地时间
    AT+CEXTHS  额外的手机插座控制
    AT+CEXTBUT  手机按键状态报告
    AT+CSMINS  SIM插入状态报告
    AT+CLDTMF  当地DTMF(双音多频)声音发生器
    AT+CDRIND  连接状态通知
    AT+CSPN   从SIM中得到服务运营商的名字
    AT+CCVM   在SIM上得到和设置声音数字
    AT+CBAND   得到和设置移动运营商联合
    AT+CHF    配置手动自由业务
    AT+CHFA   转换声音通道
    AT+CSCLK   配置慢时钟
    AT+CENG   ON和OFF模式之间转换
    AT+SCLASS0  当收到CLASS 0 SMS时存储到SIM卡内
    AT+CCID   显示卡ID号
    AT+HGPRS   挂断GPRS
    AT+UART   配置双串口模式

    经常用到的一些AT指令
    simcom的(BENQ就不写了):
    1、AT+IPR?(查询模块的波特率)
    模块会返回+IPR: 9600之格式的信息,9600即波特率,注意9600与冒号之间是有空格的;

    2、AT+IPR=9600;&W(设置模块的固定波特率)
    此命令写一次之后就可以了,simcom支持掉电保护,之后此模块波特率就一直为9600了,成功返回OK,错误返回ERROR,说明命令格式错误;

    3、AT+CIPCCFG=3,2,1024,1(设定模块缓冲区为1024字节)
    此命令成功返回OK,错误返回ERROR,说明命令格式错误,=号后面数据根据个人需求填写;

    4、AT+CIPCCFG?(查询模块缓冲区的大小)
    模块会返回+CIPCCFG:3,2,1024,1这种格式的信息。1024即为缓冲区大小;

    5、AT+CFUN=1,1(全功能命令,立即执行)
    此命令可以开启simcom模块的大部分功能,一般在初始化模块的时候都要写上;

    6、AT+CLIP=1(显示来电号码)
    显示来电号码,如果没有这条指令,则来电话模块只送出ring,不送出号码;

    7、ATH(挂断电话)
    这个就不用多说了,送出就挂断电话,在Benq里还可以做完全断开gprs网络用;

    8、ATA(接听电话)
    接听电话,也不用多说了,来电话发这个给模块就可以接听了;

    9、AT+VTS="dt"(dtmf音)
    开启dtmf音,dtmf音就是你拨打10086时提示你按几键发给10086的,开始我也不知道。。。听同事说才明白,benq开启dtmf音是AT+WDTMF=1,0,7,7,麻烦;

    10、AT+VTD=70(dtmf音持续长短)
    持续项为0~255;

    11、AT+CLVL=(通话音量大小)
    范围是0~100,数值越小,则音量越轻;

    12、AT+SIDET=(侧音灵敏度大小)
    范围是1~32767,越大越灵敏,日常通话建议设为0,设大了容易产生啸叫,在设置监听功能时可以把此值设大一些;

    13、AT+CMIC=0,15(改变麦克风的增益)
    逗号前有0,1两项,1为免提通话状态,逗号后即音量大小了,当然是对方听到你的。此功能是切换免提用的;

    14、AT+CHFA=(0/1此命令用来切换两个音频通道)
    simcom提供两个音频通道,用此命令来切换;

    15、AT+CMGS=(发送短信的长度)
    当然你也可以不用发=号,则可以写任意长度短信(模块支持长度范围内);

    16、AT+CMGL=0(读取新sms)
    返回+CMGL: 21(如果有短消息的话)之格式的信息,后面回车换行跟着就是短信内容了;

    17、AT+CMGD=(删除第几条短信)
    后面是几就删除第几条短信咯;

    18、AT+CNMI=2,1(新sms来时送出脉冲)
    此命令最好在初始模块时就加上,如果没有此命令,嘿嘿,有短信你也不知道了,正确放回OK,错误返回ERROR,格式错误;

    19、AT+CSCA?(读取sms服务中心号码)
    返回+CSCA: "+8613800532500",145之格式的信息,我是青岛的,所以返回是这个号码;

    20、AT+CIPSHUT(关闭移动场景返回到IP INITIAL)
    在连线不成功时这条命令挺管用的,可以断开连接然后可以再次执行连线,建议跟AT+CIPCLOSE一起用(个人建议),如果这条命令都不行的话就只有给模块重启了,移动场景是什么到现在我也不明白,谁明白可以告诉我啊;

    21、AT+CIPSEND=(通过gprs网络发送数据指令)
    等号后面跟发送数据长度,返回〉号后可以填写数据,达到规定数据量自动发送,也支持无规定数据量的发送,发送成功返回SEND OK,不成功返回SEND FAIL,也可能不返回东东;

    22、AT+CIPSTART="TCP","192.43.10.157","4005"(gprs拨号连线)
    正确返回OK,错误ERROR,格式错误,连上线返回CONNECT OK,连线失败返回CONNECT FAIL;格式能看懂吧应该;

    23、AT+CIPSTATUS(查询模块gprs状态)
    模块返回STATE: CONNECT OK(在线),STATE: IP IND(连线失败,接受场景配置),STATE: IP CLOSED(对方掉线或断开连接了),STATE: PDP DEACT(连接断开,你应该检查一下你的天线了),STATE: TCP CONNECTING(正在连接,这种情况下一般都连接失败,所以就直接AT+CIPCLOSE,AT+CIPSHUT一起用,然后重连得了,当然我的做法,不一定好),我碰到的只有这几种状态,其他状态没遇到过;

    24、AT+CCLK="07/03/28,06:46:30+00"(给模块设定时间日期)
    格式应该看的懂,正确放回OK,错误返回ERROR,格式错误;

    25、AT+CCLK?(读取日期时间)
    返回+CCLK: "03/01/01,16:07:46+00"之格式的信息;

    26、AT+CSQ(读取信号强度)
    返回+CSQ: 20,0之格式的信息,20为有用的值对我来说,信号强度;

    27、AT+CBC(读取电池电量)
    返回+CBC: 1,96,4149之格式的信息,0 模块由电池供电,1 模块装有电池,但不由电池供电,2 模块没有电池,3 模块电源无效, 禁止呼叫,1-100表示电量百分比,后面那个数不清楚作用,不过模块读取的电量信息不是很准,我明明装的电池有时还返回2;

  • at信息[转贴]

    2008-01-10 23:27:34

    AT指令測試成功 (外接式GPRS mode)

    ASCI碼指令

    功能

    手機回答

    AT回車

    握手

    OK

    ATE

    簡化顯示

    OK

    AT+CLCC

    來電顯示

    OK      來電話時串口輸出:RING

    AT+CNMI

    新資訊指示。這個命令選擇如何從網路上接收短資訊

    AT+CNMI=1,1,2

    設置收到短消息提示

    OK

    +CMTI:“SM”,4

    4表示手機內短消息數量

    AT+CMGL

    列出SIM卡中的短消息PDU/text

    0/REC UNREAD-未讀

    1/REC READ-已讀

    2/STO UNSENT-待發

    3/STO SENT-已發

    4/ALL-全部的)

    AT+CMGL=0

    讀取電話上全部未讀過的SMS消息

    AT+CMGL=4

    讀取全部SMS消息

    AT+CMGR=X回車

    讀取第X條短消息。資訊從+CPMS命令設定的記憶體讀取

    AT+CMGF=0回車

    PDU格式

    AT+CMGD=X回車

    刪除第X條短消息

    AT+CLIP=1,1

    來電自動顯示的指令

    ERROR

    來電話!

     

    RING   +CLIP: 13306285091,129

    AT+CMGR=1

    讀取第1條短信

    0:未讀過,新的短資訊

    1:已讀過

    第二個1表示已讀

    150 表示PDU資料的長度

    1 表示讀取第幾條短信

    +CMGR: 1,1,,150

    AT+CMGW

    SIM內存中寫入待發的短消息

    AT+CSCA

    短消息中心地址

    AT+CSCB

    選擇蜂窩廣播消息

    AT+CSMS

    選擇短消息服務。支援的服務有GSM-MOSMS-MTSMS-CB

    AT+CSDH

    顯示文本方式的參數

    ATD

    撥號命令。這個命令用來設置通話、資料或傳真呼叫

    ATH

    掛機命令

    ATA

    接電話

    AT+CEER

    擴展錯誤報告。這個命令給出當上一次通話設置失敗後中斷通話的原因。

    AT+CSNS

    單一編號方案

     

     

    用外接式GPRS mode之測試結果:

    AT+CMGL 列出SIM卡中的短消息PDU/text

      0/REC UNREAD-未讀,

      1/REC READ-已讀,

      2/STO UNSENT-待發,

      3/STO SENT-已發,

      4/ALL-全部的)

     

    出: AT+CMGL=0  //讀取電話上全部未讀過的SMS消息

    傳回: OK           //已經都讀取過

     

    送出AT+CMGL=1   //已讀

    傳回:

    +CMGL: 1,1,,23

    0791889623048014040C918896122907300000705051412285230461F8B90D

    +CMGL: 2,1,,25

    0791889623048014040C9188961229073000007050514114402306EF356C7D6E03

    +CMGL: 26,1,,155

    0791889623048014040C9188961115106900087040510100742388833256E060A8672A4F9D50B552

    D9535455466A5F5236630966427E737D0DFF1467084EFD6B3E9805FF0C53F065B09280884C727952

    2563D0919260A8FF0C67009072980865BC672C6708FF11FF1665E5524D7E736B3EFF0C4EE5514D55

    AA59315206671F90846B3E6B0A76CA3002598267094EFB4F55554F984C6B618FCE4F8696FB6D3D8A

    623002

     

    OK

  • 另一个更详细的AT指令集[转贴]

    2008-01-10 23:25:34

     

    1.通用指令

    AT指令

    说明

    AT+CGMI

    厂家认证请求,返回模块厂家信息

    AT+CGMM

    模式认证请求,返回模块使用频段

    AT+CGMR

    修正认证请求,返回软件版本

    AT+CGSN

    查看产品IMEI序列号

    AT+CSCS

    选择TE特性设置

    AT+WPCS

    选择ME特性设置

    AT+CIMI

    IMSI认证请求,返回SIM卡的IMSI

    AT+CCID

    获得SIM卡标识

    AT+GCAP

    查看功能列表

    A/

    重复上次命令

    AT+CPOF

    停止模块的运行

    AT+CFUN

    设置模块状态

    AT+CPAS

    查看模块当前活动状态

    AT+CMEE

    选择模块错误报告方式

    AT+CKPD

    模拟小键盘控制操作

    AT+CCLK

    设置或查看当前日期和时间

    AT+CALA

    设置警报日期和时间

    AT+CRMP

    演示铃声

    AT+CRSL

    设置振铃声音大小

    2.电话控制指令

    AT指令

    说明

    ATD

    拨号

    ATH

    挂机

    ATA

    接电话

    AT+CEER

    查看呼叫失败原因

    AT+VTD

    设置DTMF(双音多频)语音长度

    AT+VTS

    发送DTMF语音

    ATDL

    重拨上一次电话号码

    ATDn

    根据DTR信号自动拨号

    ATS0

    设置自动应答

    AT+CICB

    来电信差???

    AT+CSNS

    单一编号方案???

    AT+VGR

    调整接收声音增益

    AT+VGT

    调整发送声音增益

    AT+CMUT

    设置话筒静音

    AT+SPEAKER

    话筒选择

    AT+ECHO

    设置回音取消

    AT+SIDET

    设置侧音修正

    AT+VIP

    恢复到默认语音设置

    3.网络服务指令

    AT指令

    说明

    AT+CSQ

    查看网络信号质量

    AT+COPS

    选择服务商

    AT+CREG

    查看当前网络注册状态

    AT+WOPN

    文字方式显示网络提供商

    AT+CPOL

    查看优先网络列表

    4.安全指令

     

    AT指令

     

    说明

     

    AT+CPIN

     

    输入PIN

     

    AT+CPIN2

     

    输入PIN2

     

    AT+CPINC

     

    查看密码剩余尝试次数

     

    AT+CLCK

     

    锁住或解锁设备某些功能

     

    AT+CPWD

     

     

  • at+vcid来电显示

    2008-01-10 23:05:40

    +VCID=n---来电者标识。AT+VCID 启用/禁用呼叫者标识。
    参数:n = 0, 1, 2
    n = 0
    禁用呼叫者标识

    n = 1
    启用呼叫者标识,此为带格式的呼叫者报告
    n = 2
    启用呼叫者标识,此为不带格式的呼叫者报告
  • 74HC164数码显示程序[转贴]

    2007-12-30 17:34:31

    原贴地址:http://emcu.c51bbs.com/c51blog/user1/11843/archives/2006/5335.shtml

     

    74hc64很简单的串入并出芯片。经常用于单片机端口的扩展。这里给出使用74hc164驱动数码管,做静态显示的程序。可以直接调用

    //作者:晒太阳的小猪
    //个人blog:http://emcu.c51bbs.com
    //转载使用请注明
    #i nclude<reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    sbit dat=P2^6;
    sbit clk=P2^7;
    uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭
    void sendbyte(uchar byte)
    {   
            uchar num,c;
            num=tab[byte];
       for(c=0;c<8;c++)
            {dat=num&0x80;
             num=num<<1;
             clk=0;
             clk=1;
             }

    }

    void display(uint i)
    { uchar j,k,l,m;
     j=i/10;
            k=(i-10*j);
            sendbyte(k);
            sendbyte(j);
     
    }

  • 74系列芯片功能大全[转贴]

    2007-12-27 11:14:10

    7400TTL2输入端四与非门7401TTL集电极开路2输入端四与非门7402TTL2输入端四或非门7403TTL集电极开路2输入端四与非门7404TTL六反相器7405TTL集电极开路六反相器7406TTL集电极开路六反相高压驱动器7407TTL集电极开路六正相高压驱动器7408TTL2输入端四与门7409TTL集电极开路2输入端四与门7410TTL3输入端3与非门74107TTL带清除主...

    同型号的74系列、74HC系列、74LS系列芯片,逻辑功能上是一样的。74LSxx、74HCxx的使用说明可参阅74xx的使用说明。 有些型号里包含了几种型号,如74HC161资料里包含了74HC160、74HC161、74HC162、74HC163四种芯片的功能。    
    7400 TTL 2输入端四与非门
    7401 TTL 集电极开路2输入端四与非门
    7402 TTL 2输入端四或非门
    7403 TTL 集电极开路2输入端四与非门
    7404 TTL 六反相器
    7405 TTL 集电极开路六反相器
    7406 TTL 集电极开路六反相高压驱动器
    7407 TTL 集电极开路六正相高压驱动器
    7408 TTL 2输入端四与门
    7409 TTL 集电极开路2输入端四与门
    7410 TTL 3输入端3与非门
    74107 TTL 带清除主从双J-K触发器
    74109 TTL 带预置清除正触发双J-K触发器
    7411 TTL 3输入端3与门
    74112 TTL 带预置清除负触发双J-K触发器
    7412 TTL 开路输出3输入端三与非门
    74121 TTL 单稳态多谐振荡器
    74122 TTL 可再触发单稳态多谐振荡器
    74123 TTL 双可再触发单稳态多谐振荡器
    74125 TTL 三态输出高有效四总线缓冲门
    74126 TTL 三态输出低有效四总线缓冲门
    7413 TTL 4输入端双与非施密特触发器
    74132 TTL 2输入端四与非施密特触发器
    74133 TTL 13输入端与非门
    74136 TTL 四异或门
    74138 TTL 3-8线译码器/复工器
    74139 TTL 双2-4线译码器/复工器
    7414 TTL 六反相施密特触发器
    74145 TTL BCD—十进制译码/驱动器
    7415 TTL 开路输出3输入端三与门
    74150 TTL 16选1数据选择/多路开关
    74151 TTL 8选1数据选择器
    74153 TTL 双4选1数据选择器
    74154 TTL 4线—16线译码器
    74155 TTL 图腾柱输出译码器/分配器
    74156 TTL 开路输出译码器/分配器
    74157 TTL 同相输出四2选1数据选择器
    74158 TTL 反相输出四2选1数据选择器
    7416 TTL 开路输出六反相缓冲/驱动器
    74160 TTL 可预置BCD异步清除计数器
    74161 TTL 可予制四位二进制异步清除计数器
    74162 TTL 可预置BCD同步清除计数器
    74163 TTL 可予制四位二进制同步清除计数器
    74164 TTL 八位串行入/并行输出移位寄存器
    74165 TTL 八位并行入/串行输出移位寄存器
    74166 TTL 八位并入/串出移位寄存器
    74169 TTL 二进制四位加/减同步计数器
    7417 TTL 开路输出六同相缓冲/驱动器
    74170 TTL 开路输出4×4寄存器堆
    74173 TTL 三态输出四位D型寄存器
    74174 TTL 带公共时钟和复位六D触发器
    74175 TTL 带公共时钟和复位四D触发器
    74180 TTL 9位奇数/偶数发生器/校验器
    74181 TTL 算术逻辑单元/函数发生器
    74185 TTL 二进制—BCD代码转换器
    74190 TTL BCD同步加/减计数器
    74191 TTL 二进制同步可逆计数器
    74192 TTL 可预置BCD双时钟可逆计数器
    74193 TTL 可预置四位二进制双时钟可逆计数器
    74194 TTL 四位双向通用移位寄存器
    74195 TTL 四位并行通道移位寄存器
    74196 TTL 十进制/二-十进制可预置计数锁存器
    74197 TTL 二进制可预置锁存器/计数器
    7420 TTL 4输入端双与非门
    7421 TTL 4输入端双与门
    7422 TTL 开路输出4输入端双与非门
    74221 TTL 双/单稳态多谐振荡器
    74240 TTL 八反相三态缓冲器/线驱动器
    74241 TTL 八同相三态缓冲器/线驱动器
    74243 TTL 四同相三态总线收发器
    74244 TTL 八同相三态缓冲器/线驱动器
    74245 TTL 八同相三态总线收发器
    74247 TTL BCD—7段15V输出译码/驱动器
    74248 TTL BCD—7段译码/升压输出驱动器
    74249 TTL BCD—7段译码/开路输出驱动器
    74251 TTL 三态输出8选1数据选择器/复工器
    74253 TTL 三态输出双4选1数据选择器/复工器
    74256 TTL 双四位可寻址锁存器
    74257 TTL 三态原码四2选1数据选择器/复工器
    74258 TTL 三态反码四2选1数据选择器/复工器
    74259 TTL 八位可寻址锁存器/3-8线译码器
    7426 TTL 2输入端高压接口四与非门
    74260 TTL 5输入端双或非门
    74266 TTL 2输入端四异或非门
    7427 TTL 3输入端三或非门
    74273 TTL 带公共时钟复位八D触发器
    74279 TTL 四图腾柱输出S-R锁存器
    7428 TTL 2输入端四或非门缓冲器
    74283 TTL 4位二进制全加器
    74290 TTL 二/五分频十进制计数器
    74293 TTL 二/八分频四位二进制计数器
    74295 TTL 四位双向通用移位寄存器
    74298 TTL 四2输入多路带存贮开关
    74299 TTL 三态输出八位通用移位寄存器
    7430 TTL 8输入端与非门
    7432 TTL 2输入端四或门
    74322 TTL 带符号扩展端八位移位寄存器
    74323 TTL 三态输出八位双向移位/存贮寄存器
    7433 TTL 开路输出2输入端四或非缓冲器
    74347 TTL BCD—7段译码器/驱动器
    74352 TTL 双4选1数据选择器/复工器
    74353 TTL 三态输出双4选1数据选择器/复工器
    74365 TTL 门使能输入三态输出六同相线驱动器
    74365 TTL 门使能输入三态输出六同相线驱动器
    74366 TTL 门使能输入三态输出六反相线驱动器
    74367 TTL 4/2线使能输入三态六同相线驱动器
    74368 TTL 4/2线使能输入三态六反相线驱动器
    7437 TTL 开路输出2输入端四与非缓冲器
    74373 TTL 三态同相八D锁存器
    74374 TTL 三态反相八D锁存器
    74375 TTL 4位双稳态锁存器
    74377 TTL 单边输出公共使能八D锁存器
    74378 TTL 单边输出公共使能六D锁存器
    74379 TTL 双边输出公共使能四D锁存器
    7438 TTL 开路输出2输入端四与非缓冲器
    74380 TTL 多功能八进制寄存器
    7439 TTL 开路输出2输入端四与非缓冲器
    74390 TTL 双十进制计数器
    74393 TTL 双四位二进制计数器
    7440 TTL 4输入端双与非缓冲器
    7442 TTL BCD—十进制代码转换器
    74352 TTL 双4选1数据选择器/复工器
    74353 TTL 三态输出双4选1数据选择器/复工器
    74365 TTL 门使能输入三态输出六同相线驱动器
    74366 TTL 门使能输入三态输出六反相线驱动器
    74367 TTL 4/2线使能输入三态六同相线驱动器
    74368 TTL 4/2线使能输入三态六反相线驱动器
    7437 TTL 开路输出2输入端四与非缓冲器
    74373 TTL 三态同相八D锁存器
    74374 TTL 三态反相八D锁存器
    74375 TTL 4位双稳态锁存器
    74377 TTL 单边输出公共使能八D锁存器
    74378 TTL 单边输出公共使能六D锁存器
    74379 TTL 双边输出公共使能四D锁存器
    7438 TTL 开路输出2输入端四与非缓冲器
    74380 TTL 多功能八进制寄存器
    7439 TTL 开路输出2输入端四与非缓冲器
    74390 TTL 双十进制计数器
    74393 TTL 双四位二进制计数器
    7440 TTL 4输入端双与非缓冲器
    7442 TTL BCD—十进制代码转换器
    74447 TTL BCD—7段译码器/驱动器
    7445 TTL BCD—十进制代码转换/驱动器
    74450 TTL 16:1多路转接复用器多工器
    74451 TTL 双8:1多路转接复用器多工器
    74453 TTL 四4:1多路转接复用器多工器
    7446 TTL BCD—7段低有效译码/驱动器
    74460 TTL 十位比较器
    74461 TTL 八进制计数器
    74465 TTL 三态同相2与使能端八总线缓冲器
    74466 TTL 三态反相2与使能八总线缓冲器
    74467 TTL 三态同相2使能端八总线缓冲器
    74468 TTL 三态反相2使能端八总线缓冲器
    74469 TTL 八位双向计数器
    7447 TTL BCD—7段高有效译码/驱动器
    7448 TTL BCD—7段译码器/内部上拉输出驱动
    74490 TTL 双十进制计数器74491 TTL 十位计数器
    74498 TTL 八进制移位寄存器
    7450 TTL 2-3/2-2输入端双与或非门
    74502 TTL 八位逐次逼近寄存器
    74503 TTL 八位逐次逼近寄存器
    7451 TTL 2-3/2-2输入端双与或非门
    74533 TTL 三态反相八D锁存器
    74534 TTL 三态反相八D锁存器
    7454 TTL 四路输入与或非门
    74540 TTL 八位三态反相输出总线缓冲器
    7455 TTL 4输入端二路输入与或非门
    74563 TTL 八位三态反相输出触发器
    74564 TTL 八位三态反相输出D触发器
    74573 TTL 八位三态输出触发器
    74574 TTL 八位三态输出D触发器
    74645 TTL 三态输出八同相总线传送接收器
    74670 TTL 三态输出4×4寄存器堆
    7473 TTL 带清除负触发双J-K触发器
    7474 TTL 带置位复位正触发双D触发器
    7476 TTL 带预置清除双J-K触发器
    7483 TTL 四位二进制快速进位全加器
    7485 TTL 四位数字比较器
    7486 TTL 2输入端四异或门
    7490 TTL 可二/五分频十进制计数器
    7493 TTL 可二/八分频二进制计数器
    7495 TTL 四位并行输入\输出移位寄存器
    7497 TTL 6位同步二进制乘法器
     
    常用74系列标准数字电路的中文名称资料
    器件代号 器件名称 74 74LS 74HC
    00 四2输入端与非门 √ √ √
    01 四2输入端与非门(OC) √ √
    02 四2输入端或非门 √ √ √
    03 四2输入端与非门(OC) √ √
    04 六反相器 √ √ √
    05 六反相器(OC) √ √
    06 六高压输出反相器(OC,30V) √ √
    07 六高压输出缓冲,驱动器(OC,30V) √ √ √
    08 四2输入端与门 √ √ √
    09 四2输入端与门(OC) √ √ √
    10 三3输入端与非门 √ √ √
    11 三3输入端与门 √ √
    12 三3输入端与非门(OC) √ √ √
    13 双4输入端与非门 √ √ √
    14 六反相器 √ √ √
    15 三3输入端与门 (OC) √ √
    16 六高压输出反相器(OC,15V) √
    17 六高压输出缓冲,驱动器(OC,15V) √
    20 双4输入端与非门 √ √ √
    21 双4输入端与门 √ √ √
    22 双4输入端与非门(OC) √ √
    25 双4输入端或非门(有选通端) √ √ √
    26 四2输入端高压输出与非缓冲器 √ √ √
    27 三3输入端或非门 √ √ √
    28 四2输入端或非缓冲器 √ √ √
    30 8输入端与非门 √ √ √
    32 四2输入端或门 √ √ √
    33 四2输入端或非缓冲器(OC) √ √
    37 四2输入端与非缓冲器 √ √
    38 四2输入端与非缓冲器(OC) √ √
    40 双4输入端与非缓冲器 √ √ √
    42 4线-10线译码器(BCD输入) √ √
    43 4线-10线译码器(余3码输入) √
    44 4线-10线译码器(余3葛莱码输入) √
    48 4线-7段译码器 √
    49 4线-7段译码器 √
    50 双2路2-2输入与或非门 √ √ √
    51 2路3-3输入,2路2-2输入与或非门 √ √ √
    52 4路2-3-2-2输入与或门 √
    53 4路2-2-2-2输入与或非门 √
    54 4路2-3-3-2输入与或非门 √ √
    55 2路4-4输入与或非门 √
    60 双4输入与扩展器 √ √
    61 三3输入与扩展器 √
    62 4路2-3-3-2输入与或扩展器 √
    64 4路4-2-3-2输入与或非门 √
    65 4路4-2-3-2输入与或非门(OC) √
    70 与门输入J-K触发器 √
    71 与或门输入J-K触发器 √
    72 与门输入J-K触发器 √
    74 双上升沿D型触发器 √ √
    78 双D型触发器 √ √
    85 四位数值比较器 √
    86 四2输入端异或门 √ √ √
    87 4位二进制原码/反码 √
    95 4位移位寄存器 √
    101 与或门输入J-K触发器 √
    102 与门输入J-K触发器 √
    107 双主-从J-K触发器 √
    108 双主-从J-K触发器 √
    109 双主-从J-K触发器 √
    110 与门输入J-K触发器 √
    111 双主-从J-K触发器 √ √
    112 双下降沿J-K触发器 √
    113 双下降沿J-K触发器 √
    114 双下降沿J-K触发器 √
    116 双4位锁存器 √
    120 双脉冲同步驱动器 √
    121 单稳态触发器 √ √ √
    122 可重触发单稳态触发器 √ √ √
    123 可重触发双稳态触发器 √ √ √
    125 四总线缓冲器 √ √ √
    126 四总线缓冲器 √ √ √
    128 四2输入端或非线驱动器 √ √ √
    132 四2输入端与非门 √ √ √ 
  • [论坛] 为什么要选用CPUVIEW?2007-11-29

    2007-12-02 00:19:14

    大家好,最近有很多用户在询问有关CPUVIEW的一些相关信息,但很多朋友均会提出一个问题,就是我为什么要选用CPUVIEW呢?现在我们通过列出一些CPUVIEW的优势来让大家了解一下!

    1,CPUVIEW是一个通用的图形化单片机编程系统(可视化单片机编程系统),支持编译器及用户库的扩展,所以可以支持到任意的CPU和外部扩展设备;(CPUBBS论坛的可编程可扩展多功能采集卡就是利用此功能扩展出来支持ARM的;)并且因为其通用,您可以不用因为更换一种型号的单片机,又去熟悉另一种平台,省去了不必要的重复学习的时间(我们会不断地增加库的);

    2,图形化是以后的趋势,能让我们快速地开发产品,并且只要按简单的规则编程,是极难出现普通编程的错误的;大大缩短了开发周期;库中的节点都是标准化的,所以效率高,不易出错;这种高效性是普通编程所不具备的;

    3,低廉的成本,CPUVIEW系统价格低,能为您省下不少的系统购买成本,并且是支持通用平台,只购买一套,只要库和编译器有扩展库提供,您的平台就可以支持,不用换一种系统购买一个平台;比如有些系统,它能支持一些芯片开发,但是其芯片类型必须特定,价格也高,所以并没有CPUVIEW有优势;

    4,用传统的编程,您需要编写流程图,非常麻烦,而CPUVIEW则相反,您可以一边编程,程序一边自动产生了程序架构,就算日后要重新温习和理解程序,也是非常容易的,因为程序框架是自动产生的;这是传统编程所不具备的;

    5,每个自定义库的节点均有提供帮助信息,有些配置稍复杂的会提供辅助性设计工具,十分方便;这是普通传统编程很少具备的;

    6,用户并不需要太多的单片机编程知识,也不需要专门去学习C语言,或汇编语言,以及各种编译平台,用CPUVIEW,只需要简单的配置,即可完成这一切,这也是传统的编程平台和编程方法所不具备的;

    7,我们配套的一些学习的板卡,价格低廉,可以直接应用到项目中去,简单易用,这也是普通的开发板所不具备的;

    这里我们简单列出了几点;相信大家对为什么要选择CPUVIEW也有了一个自己的认识!我们会努力做得更好,谢谢大家的支持与关注!谢谢!

    cpuview专题贴如下所示:
    http://www.cpubbs.com/forum/view ... &extra=page%3D1

    联系我们:
    http://www.cpubbs.com/market/sho ... shann&shannid=2

    [ 本帖最后由 cpubbs 于 2007-11-29 16:30 编辑 ]
  • 51定时器产生PWM(转贴)

    2007-11-28 21:52:23

    转贴自:

    http://blog.21ic.com/user1/3075/archives/2006/28750.html

     

    51定时器产生PWM

    dmjkun 发表于 2006-9-18 9:52:00

    使用普通51的定时器产生PWM信号,不需其它程序参与,本人觉得挺简练的,效果不错,已经用于多个项目,不过设置PWM的频率时,要注意设置所产生的频率是否超出其上限值。

    /******************************************************************************
    *   函数名称:PWM_Set
    *   函数版本:1.0
    *   创建日期:2004/07/05
    *   功能描述:计算PWM波50Hz定时器的重装值
    *   参    数:PWM波的占空比
    *   返    回:无
    *   修改记录:
    *******************************************************************************/
    void PWM_Set( uint uiFreq, uchar ucScale )
    {
     if( ucScale > 100 )      //占空比不可能大于100%
      return;
     s_ulCycle = SYS_OSC/SYS_DIV/uiFreq;
     s_uiHighTime = 65535-s_ulCycle*ucScale/100;
     s_uiLowTime  = 65535-s_ulCycle*(100 - ucScale)/100;
    }

    /******************************************************************************
    *   函数名称:PWM_Tm0ISR
    *   函数版本:1.0
    *   创建日期:2004/07/05
    *   功能描述:产生PWM波中断服务程序
    *   参    数:无
    *   返    回:无
    *   修改记录:
    *******************************************************************************/
    void PWM_Tm1ISR(void) interrupt 3
    {
     TR1 = 0;
     s_bStatus = ~s_bStatus;  //取反标志位,表示该输出高电平或低电平

     if( s_bStatus )    //输出高电平
     {
      TH1 = s_uiHighTime>>8;
      TL1 = s_uiHighTime;
      POW_CTRL = 1;
     }
     else      //输出低电平
     {
      TH1 = s_uiLowTime>>8;
      TL1 = s_uiLowTime;
      POW_CTRL = 0;
     }
     TR1 = 1;
    }

1242/7<1234567>
Open Toolbar