AVR单片机的端口位操作方法解析:位域bit field(和STM32位带bit-band不同,位带是利用位域的功能做成的)方式和移位宏方式,文中有位域和移位宏定义的例程反汇编,便于理解他们的实现机制

750 篇文章 72 订阅
订阅专栏

AVR单片机的端口位操作方法解析

来源:未知•作者:工程师周亮• 2018年11月22日 16:07 • 3708次阅读

正在上传…重新上传取消​ 0

一、常规方法

A VR 单片机的各类教材或编程应用 参考资料,对介绍的端口位操作方法不外乎宏定义及整体和某个常量相或、相与来实现某一单个位状态的改变。如:

PORT&=-(1《1);等价于:PORTB&=oxfd;作用是PB1清零而其余位不变。与之类似的还有:

PORTBl=(1《4);PB4置位,其余位不变。

PORTB=(k《4);PB4翻转,其余位不变。

上述方法,无论是常量值参与还是移位操作,用起来总嫌麻烦,不够直观,且具体常量值还需人工推算,易出错。移位操作生成的目标代码偏大,在大量运用时,占用系统内存或flash空间,执行效率低。

以实际运用效果来看,宏定义比较好。也偏好运用宏定义。C编译器在编译之前会事先进行宏替换,所以,如果宏定义讲究一些技巧,则代码执行效率将得到较大提升,编程时,操作也得心应手。

常规参考手册或 资料,建议用以下宏定义:

AVR单片机的端口位操作方法解析

上图最后几行操作因为水印看不清楚可以参考下面的内容

                  #define Set_Bit(val, bitn)    (val |=(1<<(bitn)))
                 #define Clr_Bit(val, bitn)     (val&=~(1<<(bitn)))
                #define Get_Bit(val, bitn)    (val &(1<<(bitn)) )
         三个分别用来设置某一位,清除某一位,取某一位的值.
           使用方法为.Set_Bit(PORTA,3);   Clr_Bit(PORTB,2);   Get_Bit(val,5);

根据最开始的第一张图片再加一个位取反的宏定义 

 #define Cpl_Bit(val, bitn)    (val ^=(1<<(bitn)))              2021.10.15

如此宏定义之后,可构成一个头文件,然后加入到新建工程文件中(编译器用ICC的ICC6.31A),但之前需包含相应单片机的头文件,如: MCU为AT-MEGA48,则最先包含iom48V.h之后,再包含此自制头文件,即可在程序中运用:

AVR单片机的端口位操作方法解析

此法在运用时,依旧用了移位操作,只是为了方便程序操作,只在小规模程序中运用。

下面,将充分利用C语言自身的强大位运算能力和指针相结合,构建一个ICC6.31A平台下的位定义头文件,希望能给大家一些启示。

首先明确几个基本概念:位域、地址绑定,和Vola TIle限定关键字

在ICC6.31A的安装目录中有个in-clude文件夹,里面有大量编译器开发人员已为我们开发好的各类AVR单片机预定头文件,下面是iom48v.h头文件。

AVR单片机的端口位操作方法解析

AVR单片机的端口位操作方法解析

注:每个端口均有 PIN、DDR、PORT三个八位 寄存器。

简要概括如下:

Vola TIle -词用来规定C编译器不允许对其限定的变量进行优化处理。如:

AVR单片机的端口位操作方法解析

这句宏定义要结合iom48v.h头文件来看,在前面有该头文件关于各端口寄存器的定义。上述宏语句中,ox25被强制转化为一个指针常量,实际上,上述宏定义的意义为:PORTB被强制定义在地址ox25上,即定义了一个无符号 字符型变量PORTB,且被强制绑定在ox25地址上。其他语句依此类推。

有了这个概念之后,再来了解一下C语言中位域的定义。标准c语言中,可以定义一个特殊的结构,位域,允许对定义的结构中的单个位进行操作。基本构成如下:

AVR单片机的端口位操作方法解析

下面给出的位域定义等的头文件,在自定义位操作头文件中定义了一个位域BY TE_BIT。

自定义avt_bit.h头文件(节选,以ATMEGA48为例,定义其B口)

AVR单片机的端口位操作方法解析

对各端口依同一规律均进行各位的定义即可。

结合头文件的相关定义,重新对其特定地址进行另外的绑定,结合位域的概念.进而一步步将各寄存器由一个字节分成了可操控的8个位。在上述文件中,仅表述了B端口。另外,Atmega48的端口不完全,只有B、C、D口,没有A口,且D口为8位,C口为6位.B口为7位,若外接 晶体,则PB6和PB7不能另作端口运用。所以,端口很不完整,但为了保持位域完整性和一致性,便于理解,将B、C、D三口均作8bit对待。实际操作时,千万注意不要去操作那些实际不存在的位。当然,若感兴趣,大家可改动头文件相关定义,来完善它。

为验证这个头文件,很快编写了一个 测试程序Beep.e,具体如下:

AVR单片机的端口位操作方法解析

在电路拓扑中,在ATMEGA48的PBO脚,即(14)脚外接一只 三极管(接b极)由三极管去控制一只 蜂鸣器。程序很简单。为了更直观,在PORTB口其他不用的引脚上均接了 发光二极管,此时,在测试程序中,将端口初始化函数语句改为:

DDRB=oxff;PORTB=ox00;(或PORTB=oxff;视 二极管接法而定),由二极管配合蜂鸣器来观察PBO位是否能单独动作。当然,运用此位定义头文件,可实现单片机任一口的任一位的位操作。

二、扩展运用

基于上述原理,结合C语言取地址运算符&,不难实现一个通用位定义头文件,来适合所有AVR单片机,只是代码较为复杂。大家不妨自己试试。

注意一点:以上头文件,是参考ICC6.31A编译器的include文件夹定义的,在使用前,请首先包含系统提供的MCU头文件,并将自定义头文件复制到所建工程中,然后,就可运用自如了。

就目前使用情况来看,使用AT-MEGA48/16/128的MCU较多,所以即便是定义3个对应的位操作头文件,也是可以的。通用型文件往往体积较大,编制麻烦,可读性差,不适合普通爱好者。

  AVR单片机的端口位操作方法解析 - 控制/MCU - 电子发烧友网AVR单片机的端口位操作方法解析-如此宏定义之后,可构成一个头文件,然后加入到新建工程文件中(编译器用ICC的ICC6.31A),但之前需包含相应单片机的头文件,如:MCU为AT-MEGA48,则最先包含iom48V.h之后,再包含此自制头文件,即可在程序中运用:http://www.elecfans.com/emb/danpianji/20181122820061.html

AVR的两种位操作的比较(位域方式和移位宏方式)

测试环境如下:
硬件:AT90S2313
软件:    WiinAVR gcc3.3   -Os级优化(最小size)


说明:
    由于AVR不支持位操作,所以必须通过软件来实现。下面对我所知道的两种方法进行一个简单的比较。
    1、位域方式。先定义一个位域,
            typedef struct _bit_struct
            {
                unsigned char bit0 : 1 ;
                unsigned char bit1 : 1 ;
                unsigned char bit2 : 1 ;
                unsigned char bit3 : 1 ;
                unsigned char bit4 : 1 ;
                unsigned char bit5 : 1 ;
                unsigned char bit7 : 1 ;
                unsigned char bit6 : 1 ;
            }bit_field;
        
再用一个宏    ,来指向要操作的位。
             #define  LED             GET_BITFIELD(PORTB).bit0
             #define BUTTON      GET_BITFIELD(PINB).bit7
        使用时只需要直接赋值即可:如LED =     0 ,LED = 1,  或者直接判断 LED==0    ,    LED ==1.
        这种方法类似C51中的位操作。直接。

    2、位移宏方式。主要有三个.
                #define Set_Bit(val, bitn)    (val |=(1<<(bitn)))
                #define Clr_Bit(val, bitn)     (val&=~(1<<(bitn)))
                #define Get_Bit(val, bitn)    (val &(1<<(bitn)) )
         三个分别用来设置某一位,清除某一位,取某一位的值.
           使用方法为.Set_Bit(PORTA,3);   Clr_Bit(PORTB,2);   Get_Bit(val,5);

根据最开始的第一张图片再加一个位取反的宏定义  #define Cpl_Bit(val, bitn)    (val ^=(1<<(bitn)))

2021.10.15    cpl取反指令的全称是三个字母首字母简写Converse Position Logical,
    3、测试程序.
           
说明,假设PORTB.7接按纽,PORTB.0 LED
           
测试程序完成如下操作。
                   BUTTON == 0 ,LED输出否则输出0
                   这样的目的是即测试了输入,又测试了输出1和输出0,相对全面一点。  C代码如下.

                    // testled.c     
测试AVR的位操作.
                // 
这是gcc;如是其它 编译器,请修改。
                #include <avr/io.h>

                // 
定义一个寄存器(Register)或端口(Port)的八个位
                typedef struct _bit_struct
                {
                    unsigned char bit0 : 1 ;
                    unsigned char bit1 : 1 ;
                    unsigned char bit2 : 1 ;
                    unsigned char bit3 : 1 ;
                    unsigned char bit4 : 1 ;
                    unsigned char bit5 : 1 ;
                    unsigned char bit7 : 1 ;
                    unsigned char bit6 : 1 ;
                }
bit_field;

                  //定义一个宏,用来得到每一位的值
                #define GET_BITFIELD(addr) (*((vola tile  bit_field *) (addr)))

                //定义每一个位
                #define LED             GET_BITFIELD(PORTB).bit0
                #define BUTTON      GET_BITFIELD(PINB).bit7



                #define Set_Bit(val, bitn)    (val |=(1<<(bitn)))
                #define Clr_Bit(val, bitn)     (val&=~(1<<(bitn)))
                #define Get_Bit(val, bitn)    (val &(1<<(bitn)) )

                int main( void )
                {
                    DDRB = 0x41;   //
配置PB0为输出,PB7为输入
                    if ( BUTTON==0 )     LED = 1; else LED = 0;
                    //if(!Get_Bit(PINB,7) ) 
 Set_Bit(PORTB,0);    else Clr_Bit(PORTB,0);//宏定义后面做语句也要加分号2021.10.16
                    while(1);
                }
                //     ----------------------        end         -----------------------------
    4
、测试过程。
       a.先使用位域方式。
       主程序中使用 if ( BUTTON==0 )     LED = 1; else LED = 0;
       
结果如下:
                     int main( void )
                    {
                      4a:    cf ed           ldi    r28, 0xDF    ; 223
                      4c:    d0 e0           ldi    r29, 0x00    ; 0
                      4e:    de bf           out    0x3e, r29    ; 62
                      50:    cd bf           out    0x3d, r28    ; 61
                        DDRB = 0x41;      //
配置PB0为输出,PB7为输入
                      52:    81 e4           ldi    r24, 0x41    ; 65
                      54:    87 bb           out    0x17, r24    ; 23
                        if ( BUTTON==0 )     LED = 1; else LED = 0;
                      56:    86 b3           in    r24, 0x16    ; 22
                      58:    e8 2f           mov    r30, r24
                      5a:    ff 27           eor    r31, r31
                      5c:    80 81           ld    r24, Z
                      5e:    86 fd           sbrc    r24, 6
                      60:    07 c0           rjmp    .+14         ; 0x70
                      62:    88 b3           in    r24, 0x18    ; 24
                      64:    e8 2f           mov    r30, r24
                      66:    ff 27           eor    r31, r31
                      68:    80 81           ld    r24, Z
                      6a:    81 60           ori    r24, 0x01    ; 1
                      6c:    80 83           st    Z, r24
                      6e:    06 c0           rjmp    .+12         ; 0x7c
                      70:    88 b3           in    r24, 0x18    ; 24
                      72:    e8 2f           mov    r30, r24
                      74:    ff 27           eor    r31, r31
                      76:    80 81           ld    r24, Z
                      78:    8e 7f           andi    r24, 0xFE    ; 254
                      7a:    80 83           st    Z, r24
                        while(1);
                      7c:    ff cf           rjmp    .-2          ; 0x7c

         main
函数共52Bytes.其中,从lst文件看得出:main函数的初始化用了4条 指令,8Bytes. 最后一句while(1);用了1条指令2Bytes.( for循环和do-while也是)
         DDRB=0x41
用了2条指令4Bytes. 计算一下:52-8-4-2=38Bytes,if ( BUTTON==0 )     LED = 1; else LED = 0; 这句用了19条指令38Bytes. (居然运用了3个寄存器白r24,r30,r31,和一个Z,代码真是苦涩,,我看不懂,准备以后作代码加密用

.  )
       b.
使用移位宏方式。
        if ( BUTTON==0 )     LED = 1; else LED = 0;  换为等效的     if(!Get_Bit(PINB,7) )  Set_Bit(PORTB,0);    else Clr_Bit(PORTB,0);

       
结果,main函数仅24Bytes.其它代码一样,略去所以,上面这句代码仅用了24-14=10Bytes ,5条指令。生成的代码如下:
              56:    b7 99           sbic    0x16, 7    ; 22
              58:    02 c0           rjmp    .+4          ; 0x5e
              5a:    c0 9a           sbi    0x18, 0    ; 24
              5c:    01 c0           rjmp    .+2          ; 0x60
              5e:    c0 98           cbi    0x18, 0    ; 24
    5. 
菜论:鱼和熊掌。
      由于AVR可以对 I/O脚进行sbic,sbi,cbi,这样的位操作,所以使用I/O脚操作时,移位宏可以产生高效的代码。
      例如,要实现上面的几个简单的指令,为了实现LED=1这样的类似C51的sbit的效果,我必须多付出(38-10=28Bytes)的代价。
    6......
        对于I/O脚,可以产生这样高效的代码,是因为有sbi和cbi这样的指令(但是这两指令仅限于地址在00-1F之间的地址),那么对于一般的变量,又如何呢?. 

AVR的两种位操作及比较 - 单片机/MCU论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!

单片机C环境下位操作实现方法(宏定义位域操作)
07-22
自己留着,单片机C环境下位操作实现方法(宏定义位域操作)
AVR C语言编程的小技巧-IO口置位
afgh369的专栏
12-11 3507
单片机IO口置位是编程用的比较多的操作,这是我在学习C语言编程中的一点小小心得,希望大家觉得有用! AVR 单片机的IO口是标准的双向端口,首先要设置IO口的状态,即:输入还是输出 DDRx寄存器就是AVR单片机端口方向寄存器,通过设置DDRx可以设置x端口的状态。 DDRx端口方向寄存器相应位设置为1则对应的x端口相应位为输出状态,DDRx端口方向寄存器相应位设置为0则对应的x
AVR的IO端口特性与应用
mybirdsky的专栏
01-21 377
2007-12-24 16:29:07 AVR的IO端口特性分析:0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" src="http://www.ouravr.com/attachment/guide_arm
单片机c语言位域,C语言里的位域
weixin_33691489的博客
05-23 397
C语言里的位域是一个比较复杂的问题,涉及的方面也比较多,关于位域的基础内容可以参考以下:分析代码如下:#includestruct BitSeg1{int a:4;int b:3;};struct BitSeg2{char a:4;char b:3;};int main(){struct BitSeg1 ba1;ba1.a=1;ba1.b=2;printf("第一次赋值后: a的值为:%d\tb的...
C语言单片机实际应用基础--位域(位段)
qq_27139123的博客
07-24 1217
应用场景 有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。 位域实例 结构体定义 struct bs{ unsigned int m; unsigned int n: 4; unsigned char ch: 6; }; m:占用 4 个字节(Byte)的内存; n:“:”后面的数字限定n占用的位数,不能再根据数据类型计算长度,n占用4位(Bit)内存; ch:
avr单片机stm32区别,avr单片机选型技巧
01-19
 一:avr单片机stm32区别-stm32单片机介绍  由ST厂商推出的stm32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成 本、低功耗的...
单片机与DSP中的Atmel三款带10位ADC的AVR单片机
12-10
Atmel今天宣布推出针对电池充电器、传感器终端和低端马达控制应用的 AVR(R) 闪存微控制器系列的三个新成员。 三款最新14管脚 tinyAVR(R) 产品加入到广泛的 AVR 闪存微控制器系列中。三款设备都具有管脚兼容的特点,...
单片机与DSP中的avr单片机stm32区别,avr单片机选型技巧
10-16
 一:avr单片机stm32区别-stm32单片机介绍  由ST厂商推出的stm32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成 本、低功耗的...
51、PIC、AVR、16、32-BIT系列单片机区别和特点
07-22
本文将介绍51、PIC、AVR、16、32-BIT系列单片机区别和特点
51、PIC、AVR、16、32-BIT系列单片机区别与特点
07-26
本文介绍了51、PIC、AVR、16、32-BIT系列单片机区别与特点
ICCAVR位操作
08-24
ICCAVR编译器对AVR单片机的对位操作宏定义
单片机IO位域定义及操作
qq_44829055(金丝草)的博客
05-26 1447
1、位域操作单片机IO口,结构清晰,且减少代码运算量(虽然不多哈)。 2、如果8个IO口不是P0/P1/P2/P3等,而是不同的GPIO口组合的8个,那建议使用位域操作。 范例:优先考虑,赋值一次后分别对8个IO单独赋值。 #define LED_ROW1 P2_1 #define LED_ROW1 P2_0 #define LED_ROW3 P0_1 #define LED_ROW4 P0_5 #define LED_ROW5 P2_5 #define LED_ROW
AVR c语言的位操作重点是反转操作PORTB^=(1<<2);//取反PORTB的第2位。取反~和异或^反转要警惕
二进制模----细微行动改变影响世界
11-11 1014
AVR c语言的位操作 liquanhai 2009-09-17 02:48:00 3602 收藏 1 分类专栏: 单片机C语言 文章标签: 语言 c 编译器 汇编 任务 编程 版权 单片机C语言 专栏收录该内容 4 篇文章0 订阅 订阅专栏 位操作 一个共同的任务是编程微控制器 MCU打开或关闭IO 寄存器的一些位bit 很幸运标准C 有较好的和适用的位操作功能而没有借助于汇编指令或其它非标准C 结构C 定义了一些按位进行的运算是很有用的 a | b – 按位或 这个表达式指示中a 被表达式中的b..
avrbit.h
xueyuanyuan的专栏
09-28 623
#ifndef __avrbit_h#define __avrbit_h#ifndef BIT#define BIT(x) (1 #endif//*******PA口**********#define PA0_1  PORTA|=BIT(0)#define PA1_1  PORTA|=BIT(1)#define PA2_1  PORTA|=BIT(2)#define PA3_1  PORTA|
AVR c语言的位操作
木木
09-17 3936
位操作一个共同的任务是编程微控制器 MCU打开或关闭IO 寄存器的一些位bit 很幸运标准C 有较好的和适用的位操作功能而没有借助于汇编指令或其它非标准C 结构C 定义了一些按位进行的运算是很有用的a | b – 按位或 这个表达式指示中a 被表达式中的b 按位进行或运算这惯用于打开某些位尤其常用|=的形式例如PORTA |= 0x80; // 打开位7 (最高位)a & b – 按位与 这个
如何用C语言操纵AVR的IO端口(以ICCAVR为例):
afgh369的专栏
12-11 1225
如何用C语言操纵AVR的IO端口(以ICCAVR为例):    举例一:将PB0定义为输出,且输出为高电平  DDRB=BIT(0);//定义 PB0为输出  PORTB|=BIT(0);// PB0 输出高电平    举例二:将PB0、PB1定义为输出,且PB0输出低电平,PB1均为高电平  DDRB|=BIT(0)|BIT(1);//定义 PB0、PB1为输出  PORTB|=
C语言结构体高级用法
dingxialei的博客
03-15 895
C语言结构体高级用法
字节位操作位域的应用)
erlian_beijing的博客
06-24 2673
一、单片机机 中怎样实现字节位操作: 1、ANSIC中,一般采用“读-修改-写”的方法实现单个位的位操作,通过与0“与”操作,将某一位清0。如使i变量的b0位为0,实现方法为i=i&0xfe。通过与1“或”操作,将某一位置1。如使i变量的b0位为1,实现方法为i=i|0x01。通过与1“异或”操作,将某一位取反。如使i变量的b0位取反,实现方法为i=i^0x01。 2 、通过位域方法实现
IAR AVR中很多寄存器不可以使用的解决方法
wangdongx40423p的专栏
12-11 1872
我是IAR的新手,最近搞avr才使用的IAR,在使用的过程中第一个遇到的问题就是很多寄存器不可以使用,比如PORTC,PORTD等等,这些明明是可以用的,不知道问什么不能用,后来问人终于知道了,这是IAR设置的问题,在设置里面,option->general options -> system -> enable bit defination in I/O - Include files 把位操作
STM32F103C8T6是AVR单片机吗?
最新发布
05-27
不是,STM32F103C8T6不是AVR单片机。它是一款基于ARM Cortex-M3内核的32位微控制器,由ST公司生产。AVR是另一家微控制器厂商Atmel(现在已经被Microchip收购)推出的一系列8位微控制器,基于AVR架构。虽然STM32F103C8T6和AVR单片机都是嵌入式系统中常见的微控制器,但它们的体系结构、指令集、寄存器映射方式等方面都有所差异,需要使用不同的开发工具和编程语言进行开发。因此,在开发STM32F103C8T6时,不能直接参考AVR单片机的相关资料,需要使用针对STM32F103C8T6的开发工具和参考文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 戴维宁(也叫戴维南)定理是什么?如何证明?_戴维宁定理等效电路求解_戴维宁定理习题 55579
  • PCI-E x1/x4/x8/x16四种插槽区别是什么?具体有什么作用? 42461
  • 在c++和C中,malloc函数的头文件是什么?C头文件, <stdlib.h>;C++头文件, <cstdlib> 37011
  • HDMI原理详解以及时序流程(视频是三对差分信号,音频Audio是PCM级(无压缩)传输,包含在数据包内,依靠协议规定采样)HDMI可以传输RGB与YUV两种格式 28241
  • 原来PWM这么简单!通过锯齿波作为载波和调制波经过比较,产生相应的PWM输出波形 28036

分类专栏

  • 编程 750篇
  • 硬件 400篇
  • 仿真 9篇
  • 软件 69篇
  • 常去网站 24篇

最新评论

  • 【Proteus仿真】| 51单片机——MAX7219 驱动数码管,单片机数码管显示芯片MAX7219芯片指令详解

    日子与梦693: 比如交通灯,段选接在同样的管脚,南北方向一起控制,位选是1A,1B, 东西方向一起控制,位选是2A,2B

  • 【Proteus仿真】| 51单片机——MAX7219 驱动数码管,单片机数码管显示芯片MAX7219芯片指令详解

    日子与梦693: 想要一起控制这四位数码管怎么弄?在不同的时候控制前两位或者后两位

  • 【Proteus仿真】| 51单片机——MAX7219 驱动数码管,单片机数码管显示芯片MAX7219芯片指令详解

    日子与梦693: 后两位数码管怎么没一起控制?

  • 基于UC3844多路输出电源:为什么是先把交流220V整流后再给高频变压器供电,因变压器是变化输出交流电压信号,直流如何经变压器改变电压--反激式开关电源,本质是电感充放电非变压器。线性转脉冲开关控制

    weixin_47416862: 大佬,求设计原理图,有偿,850668371

  • Socket为什么要翻译成套接字?socket的英文原义是“孔”或“插座”,这个多好理解,套接”(建立网络通讯或进程间通讯)和“字”(可交互的有序指令串)的概念。

    pdyinotia: 不错的文章 我也在疑惑套接字的翻译

大家在看

  • 提升营业厅服务质量:DuDuTalk柜台录音设备,台席质检的新选择 213
  • 香港优才优势很大!内地高考(1342 万人) 和香港高考(5 万人),你会为小孩选哪条路?
  • 学校官方网站类-【网页模板】 244
  • 2024年5月份大模型产研关键事件
  • SVN服务器实现网页端修改密码 804

最新文章

  • 电容的标称电压为什么要大于电路电压的2倍以上:1电路上电瞬间电压冲高现象。2电路中电容电感谐振电压会升高2倍以上。3电容在开关管中经常会产生倍压
  • 为什么单片机的工作电压多是3.3V?而不是3V?,以及TTL电路5V表压标称的由来
  • MOS管驱动电阻并联二极管的作用(​栅极G和原极S存在寄生电容​放电)
2024年34篇
2023年105篇
2022年283篇
2021年193篇
2020年272篇
2019年166篇
2018年48篇
2015年11篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源想给姑娘起个别致的小名武汉交通地图蜀中唐门教师培训心得体会起测名字打分女孩周易起名网免费取名测名软件台湾领导人生辰八字起名软件免费删除胡姓2019年女孩起名起名学问顾问有限公司起名小企业起名字大全关于动画起名韩姓的起名龙凤胎起小名一男一女罗氏孩子起名马氏昵称女孩起名王家男生起名字大全给男孩女孩起名字大全用诗经起名武炼巅峰漫画免费火爆辣椒情人怨遥夜起名免费网打分测试我家夫人是隐藏大佬双星物语下载思想政治表现microsoftofficevisio2003新能源发展起名霍不凡宁晴雪全文阅读免费阅读淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化