IIC驱动 IO模拟

合集下载

51单片机的I2C底层驱动程序(IO口模拟)

51单片机的I2C底层驱动程序(IO口模拟)

51单片机的I2C底层驱动程序(IO口模拟)/*Title:I2C for 80C51Author:yuyouliang51单片机(本人使用STC89C52单片机,12T模式)的I2C驱动程序,使用逻辑分析仪对该协议进行分析,发现波形比较美观,SCL 的频率在70KHz左右(11.0592M晶振),低于标准的100K,可以适应大多数的I2C器件。

如果感觉速度过快或过慢,可以自行修改延时。

希望可以给读者一个参考,给读者一些帮助!*//*i2c.h文件 */#ifndef __I2C_H_#define __I2C_H_sbit SCL = P2^1;sbit SDA = P2^0;void start_i2c(); //启动I2C总线:SCL高电平期间,SDA由高变低void stop_i2c(); //停止I2C总线:SCL高电平期间,SDA由低变高void send_i2c(unsigned char c); //主机发送一个字节,先发送最高位unsigned char receive_i2c(); //主机接收一个字节,先接收最高位void master_ack(bit ack); //主机非应答信号(填参数0)或应答信号(填参数1)void slave_ack(); //等待从机应答信号#endif/* i2c.c文件 */#include#include#include#define nop() _nop_()void start_i2c() //启动I2C总线:SCL高电平期间,SDA由高变低{SDA=1;SCL=1;nop();nop();nop();nop();SDA=0;SCL=0;}void stop_i2c() //停止I2C总线,SCL高电平期间,SDA由低变高{SDA=0;SCL=1;nop();nop();nop();nop();SDA=1;}void slave_ack() //等待从机应答信号,如果从机迟迟没有应答,则结束总线。

用IO模拟IIC方式读写EEPROM容易出现的问题

用IO模拟IIC方式读写EEPROM容易出现的问题

用IO模拟IIC方式读写EEPROM容易出现的问题 在嵌入式软件开发过程中,经常会用模拟IO的方式读写EEPROM 的操作。

有时会因程序编码的问题,出现读写数据不正确的情况。

根据笔者多年的开发经验与大家分享希望对大家有所帮助。

对EEPROM的操作常见的有两种方式:I2C,SPI;在应用中经常会用到模拟IO方式读写EEPROM。

在编写此类代码时必须要掌握I2C 与SPI协议。

I2C总线上的数据稳定规则,SCL为高电平时SDA上的数据保持稳定,SCL为低电平时允许SDA变化。

如果SCL处于高电平时,SDA上产生下降沿,则认为是起始位,SDA上的上升沿认为是停止位。

通信速率分为常规模式(时钟频率100kHz)和快速模式(时钟频率400kHz)。

同一总线上可以连接多个带有I2C接口的器件,每个器件都有一个唯一的地址,既可以是单接收的器件,也可以是能够接收发送的器件。

SPI,串行外围设备接口。

是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。

在操作中出现读取数据不正确,或者不能读取数据可能有以下原因:1.没有遵照通信协议:这两种通信方式都有各自独立的协议,如果在编写程序时不按通信协议,自然就不能正常通信了;2.时序不对:两处通讯方式都有严格的时序,编写程序时要严格按对应的时序;3.IO口方式方向设置不正确:在通信中数据有输入与输出的时候,特别是在I2C的方式下,有数据输入时相应的IO口要设置为输入,反之亦然,初学都容易犯这样的错误;4.看页的大小,超过一个页连续写就回滚,前面的就被覆盖。

其实里面有一个页地址计数器,如果页是8个byte,那么这个计数器就3bit,增加的地址(连续写的地址范围)就相当于溢出或者相当于按页取模。

在应用中的建议:1. SCL与SDA引脚用2.2K--4.7K电阻上拉;2. IO口与EEPROM的相应引脚不能直接相连,串一个几百欧电阻;3.为保证数据的正确性,在写入数据时最好对数据进行检验;4.采用循环地址的方式进行存储,避免只在一个固定地址上读写数据;。

单片机io口模拟i2c读写AT24C256的程序

单片机io口模拟i2c读写AT24C256的程序

谁有单片机io口模拟i2c读写AT24C256的程序?悬赏分:100 - 解决时间:2009-11-8 12:49问题补充:我自己写了一个,是修改别人的,但就是不管写什么,读出来一个字节都是255,郁闷啊!有调好的程序发给我,谢了。

我的晶振是24M的。

单片机是c8051f0202。

cuikaimin@提问者:崔凯敏000 - 三级最佳答案你这个单片机是带I2C接口的那个SMBus就是,我用这个系列的单片机写过,模拟的还没有借口直接来的好。

我的空间里面有我调好的一篇247519442你说的全部是0xff也是正常的,因为外部存储一般都是高电平为空,也就是说你的数据没有写进去我给你一个模拟的看看#include<reg51.h>#include <Intrins.h>#define uchar unsigned char#define uint unsigned intsbit pcf8563_scl=P0^5;//时钟频率sbit pcf8563_sda=P0^4;//串行数据传输脚bit busy=0;uchar sg;//时高位uchar sd;//时低位uchar fg;//分高位uchar fd;//分低位uchar mg;//秒高位uchar md;//秒低位uchar hou=0;uchar min=0;uchar sec=0;uchar subadd;//地址uchar dat;//数据uchar number;void start_pcf8563();//开始数据void send_pcf8563_byte();//发送void stop_pcf8563();//结束数据void receive_pcf8563_byte();//接收void spit_time();//分别计算时、分、秒的各位数字void spit_time()//分别计算时、分、秒的各位数字{sg=(int)hou/10;sd=(int)hou%10;fg=(int)min/10;fd=(int)min%10;mg=(int)sec/10;md=(int)sec%10;}void Send_pcf8563_byte(uchar bb) //向PCF8563发送一个字节{uchar aa;pcf8563_scl=0;for(aa=0;aa<8;aa++){if((bb&0x80)==0x80){pcf8563_sda=1;}else{pcf8563_sda=0;}pcf8563_scl=1;pcf8563_scl=0;bb=bb<<1;}_nop_();_nop_();pcf8563_sda=1;pcf8563_scl=1;busy=0;if(pcf8563_sda){busy=1;}else{_nop_();_nop_();pcf8563_scl=0;busy=0;}}void write_pcf8563(uchar subadd,uchar dat)// 向PCF8563对应地址写数据{start_pcf8563();Send_pcf8563_byte(0xa2);if(!busy){Send_pcf8563_byte(subadd);if(!busy){Send_pcf8563_byte(dat);}}stop_pcf8563();}void read_pcf8563() //读当时的时,分,钞{start_pcf8563();Send_pcf8563_byte(0xa2);if(!busy){Send_pcf8563_byte(0x02);if(!busy){start_pcf8563();Send_pcf8563_byte(0xa3);receive_pcf8563_byte();sec=number&0x7f;start_pcf8563();Send_pcf8563_byte(0xa3);receive_pcf8563_byte();min=number&0x7f;start_pcf8563();Send_pcf8563_byte(0xa3);receive_pcf8563_byte();hou=number&0x3f;}}stop_pcf8563();}void receive_pcf8563_byte() //从PCF8563接受一个字节{uchar cc;pcf8563_sda=1;number=0;for(cc=0;cc<8;cc++){number<<=1;pcf8563_scl=0;pcf8563_scl=1;_nop_();_nop_();number= number|pcf8563_sda;}pcf8563_scl=0;_nop_();_nop_();}void start_pcf8563() //开启PCF8563IIC{pcf8563_sda=1;pcf8563_scl=1;pcf8563_sda=0;//SCL为高,SDA执行一个下跳pcf8563_scl=0;//SCL为低,嵌住数据线}void stop_pcf8563() //关闭PCF8563IIC{pcf8563_sda=0;pcf8563_scl=1;pcf8563_sda=1;//SCL为高,SDA执行一个上跳pcf8563_scl=0;//SCL为低,嵌住数据线}void main(void){write_pcf8563(0x02,sec); //写钞write_pcf8563(0x03,min); //写分write_pcf8563(0x04,hou); //写时while(1){read_pcf8563();//读当前时间spit_time(); //切换时间,为显示做准备} }。

防止gpio模拟iic驱动被其他线程打断的方法

防止gpio模拟iic驱动被其他线程打断的方法

防止gpio模拟iic驱动被其他线程打断的方法防止GPIO模拟I2C驱动在多线程环境下被打断是一个重要的问题。

在这篇文章中,我将介绍一些方法来解决这个问题,以确保GPIO模拟I2C驱动的稳定性和可靠性。

首先,让我们了解一下什么是GPIO和I2C。

GPIO是通用输入输出端口,它可以用来控制外部设备或读取外部设备的状态。

而I2C是一种通信协议,它可以用于连接和控制多个设备,通过两根线进行数据传输。

在使用GPIO模拟I2C驱动时,我们需要保证驱动程序能够正确地处理并发访问和时序要求。

为了实现这一点,我们可以采取以下几个步骤:1. 锁定访问:在GPIO模拟I2C驱动中,我们可以使用信号量或互斥锁来实现对共享资源的访问控制。

当一个线程访问I2C总线时,它可以获得锁,阻止其他线程同时访问。

2. 设置优先级:在多线程环境中,我们可以通过设置线程的优先级来控制它们的执行顺序。

将GPIO模拟I2C驱动的线程设置为较高的优先级,可以确保它能够及时地响应,并且不会被低优先级的线程打断。

3. 中断处理:在一些特殊情况下,我们可能需要使用中断来处理GPIO模拟I2C驱动的数据请求。

通过配置中断处理程序,我们可以在需要时及时响应外部设备的请求,而不会被其他线程的操作打断。

4. 错误处理:在GPIO模拟I2C驱动中,我们应该实现错误处理机制,以便在发生错误时进行适当的处理。

例如,在发送或接收数据时发生错误,我们可以采取一些补救措施,如重新发送或重新接收数据,以确保数据的可靠性。

综上所述,要防止GPIO模拟I2C驱动在多线程环境下被打断,我们可以采取一系列的措施来确保驱动程序的稳定性和可靠性。

通过锁定访问、设置优先级、中断处理和错误处理等方法,我们可以保证GPIO模拟I2C驱动能够正确地处理并发访问和时序要求,从而实现可靠的数据传输和外设控制。

希望本文能够对需要实现GPIO模拟I2C驱动的开发者有所帮助,并能够在实际应用中发挥指导作用。

iic io模拟延时计算

iic io模拟延时计算

iic io模拟延时计算(最新版)目录1.IIC 总线的概述2.IIC io 模拟延时的原理3.计算 IIC io 模拟延时的方法4.IIC io 模拟延时的应用实例5.总结正文一、IIC 总线的概述IIC(Inter-Integrated Circuit),又称为 I2C(Inter IC),是一种串行双向通信总线,它是由 Philips 公司(现在的 NXP 半导体公司)于 1980 年代研发的。

IIC 总线主要用于低速度、短距离的双向通信,特别适合于连接微处理器和外围设备,如存储器、传感器、LCD 驱动器等。

二、IIC io 模拟延时的原理在 IIC 总线通信过程中,由于信号传输和处理的时延,会产生一定的延时。

IIC io 模拟延时是指通过硬件或软件模拟的方式,在 IIC 总线上增加一定的延时,以满足通信需求。

模拟延时的原理是通过插入一定数量的时钟周期,使得数据传输过程中的时序关系得以满足。

三、计算 IIC io 模拟延时的方法计算 IIC io 模拟延时的方法通常分为两步:1.计算总线时钟周期总线时钟周期是指 IIC 总线上一个时钟周期的时间长度。

根据 IIC 总线的时钟频率和总线宽度,可以计算出总线时钟周期。

例如,如果 IIC总线的时钟频率为 1MHz,总线宽度为 3 位,那么总线时钟周期为1/1000000 秒。

2.计算延时时间延时时间是指 IIC io 模拟延时所需的时间。

根据通信协议和总线时钟周期,可以计算出延时时间。

例如,如果 IIC 协议要求数据传输时延为 3 个时钟周期,那么延时时间为 3*1/1000000 秒。

四、IIC io 模拟延时的应用实例在实际应用中,IIC io 模拟延时可以用于测试和调试 IIC 总线通信系统。

通过模拟延时,可以观察通信系统在不同延时时间的工作状态,从而找出最佳的延时参数。

此外,IIC io 模拟延时还可以用于解决通信冲突和保证数据传输的可靠性。

stm32的ADS1110驱动程序(模拟I2C)

stm32的ADS1110驱动程序(模拟I2C)
-2-
F:\单片机\ARM\程序\ADS1110.c
2013年1月8日 21:19
* 函数名称: TWI_START * 描 述: 发送启动 * * 输 入: 无 * 输 出: 无 * 返 回: 无 * 作 者: * 修改日期: 2012年10月20日 *******************************************************************************/ u8 TWI_START(void) { TWI_SDA_1; TWI_NOP; TWI_SCL_1; TWI_NOP; if(!TWI_SDA_STATE) { ////DebugPrint("TWI_START:BUSY\n"); return TWI_BUS_BUSY; } TWI_SDA_0; TWI_NOP; if(TWI_SDA_STATE) { ////DebugPrint("TWI_START:BUS ERROR\n"); return TWI_BUS_ERROR; } TWI_SCL_0; TWI_NOP; return TWI_READY; } /******************************************************************************* * 函数名称: TWI_STOP * 描 述: 发送停止位 * * 输 入: 无 * 输 出: 无 * 返 回: 无 * 作 者: * 修改日期: 2012年10月20日 *******************************************************************************/ void TWI_STOP(void) { TWI_SCL_0; TWI_NOP; TWI_SDA_0; TWI_NOP;

用AVR单片机IO口模拟I2C总线操作AT24CXX的通用程序

用AVR单片机IO口模拟I2C总线操作AT24CXX的通用程序
twi_ack(ack);
*c=ret;
return(ret);
}
以下为AT24CXX的操作函数实现:
at24cxx.h:
//AT24CXX.H
#ifndef AT24CXX_H
#define AT24CXX-H
void At24cxxWaitBusy(void);
#include <util/delay.h>
#include <stdint.h>
/*注:
AVR单片机I/O口模拟I2C总线时建议在外部连接上拉电阻
这样可通过改变I/O口输入输出方向的方式来设置高低
输出口保持不变(0)
此时如DDRX寄存器为1则变成输出0
若DDRX为0,则I/O口程高阻,但因外部的上拉电阻,总线相当于设置高
#define TW_READ 1
#define TW_ACK 1
#define TW_NOACK 0
Hale Waihona Puke /*以下两个宏控制AT24CXX的WP引脚,如未连接可定义为空:
#define EEPROM_WRITE_ENABLE
#define EEPROM_WRITE_DISABLE
AT24CXX中WP引脚接地时写允许,接电源(高)时写保护,
如不接,器件内部有接地电阻,即写允许. */
//在CA-M8X板上该引脚通过S7(3)连接MEGA8的PC3
#define EEPROM_WRITE_ENABLE PORTC&=~_BV(PC3),DDRC|=_BV(PC3)
void At24cxxConfig(uint8_t device_addr,uint8_t page_size);

STM32F10X--模拟IIC程序

STM32F10X--模拟IIC程序

STM32F10X--模拟IIC程序听说STM32的IIC硬件做的很鸡肋,所以在这⾥通过模拟的⽅式实现IIC协议。

此程序能成功对AT24C02操作。

程序中的带参数宏 IIC_DELAY(time)的功能是延时time us,在实际中具体场合具体分析。

宏定义⽂件--IIC.h#ifndef _IIC_#define _IIC_#include "SysTick.h"#include "stm32f10x.h"#include "SystemConfig.h"/* 配置IIC的SDA、SCL两个端⼝ */#define IIC_SCL_IO GPIO_Pin_6#define IIC_SDA_IO GPIO_Pin_7/* SDA端⼝动态改变输⼊输出状态定义 */#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=0X80000000;} //配置上拉输⼊#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=0X30000000;} //配置推挽输出/* IIC 操作定义 */#define IIC_SDA PBOUT(7) //定义的STM32位操作#define READ_SDA PBIN(7)#define IIC_SCL PBOUT(6)#define IIC_DELAY(time) delay(time)/* 定义的函数原型 */void IIC_IOInit(void);void IIC_Start(void);void IIC_Stop(void);unsigned char IIC_Wait_Ack(void);void IIC_NoAck(void);void IIC_Ack(void);void IIC_Send_Byte(unsigned char txd);unsigned char IIC_Read_Byte(unsigned char ack);#endif程序源⽂件IIC.c⽂件#include "IIC.h"/*********************************************************************** STM32模拟IIC通信** ⽂件编码: GBK2312**********************************************************************//******************************* 初始化IIC的IO⼝********************************/void IIC_IOInit(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE ); //使能IO⼝时钟GPIO_InitStructure.GPIO_Pin = IIC_SCL_IO | IIC_SDA_IO;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB,IIC_SCL_IO | IIC_SDA_IO); //置位SDA,SCL}/******************************* 起始信号********************************/void IIC_Start(void){SDA_OUT(); //sda 线输出IIC_SDA=1;IIC_SCL=1;IIC_DELAY(4);IIC_SDA=0;//当时钟线为⾼时,SDA拉低则起始信号才有效IIC_DELAY(4);IIC_SCL=0;//钳住 I2C 总线,准备发送或接收数据}/******************************* 停⽌信号********************************/void IIC_Stop(void){SDA_OUT();//sda 线输出IIC_SCL=0;IIC_SDA=0;//STOP:when CLK is high DATA change form low to highIIC_DELAY(4);IIC_SCL=1;IIC_DELAY(1);IIC_SDA=1;//发送 I2C 总线结束信号IIC_DELAY(4);}/******************************* 等待应答信号** 返回值: 1-接收应答失败, 0-为接收成功******************************/unsigned char IIC_Wait_Ack(void){unsigned char ucErrTime=0;SDA_IN(); //SDA 设置为输⼊IIC_SDA=1;IIC_DELAY(1);IIC_SCL=1;IIC_DELAY(1);while(READ_SDA) //判断SDA上是否有低电平发⽣{ucErrTime++;if(ucErrTime>250) //如果在⼀段时间内没有接收到应答信号,则发送停⽌信号 {IIC_Stop();return 1;}}IIC_SCL=0;//时钟输出 0return 0;}/******************************* 产⽣应答信号********************************/void IIC_Ack(void){IIC_SCL=0;SDA_OUT();IIC_SDA=0;IIC_DELAY(2); //数据改变有效IIC_SCL=1;IIC_DELAY(2);IIC_SCL=0;}/******************************* 不产⽣应答信号********************************/void IIC_NoAck(void){IIC_SCL=0;SDA_OUT();IIC_SDA=1;IIC_DELAY(2);IIC_SCL=1;IIC_DELAY(2);IIC_SCL=0;}/******************************* 发送⼀个字节的数据********************************/void IIC_Send_Byte(unsigned char txd){unsigned char t;SDA_OUT();IIC_SCL=0;//拉低时钟开始数据传输,时SDA上的数据改变有效 for(t=0;t<8;t++){IIC_SDA=(txd&0x80)>>7;txd<<=1;IIC_DELAY(2); //对 TEA5767 这三个延时都是必须的IIC_SCL=1;IIC_DELAY(2); //保持数据⼀段时间IIC_SCL=0;IIC_DELAY(2);}}/******************************* 读⼀个字节的数据** 形式参数:ack=1,发送ACK, ack=0,发送NACK******************************/unsigned char IIC_Read_Byte(unsigned char ack){unsigned char i,receive=0;SDA_IN();//SDA 设置为输⼊for(i=0;i<8;i++ ){IIC_SCL=0;IIC_DELAY(2);IIC_SCL=1;receive<<=1;if(READ_SDA)receive++;IIC_DELAY(1);}if (!ack)IIC_NoAck();//发送 nACKelseIIC_Ack(); //发送 ACKreturn receive;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

QPSKSTV0903 TUNER STV6110 驱动设计1.IIC 理论MEGA128 模拟IIC时序控制QPSK 中的STV0903 STV6110STV0903 STV6110 连接图IIC时序理论先看下STV0903写时序图1)起总线先将SCL、SDA拉高,然后维持SCL为高先将SDA拉低参考代码如下:void Start(void){SBI(PORTD,SAA7113_DA TA);SBI(PORTD,SAA7113_CLK);IIC_delay();CBI(PORTD,SAA7113_DA TA);IIC_delay();CBI(PORTD,SAA7113_CLK);IIC_delay();}2)停总线先将SCL、SDA拉低,然后先拉高SCL,维持SCL为高时拉高SDA参考代码:void Stop(void){CBI(PORTD,SAA7113_DA TA);CBI(PORTD,SAA7113_CLK);IIC_delay();SBI(PORTD,SAA7113_CLK);IIC_delay();SBI(PORTD,SAA7113_DA TA);IIC_delay();}3)写总线在写总线时将SDA设置为输出,参考代码:void write_byte(unsigned char data){uchar m,tmp;SBI(SAA7113_DDR,SAA7113_DA TA);for(m = 0; m < 8; m++){if(data & 0x80)SBI(PORTD,SAA7113_DA TA);elseCBI(PORTD,SAA7113_DA TA);IIC_delay();SBI(PORTD,SAA7113_CLK);IIC_delay();data = data<<1;CBI(PORTD,SAA7113_CLK);}IIC_delay();saa7113_ack();IIC_delay();}4)应答应答由被控制芯片回应过来,在此时SDA应该设置为输入等待ACK, 在CLK第九个脉冲时,CLK为高电平,而SDA为一个低电平在表示收到器件的一个ACK应答。

参考代码:void saa7113_ack(){uchar tmp,m;CBI(DDRD,SAA7113_DA TA);SBI(PORTD,SAA7113_CLK);for(m=0;m<10;m++){IIC_delay();tmp = PIND;tmp &=0x02;if(tmp == 0)break;}CBI(PORTD,SAA7113_CLK);SBI(DDRD,SAA7113_DA TA);}5)读时序读芯片的数据时SDA应该设置为输入,参考代码:uchar read_byte(void){uchar m;uchar tmp1 = 0;uchar tmp2 = 0;CBI(SAA7113_DDR,SAA7113_DA TA);//输入for(m = 0; m < 8; m++){CBI(PORTD,SAA7113_CLK);IIC_delay();SBI(PORTD,SAA7113_CLK);IIC_delay();tmp1 = PIND; //sda 所在管脚tmp1 &= 0x02;if(0x02 == tmp1)tmp2 = ((tmp2 << 1) | 1);elsetmp2 = ((tmp2 << 1) & 0xfe);CBI(PORTD,SAA7113_CLK);}IIC_delay();saa7113_ack();return(tmp2);}STV0903 and STV6110通过STV0903来控制STV6110 当STV0903能正常读写时,先是打开I2CRPT控制寄存器用示波器测量SCL、SDA引脚观测波形,再测STV6110波形,如果STV6110波形出现脉冲宽度不等,则可能是SCLT 延迟于SCL,通过配置寄存器去掉延迟。

如果波形变化比较多出现多种波形,而且脉冲有时与SDA对准出现不标准,则可能是设置STV6110的时候速度不对。

开发所遇到的问题:1)IIC时序不对,在示波器上看哪出波形不对则修改哪处,观察到的波形就是我们模拟的波形,注意转折点SDA的输入输出。

2)STV6110波形不对,比如SCL为高时,SDA不能确定是高还是低。

则是STV6110速度设置问题。

I2C repeater速度设置不对,我们设置为010我们的repeater是16MHZ,而datasheet上是(that is, 135 MHz);3)不标准波形如下所示。

如上波形:不好认为是010 还是111 ,这种波形我认为是不标准波形。

示波器的使用说明P11-触发 2 –水平3- 用作调节视图(观察范围)(秒/格)4-5 –垂直调节一个为CH1 一个为CH2 ,6-7 分别为CH1 CH2 电压调节,8-9 为CH1 CH2 (CH1是指通道1) 10 运行/停止3-逆时针则会视野更广,看到的波形越小,顺时针则会局部到某一部分波形上。

1-触发调节触发可以使得波形停留时间更长以及更加清晰,易于捕捉波形按10停止。

使用实例:测试STV0903波形,在程序中不断向SCL、SDA发送信号,设置延时易于捕捉波形,开机时调节3使得观察到全部波形,然后将2向左调,调节6,7使得电压都为2V,调节4,5使得波形垂直方向上挨齐些,按10停止,再按3查看局部波形。

指针二级指针与指针的指针的区别(以char 为例)指针变量char * p; p 被定义为一个char * 类型的指针变量。

&p则表示指针变量所分配的内存处的地址,*p 表示所指向地址的处的值。

P为所指地址。

Ef:Char str[10];Char *p1=str;P1 和str 的值是一样的,都是指数组的首地址。

*p1 和str[0]的值相同。

Char *p2=p1;P2 与p1 的值相同也是str的地址。

Char ** p2 = &p1;意思为P2所指向地址&p1,p1中存放是一个char * 的指针;参考代码:#include <stdio.h>#include <stdlib.h>void test(char *);void second(char *);int main(void){char str[10];char tmp;printf(" str addr : %x \n " , str);for(tmp = 0;tmp <9;tmp++)str[tmp]=tmp+0x30;str[tmp]='\0';puts("main:");puts(str);test(str);puts(str);return 0;}void test(char *a){char tmp;puts("test:");puts(a);printf("a addr : %x \n " , &a);// second(a);char ** b = &a;for(tmp=0;tmp<9;tmp++)*(*b)++ = tmp + 65;return ;}void second(char *b){printf(" b addr : %x \n " , &b);puts("second:");char tmp;for(tmp=0;tmp < 9;tmp++)*(b++) = tmp + 65;return ;}/*str addr : 12ff74main:012345678test:012345678a addr : 12ff20ABCDEFGHIPress any key to continue*/数据手册参考词汇lagacy 继承reflection 反射Confidential 机密的demodulator 解调器implementation 实现Semiconductors 半导体internal 内部的device master 主设备access 访问repeater 中继器Electrical specifications 电气规格tuning 调整transactions执行oversample采样ascertain 确定integrates 整合significantly 值得注目地impedeance 阻抗respectively 分别的reserved 默认bidirectional 双向tuner 调谐器compliant适应sub addresses 子地址attention items 注意事项isolation 分离perform 执行pulse 脉冲respectively 分别的invert 反向integrates 集成configures 配置high impedance 高阻抗Consult 咨询Unallocated 未分配的conforms 符合consecutive 连续的open-drain 开漏RF IC 射频IC unless otherwise 除非calibration 校准bitfield位域determines 决定residual 剩余further 更进一步。

constant 常数dedicated专用subsequent随后amplifier放大器compensation 补偿assigned 分配foreword 序Recommendation 推荐division ratio 分频比local oscillator 本振频率divisor 除数divider 分频器either……or 要么……要么hence 因此Spectrum 频谱conforms符合。

相关文档
最新文档