当前位置:文档之家› 基础芯片学习资料

基础芯片学习资料

三极管2N3906特性:即开即用,小功率,放大倍数 100-400,集电极-发射集最小雪崩电压Vceo(V):40;集电极最大电流Ic(max)(mA):0.200;直流电流增益hFE最大值(dB):300;直流电流增益hFE最小值(dB):100封装和管脚:功能: 即插即用开关, 一般放大器(放大倍数在100—400)静态工作点:R1、R2、R4组成基极分压偏置电路,使R1上电压约为0.8V,则R4上电压为0.8-0.65=0.15V,Ic≈Ie=0.15/100=0.0015A=1.5mA,Uc=-6+Ic*R3=-3V。

电路所示的参数,当负电阻抗是2K时,三极管的输出负载是10K(R3与RL并联),交流负反馈电阻R4是100,因此电压放大倍数约是10K/100=100。

由于这是一个简单的单管放大电路,所以它的放大倍数随负载电阻的变化而变化。

芯片AT24C02AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。

AT24C02有一个16字节页写缓冲器。

该器件通过IC总线接口进行操作,有一个专门的写保护功能。

1功能AT24C02支持IC,总线数据传送协议IC,总线协议规定任何将数据传送到总线的器件作为发送器。

任何从总线接收数据的器件为接收器。

数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。

主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。

2. 封装。

管脚封装程序及说明#include<reg52.h>#define uchar unsigned char#define uint unsigned int//单片机定义引脚sbit sda=P2^0;sbit sclk=P2^1;//函数声明void delay_ms(uint n); //延时1msvoid init();//初始化IICvoid start(); //起始信号void stop(); //终止信号void write_1byte(uchar dat); //往总线写入一个字节uchar read_1byte(); //从总线读取一个字节数据void write_addr(uchar addr,uchar dat);//往addr地址处写入一个字节uchar read_addr(uchar addr); //从addr处读取一个字节,并返回//主函数void main(){init();//初始化函数write_addr(4,0xf0);//往addr地址处写入一个字节delay_ms(1000);//延时1s钟,等待写入P1=read_addr(4); //从addr处读取一个字节,并返回while(1);}//延时1msvoid delay_ms(uint n){uint i,j;for(i=n;i>0;i--)for(j=110;j>0;j--);}//初始化IICvoid init(){sda=1;//释放数据线sclk=1;//时钟线空闲}//起始信号void start() //先同为高,然后6us左右sda由高到低跳变,保持低大于4us{sclk=1; //起始的时候都为高电平sda=1;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sda=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sclk=0;}//终止信号void stop() //先同为低,然后sclk变为高,6us左右后sda由低到高跳变,保持大于4.7us{sda=0; //起始的时候都为低电平sclk=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sclk=1;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sda=1;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();}//应答void acknowledge(){uchar i=0;sclk=0;sda=1;//主机释放数据线sclk=1;while((sda==1)&&(i<250)) i++;//如果数据线别拉低或者超时,就跳过此句sclk=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();}//往AT24C02中写入一个字节void write_1byte(uchar dat){uchar i=0;for(i=0;i<8;i++)//循环发送8次,也即一个字节{sclk=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();//必须在sclk高电平之前变换数据if(dat&0x80)//先发送高位,最高位为1{sda=1;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();}else//最高位为0{sda=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();}{sclk=1;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sclk=0;//发送完一位后sclk拉低,允许下一次变换数据_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();dat<<=1;//左移一位}}return(dat);//返回读取的数据}//往addr地址处写入一个字节void write_addr(uchar addr,uchar dat){start();//起始write_1byte(0xa0);//IIC器件地址为0xa0,最后一位0表示写acknowledge();//等待从器件回应write_1byte(addr);//写入地址acknowledge();//等待从器件回应write_1byte(dat);//写入数据acknowledge();//等待从器件回应stop();//结束}程序及电路图原理说明:在电路图中我们可以看到A0、A1、A2引脚全部接地,所以该器件的地址为0b1010000。

7号wp脚接地,表示我们不使用写保护功能。

5号数据引脚SDA接开发板的P2.0脚,6号SCLK引脚接开发板的P2.1引脚,两个引脚都通过上拉电阻接VCC,这样当空闲时两条线都处于被拉高的状态。

开始和结束信号的定义补充在数据传送过程中,必须确认数据传送的开始和结束。

在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图2所示。

当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL 线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。

开始和结束信号都是由主器件产生。

在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。

起始信号:起始信号就是SCLK线和SDA线上特定电平的变化。

说明:SCLK和SDA先同为高,然后6us左右后sda由高到低跳变,保持低大于4us对应的代码:void start(){sclk=1; //起始的时候都为高电平sda=1;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sda=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sclk=0;}终止信号说明:SCLK和SDA先同为低,然后6us左右sclk变为高,再过6us左右sda 由低到高跳变,保持大于4.7us对应代码:void stop(){sda=0; //起始的时候都为低电平sclk=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sclk=1;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();sda=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//延时6us左右}应答信号:具体说明:先把时钟线拉低并释放数据线,然后再把时钟线拉高,开始判断sda是不是被AT24C02拉低并进行超时判断,最后把时钟线拉低对应代码:void acknowledge(){uchar i=0;sclk=0;sda=1;//主机释放数据线sclk=1;while((sda==1)&&(i<250)) i++;//如果数据线别拉低或者超时,就跳过句sclk=0;_nop_();_nop_();_nop_();//延时6us左右_nop_();_nop_();_nop_();}往AT24C02的特定地址写一个字节:写一页的时序:对应代码:(写单个字节)void write_addr(uchar addr,uchar dat){start();//起始write_1byte(0xa0);//IIC器件地址为0xa0,最后一位0表示写acknowledge();//等待从器件回应write_1byte(addr);//写入地址acknowledge();//等待从器件回应write_1byte(dat);//写入数据acknowledge();//等待从器件回应stop();//结束}。

相关主题