当前位置:文档之家› I2C程序和流程图

I2C程序和流程图

I2C程序和流程图
I2C程序和流程图

程序和流程图:

IIC.h

void Init_IIC(void);

void EEPROM_ByteWrite(unsigned char nAddr,unsigned char nVal); unsigned char EEPROM_RandomRead(unsigned char nAddr); unsigned char EEPROM_CurrentAddressRead(void);

void EEPROM_AckPolling(void);

void Init_CLK(void);

void Init_IIC_Port(void);

Main.C

/*******************************************

IIC for AT24c16 OR AT24CXXX 系列

只要控制好IICRM IICSTP IICSTT 其硬件会自动完成

SCL SDA的一系列时序只要注意各个发送与接收的控制标志位.

******************************************/

#include

#include "IIC.h"

volatile unsigned char Data[6];

void main(void)

{

//volatile unsigned char Data[6];

//停止看门狗

WDTCTL = WDTPW+WDTHOLD;

//初始化端口

Init_IIC_Port();

//初始化时钟

Init_CLK();

//I2C初始化

Init_IIC(); //置传输方式及控制方式

//打开中断

_EINT();

//写入数据

EEPROM_ByteWrite(0x0000,0x12);

//等待写操作完成

EEPROM_AckPolling();

//写入数据

EEPROM_ByteWrite(0x0001,0x34);

//等待写操作完成

EEPROM_AckPolling();

//写入数据

EEPROM_ByteWrite(0x0002,0x56);

//等待写操作完成

EEPROM_AckPolling();

//写入数据

EEPROM_ByteWrite(0x0003,0x78);

//等待写操作完成

EEPROM_AckPolling();

//写入数据

EEPROM_ByteWrite(0x0004,0x9A);

//等待写操作完成

EEPROM_AckPolling();

//写入数据

EEPROM_ByteWrite(0x0005,0xBC);

//等待写操作完成

EEPROM_AckPolling();

//读出数据,随机读

Data[0] = EEPROM_RandomRead(0x0000); //地址自动加1 //读出数据,当前地址读

Data[1] = EEPROM_CurrentAddressRead();

//读出数据,当前地址读

Data[2] = EEPROM_CurrentAddressRead();

//读出数据,当前地址读

Data[3] = EEPROM_CurrentAddressRead();

//读出数据,当前地址读

Data[4] = EEPROM_CurrentAddressRead();

//读出数据,当前地址读

Data[5] = EEPROM_CurrentAddressRead();

}

IIC.C

#include

#include "IIC.h"

#define SLA VEADDR 0x50;

int tx_count;

int rx_count;

unsigned char I2CBuffer[3];

void Init_IIC(void)

{

//将P3.1和P3.3设置为I2C管脚

P3SEL = 0x0A;

//设置P3.1和P3.3管脚的方向

P3DIR &= ~0x0A;

//选择为I2C模式

U0CTL |= I2C + SYNC;

//禁止I2C模块

U0CTL &= ~I2CEN;

//设置I2C为7位地址模式,不使用DMA,

//字节模式,时钟源为SMCLK,

//设置成传输模式

I2CTCTL = I2CTRX + I2CSSEL_2;

//定义从器件地址

I2CSA = SLAVEADDR;

//设置本身的地址

I2COA = 0x01A5;

//I2C时钟为SMCLK / 160

I2CPSC = 159;

//SCL 高电平为:5 *I2C 时钟

I2CSCLH = 0x03;

//SCL 低电平为:5 *I2C 时钟

I2CSCLL = 0x03;

//I2C 模块有效

U0CTL |= I2CEN;

tx_count = 0;

rx_count = 0;

}

void I2CWriteInit(void) //对于AT24CXXX的写操作是置成主模式并置位中断使能. {

//主(Master)模式

U0CTL |= MST;

//传输模式,R/W 为:0

I2CTCTL |= I2CTRX;

//清除中断标志

I2CIFG &= ~TXRDYIFG;

//发送中断使能

I2CIE = TXRDYIE;

}

void I2CReadInit(void)

{

//接收模式,R/W 为:1

I2CTCTL &= ~I2CTRX;

//接收中断使能

I2CIE = RXRDYIE;

}

void EEPROM_ByteWrite(unsigned char nAddr, unsigned char nVal)

{

//等待I2C模块完成所有操作//在选定的地址写入数据.

while (I2CDCTL&I2CBUSY) ;

//设置地址数据

I2CBuffer[1] = nAddr;

//设置数据

I2CBuffer[0] = nVal;

//设置缓冲区指针

tx_count = 1;

//写数据初始化

I2CWriteInit(); //设置为主模式

//发送数据的长度

//1个控制字节,2个数据字节

I2CNDAT = 2;

//开始和停止条件产生

//开始I2C通信

I2CTCTL |= I2CSTT+I2CSTP;

return;

}

unsigned char EEPROM_CurrentAddressRead(void)

{

//等待I2C模块完成所有操作

while (I2CDCTL&I2CBUSY);

//读操作的初始化

I2CReadInit();

//主(Master)模式

U0CTL |= MST;

//接收1个字节的数据

I2CNDAT = 1;

//清除中断标志

I2CIFG &= ~ARDYIFG;

//开始接收,产生重新起始和停止条件

I2CTCTL |= I2CSTT + I2CSTP;

//等待传输完成

while ((~I2CIFG)&ARDYIFG) ;

//返回数据

return I2CBuffer[0];

}

unsigned char EEPROM_RandomRead(unsigned char nAddr) {

//等待I2C模块完成所有操作

while (I2CDCTL&I2CBUSY);

//设置地址

I2CBuffer[0] = nAddr;

//设置缓冲区指针

tx_count = 0;

//写操作初始化

I2CWriteInit();

//传输数据长度

//1个控制字节和一个地址数据

I2CNDAT = 1;

//清除中断标志

I2CIFG &= ~ARDYIFG;

//起始条件产生

I2CTCTL |= I2CSTT;

//等待传输完成

while ((~I2CIFG)&ARDYIFG);

//读操作初始化

I2CReadInit();

//接收一个字节的数据

I2CNDAT = 1;

//清除中断标志

I2CIFG &= ~ARDYIFG;

//开始接收,产生重新起始和停止条件

I2CTCTL |= I2CSTT + I2CSTP;

//等待传输完成

while ((~I2CIFG)&ARDYIFG);

//返回数据

return I2CBuffer[0];

}

void EEPROM_AckPolling(void)

{

unsigned int count;

//等待I2C模块完成所有操作

while (I2CDCTL&I2CBUSY);

count=0;

//清除I2CEN位

U0CTL &= ~I2CEN;

I2CTCTL |= I2CRM;

//使能I2C模块

U0CTL |= I2CEN;

//设置NACKIFG标志

I2CIFG = NACKIFG;

while (NACKIFG & I2CIFG)

{

//清除中断标志

I2CIFG=0x00;

//主(Master)模式

U0CTL |= MST;

//设置传输模式

I2CTCTL |= I2CTRX;

//产生起始条件

I2CTCTL |= I2CSTT;

//等待I2CSTT被清除

while (I2CTCTL & I2CSTT) ;

//产生停止条件

I2CTCTL |= I2CSTP;

//等待停止条件复位

while (I2CDCTL & I2CBUSY) ;

count = count + 1;

}

//清除I2CEN位

U0CTL &= ~I2CEN;

I2CTCTL &= ~I2CRM;

//使能I2C

U0CTL |= I2CEN;

return;

}

#if __VER__ < 200

interrupt [USART0TX_VECTOR] void ISR_I2C(void)

#else

#pragma vector=USART0TX_VECTOR

__interrupt void ISR_I2C(void)

#endif //上面的程序其实只要编写:

//#pragma vector=USART0TX_VECTOR __interrupt void ISR_I2C(void)就行. {

switch (I2CIV)

{

case I2CIV_AL:

{

//仲裁中断

break;

}

case I2CIV_NACK:

{

//NACK中断

break;

}

case I2CIV_OA:

{

//自己地址中断

break;

}

case I2CIV_ARDY:

{

//访问准备好中断

break;

}

case I2CIV_RXRDY:

{

//接收准备好中断

I2CBuffer[0]=I2CDRB;

break;

}

case I2CIV_TXRDY:

{

//发送准备好中断

I2CDRB = I2CBuffer[tx_count];

tx_count = tx_count - 1;

if (tx_count < 0)

{

//禁止发送中断

I2CIE &= ~TXRDYIE;

}

break;

}

case I2CIV_GC:

{

//一般调用中断

break;

}

case I2CIV_STT:

{

//起始条件中断

break;

}

}

}

void Init_IIC_Port(void)

{

//初始化端口寄存器与IIC口无关的PX口关闭以便于对编写系统板的综合程序.

//P1DIR = 0xFF;

//P2DIR = 0xFF;

P3DIR = 0xF5;

//P4DIR = 0xFF;

P5DIR = 0x7F;

//P6DIR = 0xFF;

//P4OUT = 0X11;

//P5OUT &= 0XF0;

P3SEL|=BIT1+BIT3; //在这里如果设置成

}

void Init_CLK(void)

{

unsigned int i;

//将寄存器的内容清零

//XT2震荡器开启

//LFTX1工作在低频模式

//ACLK的分频因子为1

BCSCTL1 = 0X00;

do

{// 清除OSCFault标志

IFG1 &= ~OFIFG;

for (i = 0x20; i > 0; i--);

}

while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1

//open XT2, LFTX2 选择低频率

BCSCTL1 &= ~(XT2OFF + XTS); //BCSCTL1=0X00 功能一样

//DCO Rsel=7(Freq=3200k/25摄氏度)

BCSCTL1 |= RSEL0 + RSEL1 + RSEL2;

BCSCTL1 |= 0x07;

//MCLK的时钟源为TX2CLK,分频因子为1

BCSCTL2 += SELM1;

//SMCLK的时钟源为TX2CLK,分频因子为1

BCSCTL2 += SELS;

}

//对于系统时钟的选择关系到整个程序运行稳定性.

/************************************************************

*文件名:msp430f169i2c.c

*整体描述:MSP430F169单片机硬件IIC软件,字节方式,主方式

* IIC接口:P3.3=SCL,P3.1=SDA;(开漏输出)

* 相应寄存器:地址寄存器I2COA 用于存放自身从地址(从方式时才有用)

* 地址寄存器I2CSA 用于存放外围的从机地址(主方式时才有用)

* 控制寄存器U0CTL 硬件I2C的设置、使能、模式等。

发送控制寄存器I2CTCTL

* 数据控制寄存器I2CDCTL 指示I2C总线的状态

*

* U0CTL -- RXDMAEN,TXDMAEN,I2C, XA, LISREN,SYNC,MST,I2CEN

* 0 0 1 0 0 1 1 1 (0x17)

* I2CTCTL --I2CWORD,I2CRM,I2CSSEL1,I2XSSEL0, I2CTRX,I2CSTB, I2CSTP, I2CSTT * 0 1 1 0 * 0 * *

*作者: jy

*状态: 通过

************************************************************/

#include

#include "fpgacode.h"

#define WR24C512

#define LED1_1 (0x20) /* Port 3.5 Output -> LED1 */

#define LED1_0 (0xdf)

#define SDA_1 P3OUT |= BIT1 //串行数据线,SDA = 1

#define SDA_0 P3OUT &=~ BIT1 //SDA = 0

#define SCL_1 P3OUT |= BIT3 //串行时钟线,SCL = 1

#define SCL_0 P3OUT &=~ BIT3 //SCL = 0

#define SDADIR_IN P3DIR &=~ BIT1 //SDA,I/O口为输入

#define SDADIR_OUT P3DIR |= BIT1 //I/0口为输出

#define SDA_IN ((P3IN >> 1) & 0x01) //Read SDA

#define SCLDIR_IN P3DIR &=~ BIT3 //SCL,I/O口为输入

#define SCLDIR_OUT P3DIR |= BIT3 //I/0口为输出

#define SCL_IN ((P3IN >> 3) & 0x01) //Read SCL

#ifdef WR24C512

static int numi = 0; //Data Pointer

#else

static int numj = 0; //Data Pointer

#endif

#define I2CSLA 0x50

/*--------------------------------------------------------

--功能描述: 检查总线是否空闲

--子程序状况: 09-23调试通过

----------------------------------------------------------

--*/

void I2c_Idle_Check(void)

{

while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙

}

void DelayTime10us(unsigned char n)

{

unsigned char i;

while(n--) // 5 cycles

for(i=0;i<10;i++); // 8mhz 110:771 + 4 to while

}

/*---------------------------------------------------------

--功能描述:发送数据:用于向总线发送数据

--子程序状况: 09-23调试通过

-----------------------------------------------------------

--*/

void I2cBusSendByte(unsigned char c)

{

while((I2CIFG & TXRDYIFG) != TXRDYIFG); // 检测发送准备

I2CDRB = c; // 写发送寄存器

}

/*------------------ MSP430 I2C 写数据09-23调试通过---------------------*/

/*--------------------------------------------------------

--功能描述:申请总线:进行I2C总线的初始化-发送起始信号

--子程序状况: 09-23调试通过

----------------------------------------------------------

--*/

void I2C_Send(unsigned char ndatNum)

{

// 注意:通讯结束,I2CMST 自动清零,再次通讯必须重新置位

P3OUT = 0x00; // clear P3 output register

P3SEL = 0x0A; // P3.1=SDA, P3.3=SCL,Select I2C pins, Setup I2C module

U0CTL |= (I2C + SYNC); // select I2C mode;XA=0,7bit_addresing;

U0CTL &= ~I2CEN; // i2c功能使能无效

// I2CTCTL = I2CRM + I2CSSEL_2; // x(x>256)字节模式,new start测试使用

// 选择方式I2CRM=0,最终用户使用

I2CTCTL = I2CSSEL_2;

I2CNDAT = 2 + ndatNum; // 最终用户使用,2byte地址+ 128byte数据

I2CPSC = 2; // set scl

I2CIFG = 0;

I2CSA = 0x50; // Slave address of At24c512

U0CTL |= I2CEN; // enable I2C module, 7 bit addr, master mode 08-26

U0CTL |= MST;

while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙

I2CTCTL |= I2CTRX + I2CSTT + I2CSTP ; // I2CRM =0,启动总线,发送从器件地址

while((I2CIFG & NACKIFG) == 0x02); // ack 为低电平,等待地址应答位,判断无应答NACKIFG = 1 }

/*----------------------------------------------------------------

--子程标号 :I2cWrSlaSubAddr

--子程功能 :主机发送从机的子地址

--入口参数 :unsigned char sla,unsigned int suba

--参数说明 :子地址

--子程序状况:09-23调试通过

--说明:完成地址信息的定位,先确定顺序读写的起始地址

-----------------------------------------------------------------

--*/

unsigned char I2cSendSubAddr(unsigned int suba,unsigned char ndatNum) {

unsigned char Hi_suba,Lo_suba;

I2C_Send(ndatNum); // 启动总线,等待地址应答位

Hi_suba = ( unsigned char )( suba >> 8 );

Lo_suba = ( unsigned char )( suba & 0x00ff );

I2cBusSendByte( Hi_suba ); //发送器件子地址

while((I2CIFG & 0x02) == NACKIFG ) // 等待数据的应答

{

I2CTCTL |= I2CSTP; // 无应答,结束总线

return(0);

}

I2cBusSendByte( Lo_suba ); //发送器件子地址

while((I2CIFG & 0x02 )==0x02 ) // 等待数据的应答

{

I2CTCTL |= I2CSTP; // 无应答,结束总线

return(0);

}

return(1);

}

/*------------------------------------------------------------------

--子程标号 :I2cWriteStr (用户函数)

--子程功能 :向I2C从器件写入数据

--入口参数 :unsigned char *ps,unsigned char num

--参数说明 :写入数据的地址指针,数据个数

--子程序状况: 09-23调试通过

--说明:I2C读取数据

-------------------------------------------------------------------

--*/

unsigned char I2cSendStr(const unsigned char * ps,unsigned char num) {

// unsigned char i;

unsigned char tempnum;

tempnum = num-1;

for(numi=0;numi

{

I2cBusSendByte(*ps);

while((I2CIFG & 0x02) == NACKIFG) // 等待数据的应答

{

I2CTCTL |= I2CSTP; // 无应答,结束总线

return(0);

}

ps++;

}

// I2CTCTL |= I2CSTP; //I2CRM =1模式中,在发送最后一个数据之前将停止位置位,*特别注意,必须I2cBusSendByte(*ps);

while((I2CIFG & 0x02) == NACKIFG) // 等待数据的应答

{

I2CTCTL |= I2CSTP; // 无应答,结束总线

return(0);

}

return(1);

}

//------------------写at24c512----

void I2cWrAt24c512(void)

{

unsigned int j=0;

unsigned char m,n;

unsigned int tempAddr;

for (j = 0;j <462;j++) // page write

{

tempAddr = 128*j;

while (I2CBUSY & I2CDCTL); // I2C ready?

I2cSendSubAddr(tempAddr,0x80);

I2cSendStr(FPGACfg+tempAddr,0x80);

P4OUT ^= 0x80;

for (m=0;m<125;m++) {for (n=0;n<110;n++);}

P4OUT ^= 0x80;

}

tempAddr = 128*j;

while (I2CBUSY & I2CDCTL); // I2C ready?

I2cSendSubAddr(tempAddr,0x4f);

I2cSendStr(FPGACfg+tempAddr,0x4f);

P4OUT ^= 0x80;

for (m=0;m<125;m++) {for (n=0;n<110;n++);}

P4OUT ^= 0x80;

}

/*-------------------------- MSP430 I2C 读取数据-----------------------------*/

/*---------------------------------------------------------------------

--子程标号 :I2cSlaSubAddr

--子程功能 :主器件发送从机器件地址和子地址

--入口参数 :unsigned int suba

--参数说明 :子地址

--子程调用 :I2cBusSendByte

--子程序状况:Y

--说明:完成地址信息的定位,先确定顺序读写的起始地址

---------------------------------------------------------------------

--*/

void I2cReceSubAddr(unsigned int suba) // test 09-25 读之前先写地址

{

unsigned char Hi_suba,Lo_suba;

P3OUT = 0x00; // clear P3 output register

P3SEL = 0x0A; // P3.1=SDA, P3.3=SCL,Select I2C pins, Setup I2C module

U0CTL |= I2C + SYNC; // select I2C mode;XA=0,7bit_addresing;

U0CTL &= ~I2CEN; // i2c功能使能无效

// I2CTCTL = I2CRM + I2CSSEL_2; // I2CRM = 1,自己设定字节个数

I2CTCTL = I2CSSEL_2; // I2CRM = 0,

I2CNDAT = 2; // I2CRM = 0,2byte地址+ 128byte数据,固定字节

I2CIFG = 0;

I2CPSC = 1; // set scl

// I2CSCLH = 0x02; // High period of SCL

// I2CSCLL = 0x02; // Low period of SCL

I2CSA = 0x50; // Slave address of At24c512

U0CTL |= I2CEN; // enable I2C module, 7 bit addr, master mode 08-26

U0CTL |= MST;

Hi_suba = ( unsigned char )( suba >> 8 );

Lo_suba = ( unsigned char )( suba & 0x00ff );

while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙

I2CTCTL |= I2CTRX + I2CSTT + I2CSTP ; // I2CRM =0,启动总线,发送从器件地址

while((I2CIFG & NACKIFG) == 0x02) // ack 为低电平,等待地址应答位,判断无应答NACKIFG = 1 {

I2CTCTL |= I2CSTP; // 结束总线

}

I2cBusSendByte( Hi_suba ); //发送器件子地址

while((I2CIFG & NACKIFG) == 0x02) // ack 为低电平,等待地址应答位,判断无应答NACKIFG = 1 {

I2CTCTL |= I2CSTP; // 结束总线

}

I2cBusSendByte( Lo_suba ); //发送器件子地址

while((I2CIFG & NACKIFG) == 0x02) // ack 为低电平,等待地址应答位,判断无应答NACKIFG = 1 {

I2CTCTL |= I2CSTP; // 结束总线

}

DelayTime10us(250);

DelayTime10us(250);

DelayTime10us(250);

DelayTime10us(250);

}

/*---------------------------------------------------------------------

--子程标号 :I2cSlaSubAddr

--子程功能 :主器件接收初始化

--入口参数 :无

--子程序状况:

--说明:

---------------------------------------------------------------------

--*/

void InitI2cRece(unsigned char num)

{

P3OUT = 0x00; // clear P3 output register

P3SEL = 0x0A; // P3.1=SDA, P3.3=SCL,Select I2C pins, Setup I2C module U0CTL |= I2C + SYNC; // select I2C mode;XA=0,7bit_addresing;

U0CTL &= ~I2CEN; // i2c功能使能无效

// I2CTCTL = I2CRM + I2CSSEL_2; // I2CRM=1 x(x>256)字节模式

I2CTCTL = I2CSSEL_2; // I2CRM=0

I2CNDAT = num; // 1个字节

I2CPSC = 1; // set scl

// I2CSCLH = 0x01; // High period of SCL

// I2CSCLL = 0x01; // Low period of SCL

I2CIFG = 0;

I2CSA = 0x50; // Slave address of At24c512

I2CTCTL &= ~I2CTRX;

U0CTL |= I2CEN; // enable I2C module, 7 bit addr, master mode 08-26 }

/*---------------------------------------------------------------

--功能描述: 读一个字节

--子程序状况 :

------------------------------------------------------------------

--*/

unsigned char I2cReceSlaByte(void)

{

unsigned char ch;

DelayTime10us(15);

U0CTL |= MST; //主模式

while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙

I2CTCTL |= I2CSTT + I2CSTP; // I2CRM =0; Receive, ST, SP (clears MST) while((I2CIFG & RXRDYIFG) != RXRDYIFG); // 等待地址应答位,判断

ch = I2CDRB;

return(ch);

}

/*---------------------------------------------------------------

--功能描述: 连续读数据

--子程序状况 :

------------------------------------------------------------------

--*/

void I2cReceSlaStr(unsigned char num)

{

unsigned char i;

DelayTime10us(15);

U0CTL |= MST; //主模式

while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙I2CTCTL |= I2CSTT + I2CSTP; // I2CRM =0; Receive, ST, SP (clears MST) for (i=0;i

{

while((I2CIFG & RXRDYIFG) != RXRDYIFG); // 等待地址应答位,判断

rxDataArray = I2CDRB;

}

}

用计算机程序解决问题

用计算机程序解决问题 一、教学目标: 1、知识与技能 (1)执行一段计算机程序,了解计算机程序的工作过程 (2)解剖程序实例,理解使用计算机程序解决问题的基本流程在完成学习任务的过程中,合理使用信息技术和方法实行简单的探究活动。 3、情感、态度与价值观 借助计算机程序解决问题的思想方法,养成严谨客观的学习习惯。 4、教学重点、难点: 本节内容的重点是:计算机程序解决问题的基本流程。 本节内容的难点是:计算机程序解决问题的方法。 5、课时安排:1课时 二、教学过程设计: 1、体验程序的运行过程及作用(活动) 执行“老鼠过街”游戏(分别请二个学生上台玩) 执行环境在VB中 过渡到画二次函数图像的程序。 2、剖析用计算机程序解决问题的过程 (1)分析问题 对于一个实际问题,首先需要分析该问题的需求情况及已知条件,来判断解决问题的可能性和目标要求,然后对需要解决的问题给出一

个精确的描述。 (2)设计算法 寻找解决问题的方法和步骤称为算法设计。 解决方法:利用描点法去画函数图像 算法设计: 1)给出画图框 2)给出程序执行按纽 3)定义坐标轴 4)定义纵坐标、横坐标 5)定义变量 6)给定颜色 7)描点法算法 8)结束算法 (3)编写程序 选择程序设计语言,通过程序设计语言实现算法,编写出程序(代码)。 (4)调试运行程序 1)打开程序设计语言软件Visual Basic(简称VB) 2)输入编写好的程序 3)运行程序,检验程序功能 4)调试修改错误 5)保存程序并生成“*.exe”编译文件

(5)检测结果 3、练习 (1)执行老师已给定的程序。 (2)修改老师给定的程序,画出已下函数的图像。Y=-x^2 Y=2^x Y=5*sin(x) (3)尝试自己编写加法程序。

程序流程图盒图PAD图(最终)

20122831—第五组 第五组组长:程伟 组员:程伟赵嘉宾袁婷峰王呈陈璐璐周莹莹 2014年10月26日 一、程序流程图 程序流程图独立于任何一种程序设计语言,比较直观、清晰,易于学习掌握。但流程图也存在一些严重的缺点。例如流程图所使用的符号不够规范,常常使用一些习惯性用法。特别是表示程序控制流程的箭头可以不受任何约束,随意转移控制。这些现象显然是与软件工程化的要求相背离的。为了消除这些缺点,应对流程图所使用的符号做出严格的定义,不允许人们随心所欲地画出各种不规范的流程图。例如,为使用流程图描述结构化程序,必须限制流程图只能使用下图所给出的五种基本控制结构。任何复杂的程序流程图都应由这五种基本控制结构组合或嵌套而成。 流程图的基本控制结构

实例: 输入三个正整数作为边长,判断该三条边构成的三角形是等边、等腰还是一般三角形。

二、盒图(N-S图) Nassi和Shneiderman 提出了一种符合结构化程序设计原则的图形描述工具,叫做盒图,也叫做N-S图。任何一个N-S 图,都是前面介绍的五种基本控制结构相互组合与嵌套的结果。当问题很复杂时,N-S图可能很大。 N-S图的五种基本控制结构 实例: 输入三个正整数作为边长,判断该三条边构成的三角形是等边、等腰还是一般三角形。

盒图

三、PAD 图 PAD是Problem Analysis Diagram的缩写,它是日本日立公司提出,由程序流程图演化来的,用结构化程序设计思想表现程序逻辑结构的图形工具。 PAD也设置了五种基本控制结构的图式,并允许递归使用。 PAD的基本控制结构 实例: 输入三个正整数作为边长,判断该三条边构成的三角形是等边、等腰还是一般三角形。

实验八 IIC通信协议

实验八I2C通信协议 一、实验目的: 1、培养学生阅读资料的能力; 2、加深学生对I2C总线通信协议的理解; 3、加强学生对模块化编程的理解; 二、实验环境: 1、硬件环境:PC机一台、单片机实验板一块、母头串口交叉线、USB电源线; 2、软件环境:keil uVision2集成开发环境; STC-ISP下载上位机软件; 三、实验原理: 要学会I2C通信协议的编程,关键是要看懂并掌握其时序图,理解对I2C通信协议相关子程序的实验编写。I2C通信协议的总线时序图如下所示: I2C总线时序图 I2C相关子程序的详细介绍 1、起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 2、结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 起始信号和结束信号的时序图如下所示: 起始信号和结束信号的时序图 起始信号的流程如下:

1、SCL和SDA拉高,保持时间约为0.6us-4us; 2、拉低SDA,保持时间为约为0.6us-4us; 3、拉低时钟线 结束信号的流程如下: 1、SCL置高电平,SDA置低电平,保持时间约为0.6us-4us 2、SDA拉高,保持时间约为1.2-4us; 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。 若未收到应答信号,由判断为受控单元出现故障。应答信号的时序图如下所示: 应答时序图 发送时的应答信号 ;**********应答信号********** ACK: SETB SDA ;数据线置高 SETB SCL ;时钟线置高 ACALL DELAY JB SDA,$ ;等待数据线变低 ACALL DELAY CLR SCL ;时钟线置低 RET 注意:这里如果数据线一直为高将进入死循环,所以一般我们都会在这做一个容错的处理。具体的程序如下: ACK: MOV R4,#00H SETB SDA SETB SCL LOP0: JNB SDA,LOP DJNZ R4,LOP0 ;循环255次 LOP: ACALL DEL CLR SCL RET 接收时的应答信号

计算机程序编程中的常用英语

都需要知道这些英语。,还是c++还是javajps不管是 ++ 500多个,请大家熟记一共应用、应用程序application 应用程式 application framework 应用程式框架、应用框架应用程序框架架构、系统架构architecture 体系结构引数(传给函式的值).叁见叁数、实质叁数、实叁、自变量parameter argument array 阵列数组 箭头操作符(箭头)运算子arrow operator arrow 装配件assembly assembly language 组合语言汇编语言 断言assert(ion) 赋值assign 指派、指定、设值、赋值 赋值、分配assignment 指派、指定 赋值操作符assignment operator 指派(赋值)运算子= associated 相关的、关联、相应的相应的、相关的 sequential container)associative container 关联式容器关联式容器(对应原子的atomic 不可分割的 属性、特性attribute 属性 audio 音频音讯人工智能A.I. 人工智慧 背景background 背景(用於图形着色)后台(用於行程)backward compatible 回溯相容向下兼容bandwidth 频宽带宽base class 基础类别基类base class) 基础型别base type (等同於 批次(意思是整批作业)batch 批处理收益benefit 利益 最佳可行函式best viable function 最佳可行函式 中挑出的最佳吻合者)(从viable functions 二分查找二分搜寻法binary search binary tree 二元树二叉树 binary function 二元函式双叁函数 binary operator 二元运算子二元操作符 绑定系结binding bit 位元位bit field 位元栏位域位图bitmap 位元图 bitwise 以bit 为单元逐一┅bitwise copy 以bit 为单元进行复制;位元逐一复制位拷贝block 区块,区段块、区块、语句块或false 布尔值)boolean 布林值(真假值,true 边框border 边框、框线花括弧、花括号brace(curly brace) 大括弧、大括号方括弧、方括号bracket(square brakcet) 中括弧、中括号breakpoint 断点中断点 build 建造、构筑、建置(MS 用语)内置in 内建-build 总线bus 汇流排 业务,业务business 商务按钮按钮buttons 组成)字节位元组(由byte 8 bits 高速缓存cache 快取呼叫、叫用调用call 回调callback 回呼call operator call(函式呼叫)运算子调用操作符function call operator)

程序设计流程图.doc

程序设计流程图 程序设计流程图 程序设计的基本过程 (1)分析需求:了解清楚程序应有的功能。 (2)设计算法:根据所需的功能,理清思路,排出完成功能的具体步骤,其中每一步都应当是简单的、确定的。这一步也被称为逻辑编程。 (3)编写程序:根据前一步设计的算法,编写符合C++语言规则的程序文本。 (4)输入与编辑程序:将程序文本输入到计算机内,并保存为文件,文件名后缀为.cpp 。 至此,产生了完整的程序文本,被称为源程序或源代码。保存源程序的文件(例如前面的c:\student\ch1_01.cpp)称为源程序文件,简称源文件,文件名的后缀是.cpp 。 (5)编译(Compile):把C++程序编译成机器语言程序。 编译产生的程序称为目标程序,目标程序被自动保存为文件,这一文件称为目标文件,文件名的后缀是.obj 。 VC++进行编译的依据是源程序,如果源程序中的符号、词语、整体结构等有差错,超出了VC++的理解能力,VC++就无法完成编译,这样的差错称为语法错误。一旦发现语法错误,VC++就不生成目标文件,并在窗口下方列出错误;如果没有语法错误,则显示0 error(s) ,并生成目标文件,允许继续进行后面的步骤。 编译没有出现错误,仅仅说明程序中没有语法错误。 (6)生成执行程序:从目标文件进一步连接生成Windows环境下的可执行文件,即文件名后缀为.exe 的文件。

由于可执行文件是由若干个文件拼接而成的,其中不但有目标文件,还有另一些标准的库文件,一些规模较大的程序还会有多个目标文件,所以这一步骤又被称为连接(Link)。 (7)运行:在Windows环境中使用可执行文件。这是程序设计的最终目的。这一步也常被称为Run 。 程序设计流程图: 1.程序设计的流程图 2.程序结构流程图 3.程序算法描述流程图 4.程序算法流程图 5.浅谈程序设计的心得

简单的I2C协议理解 i2c程序(调试通过)

简单的I2C协议理解 一. 技术性能: 工作速率有100K和400K两种; 支持多机通讯; 支持多主控模块,但同一时刻只允许有一个主控; 由数据线SDA和时钟SCL构成的串行总线; 每个电路和模块都有唯一的地址; 每个器件可以使用独立电源 二. 基本工作原理: 以启动信号START来掌管总线,以停止信号STOP来释放总线; 每次通讯以START开始,以STOP结束; 启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R /W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据; 当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号; 每个数据字节在传送时都是高位(MSB)在前; 写通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK); 4. 主控收到ACK后开始发送第一个数据字节; 5. 被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 读通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信

号(ACK); 4. 主控收到ACK后释放数据总线,开始接收第一个数据字节; 5. 主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 四. 总线信号时序分析 1. 总线空闲状态 SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高; 2. 启动信号START 时钟信号SCL保持高电平,数据信号SDA的电平被拉低(即负跳变)。启动信号必须是跳变信号,而且在建立该信号前必修保证总线处于空闲状态; 3. 停止信号STOP 时钟信号SCL保持高电平,数据线被释放,使得SDA返回高电平(即正跳变),停止信号也必须是跳变信号。 4. 数据传送 SCL线呈现高电平期间,SDA线上的电平必须保持稳定,低电平表示0(此时的线电压为地电压),高电平表示1(此时的电压由元器件的VDD决定)。只有在SCL线为低电平期间,SDA上的电平允许变化。 5. 应答信号ACK I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。 6. 无应答信号NACK 在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途: a. 一般表示接收器未成功接收数据字节; b. 当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。 五. 寻址约定

计算机程序的执行过程

一。计算机程序的执行过程 程序就是指令的集合 为使计算机按预定要求工作,首先要编制程序。程序是一个特定的指令序列,它告诉计算机要做哪些事,按什么步骤去做。指令是一组二进制信息的代码,用来表示计算机所能完成的基本操作。 1.程序 程序是为求解某个特定问题而设计的指令序列。程序中的每条指令规定机器完成一组基本操作。如果把计算机完成一次任务的过程比作乐队的一次演奏,那么控制器就好比是一位指挥,计算机的其它功能部件就好比是各种乐器与演员,而程序就好像是乐谱。计算机的工作过程就是执行程序的过程,或者说,控制器是根据程序的规定对计算机实施控制的。例如,对于算式 计算机的解题步骤可作如下安排: 步骤1:取a ; 步骤2:取b ; 步骤3:判断; . 若b≥0,执行步骤4 .若b<0,执行步骤6 步骤4:执行a+b; 步骤5:转步骤7; 步骤6:执行a-b; 步骤7:结束。 计算机的工作过程可归结为:取指令→分析指令→执行指令→再取下一条指令,直到程序结束的反复循环过程。通常把其中的一次循环称为计算机的一个指令周期。总之,我们可把程序对计算机的控制归结为每个指令周期中指令对计算机的控制。 2.指令 程序是由指令组成的。指令是机器所能识别的一组编制成特定格式的代码串,它要求机器在一个规定的时间段(指令周期)内,完成一组特定的操作。指令的基本格式可归结为操作码OP和操作数地址AD两部分,具体内容是: ⑴指出计算机应完成的一组操作内容,如传送(MOV)、加法(ADD)、减法(SUB)、输出、停机(HLT)、条件转移(JZ)等。这部分称为指令的操作码部分。 ⑵两个操作数的地址和存放结果的地址及寻址方式。 ⑶为保证程序执行的连续性,在执行当前指令时,还需指出下一条指令的地址。由于指令在存储器中一般是顺序存放的,所以只要设置一个指令指针(IP),每执行一条指令,IP自动加1,便自动指出下一条指令的地址,而不必在指令中专门指出下一条指令的地址。只有在转移指令中才指出下一条指令的地址。此时,IP的内容将随转移指令所指示的内容改变。 3.指令的执行 指令规定的内容是通过控制器执行的,或者说控制器是按照一条指令的内容指挥操作的。 ⑴控制器的功能

I2C总线协议规范 v2.1

THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000

CONTENTS 1PREFACE. . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.1Version 1.0 - 1992. . . . . . . . . . . . . . . . . . . . 3 1.2Version 2.0 - 198. . . . . . . . . . . . . . . . . . . . . 3 1.3Version 2.1 - 1999. . . . . . . . . . . . . . . . . . . . 3 1.4Purchase of Philips I2C-bus components . . 3 2THE I2C-BUS BENEFITS DESIGNERS AND MANUFACTURERS. . . . . . . . . . . . . . .4 2.1Designer benefits . . . . . . . . . . . . . . . . . . . . 4 2.2Manufacturer benefits. . . . . . . . . . . . . . . . . 6 3INTRODUCTION TO THE I2C-BUS SPECIFICATION . . . . . . . . . . . . . . . . . . . . .6 4THE I2C-BUS CONCEPT . . . . . . . . . . . . . . .6 5GENERAL CHARACTERISTICS . . . . . . . . .8 6BIT TRANSFER . . . . . . . . . . . . . . . . . . . . . .8 6.1Data validity . . . . . . . . . . . . . . . . . . . . . . . . 8 6.2START and STOP conditions. . . . . . . . . . . 9 7TRANSFERRING DATA. . . . . . . . . . . . . . .10 7.1Byte format . . . . . . . . . . . . . . . . . . . . . . . . 10 7.2Acknowledge. . . . . . . . . . . . . . . . . . . . . . . 10 8ARBITRATION AND CLOCK GENERATION . . . . . . . . . . . . . . . . . . . . . .11 8.1Synchronization . . . . . . . . . . . . . . . . . . . . 11 8.2Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . 12 8.3Use of the clock synchronizing mechanism as a handshake. . . . . . . . . . . 13 9FORMATS WITH 7-BIT ADDRESSES. . . .13 107-BIT ADDRESSING . . . . . . . . . . . . . . . . .15 10.1Definition of bits in the first byte . . . . . . . . 15 10.1.1General call address. . . . . . . . . . . . . . . . . 16 10.1.2START byte . . . . . . . . . . . . . . . . . . . . . . . 17 10.1.3CBUS compatibility. . . . . . . . . . . . . . . . . . 18 11EXTENSIONS TO THE STANDARD- MODE I2C-BUS SPECIFICATION . . . . . . .19 12FAST-MODE. . . . . . . . . . . . . . . . . . . . . . . .19 13Hs-MODE . . . . . . . . . . . . . . . . . . . . . . . . . .20 13.1High speed transfer. . . . . . . . . . . . . . . . . . 20 13.2Serial data transfer format in Hs-mode. . . 21 13.3Switching from F/S- to Hs-mode and back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2313.4Hs-mode devices at lower speed modes. . 24 13.5Mixed speed modes on one serial bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 13.5.1F/S-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.2Hs-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.3Timing requirements for the bridge in a mixed-speed bus system. . . . . . . . . . . . . . 27 1410-BIT ADDRESSING. . . . . . . . . . . . . . . . 27 14.1Definition of bits in the first two bytes. . . . . 27 14.2Formats with 10-bit addresses. . . . . . . . . . 27 14.3General call address and start byte with 10-bit addressing. . . . . . . . . . . . . . . . . . . . 30 15ELECTRICAL SPECIFICATIONS AND TIMING FOR I/O STAGES AND BUS LINES. . . . . . . . . . . . . . . . . . . . 30 15.1Standard- and Fast-mode devices. . . . . . . 30 15.2Hs-mode devices. . . . . . . . . . . . . . . . . . . . 34 16ELECTRICAL CONNECTIONS OF I2C-BUS DEVICES TO THE BUS LINES . 37 16.1Maximum and minimum values of resistors R p and R s for Standard-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 39 17APPLICATION INFORMATION. . . . . . . . . 41 17.1Slope-controlled output stages of Fast-mode I2C-bus devices. . . . . . . . . . . . 41 17.2Switched pull-up circuit for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 41 17.3Wiring pattern of the bus lines. . . . . . . . . . 42 17.4Maximum and minimum values of resistors R p and R s for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 17.5Maximum and minimum values of resistors R p and R s for Hs-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 18BI-DIRECTIONAL LEVEL SHIFTER FOR F/S-MODE I2C-BUS SYSTEMS . . . . 42 18.1Connecting devices with different logic levels. . . . . . . . . . . . . . . . . . . . . . . . . 43 18.1.1Operation of the level shifter . . . . . . . . . . . 44 19DEVELOPMENT TOOLS AVAILABLE FROM PHILIPS. . . . . . . . . . . . . . . . . . . . . 45 20SUPPORT LITERATURE . . . . . . . . . . . . . 46

流程图制图软件有哪些

流程图是一种比较常见的图表,无论是在日常工作中还是生活中都随处可见。如果你是初入职场的新人,可能需要接触到一些简单的工作流程、会议流程图;如果你是产品经理、项目管理者或是软件开发师,更是需要经常接触到这类图表。流程图作为一种使用率非常高的图表,在商业中被誉为项目的基石。 传统的流程图用连接线指出各项工作顺序,对于新手来说,并不能掌握其中的规律,画出来的流程图,让阅读者花费很大的精力去了解整个流程和算法。如果我们可以借助模板,这样就可以规律性的修改各节点的顺序组成,让阅读者更容易从头到尾的看下去。亿图图示正好满足以上优点,还有额外三大特点:操作简单、模板丰富并且兼容多种文件。 流程图模板 亿图图示可以创建多种类型的流程图:事件流成图、工作流程图和程序流程图等等。

流程图例子 丰富的例子可帮助我们快速绘制想要的流程图框架,方便二次编辑。 选择好专业的流程图工具,接下来我们详细的了解一下绘制步骤。 首先下载并安装亿图图示软件,选择新建流程图,创建空白文档进入画布,当然也可以选择自己喜欢的流程图模板点击进入。 其次,在左侧的符号栏里有各种符号,用来搭建整个框架,选择需要的符号,直接拖拽到画板位置,利用软件的网格和标尺定位好图形符号的位置 最后,记得双击图形,输入补充文本关键词。如果想要流程图显得不那么单调,可以通过上方的样式栏更换主题颜色,使得流程图更专业。

亿图图示(Edraw Max)是一款基于纯矢量的全类型图形图表设计软件,是国产软件中仅有的可以媲美Visio的软件。用亿图可以很方便的创建流程图、思维导图、信息图、网络拓扑图、组织结构图、电路图、商业图表、方向图、UML、软件设计图、线框图、建筑设计等等。它可以帮助你更方便、更快捷的阐述设计思想,创作灵感。在设计时亿图采用全拖曳式操作,结合20000多个常用图形模板库和纯矢量符号素材,最大程度简化用户的工作量;让你在设计时既可以充分利用固有的素材,又可以借鉴他人的作品!

计算机程序设计发展史

计算机程序设计发展史 【摘要】 程序设计语言原本是被设计成专门使用在计算机上的,但它们也可以用来定义算法或者数据结构。正是因为如此,程序员才会试图使程序代码更容易阅读。设计语言往往使程序员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得程序设计语言是十分重要的,因为在当今所有的计算都需要程序设计语言才能完成,面向对象程序设计以及数据抽象在现代程序设计思想中占有很重要的地位,未来语言的发展将不在是一种单纯的语言标准,将会以一种完全面向对象,更易表达现实世界,更易为人编写,其使用将不再只是专业的编程人员,人们完全可以用订制真实生活中一项工作流程的简单方式来完成编程。 【关键字】 机器语言汇编语言高级语言计算机语言计算机技术编程语言【正文】 随着计算机的迅速发展,计算机程序设计已经从一种技巧发展成为一门科学,程序设计的方法也在不断的变化、发展。 50年代用机器指令代码进行手编程序是相当麻烦的,在工程技术人员中也很难得到推广。当程序设计是繁杂而又仔细的劳动,重复处理0与1又得花费大量的时间来编制与调试程序,故后期逐渐被用符号指令的汇编程序设计所代替。 1954年,第一个完全脱离机器硬件的高级语言—FORTRAN问世了,大大简化了程序设计,用高级语言编写的程序实现了基本上与机器无关。40多年来,共有几百种高级语言出现,有重要意义的有几十种,诸如FORTRAN、BASIC,ALGOL, COBOL,LISP,PL/1,C,C++等。 当计算机刚刚问世的时候,程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语言来解决问题的人是德国工程师楚泽(konrad zuse)。几十年后,计算机的价格大幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间来得宝贵。 在过去的几十年间,大量的程序设计语言被发明、被取代、被修改或组合在一起。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常大,而有许多语言并对新手来说太难学;还有,不同程序之间的运行成本各不相同。有许多用于特殊用途的语言,

关于IIC的通信协议程序

#define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define _BV(bit) (1 << (bit)) #ifndef cbi #define cbi(reg,bit) reg &= ~_BV(bit) #endif #ifndef sbi #define sbi(reg,bit) reg |= _BV(bit) #endif extern uchar dog; /* void delay_1ms(uchar xtal) { uchar i; for(i=0;i<(uint)(143*xtal-2);i++) {;} } //2 延时nms void delay_ms(uchar m, uchar fosc) { uchar i; i=0; while(i

计算机程序设计基础

计算机程序设计基础 ——精讲多练C/C++语言 程序的基本结构 1、在屏幕上显示如下图形: **************** * Hello World * **************** #include using namespace std; int main() { cout<<"****************"< using namespace std; int main() { double x,y,sum,sub,mult,div; cout<<"Please enter the two Numbers for calculation:"; cin>>x>>y; sum=x+y; sub=x-y; mult=x*y; div=x/y; cout< //宏定义 #define uchar unsigned char #define uint unsigned int

//引脚定义 sbit Scl= P3^6; //AT24C0x串行时钟sbit Sda= P3^7; //AT24C0x串行数据 //全局变量 uchar EEPROM_WriteBuffer[] = {"https://www.doczj.com/doc/2412140420.html,"}; uchar EEPROM_ReadBuffer[20]; //函数声明 /******************************************/ //延时子函时, //参数 d_time 控制延时的时间 //作用,灯亮和熄灭必须持续一定时间,人眼才能看到 void delay(unsigned int time); /******************************************/ //延时子函数 //参数范围 0-65536 void delay(unsigned int time) //参数 time 大小 { //决定延时时间长短 while(time--); }

计算机程序(1)

/*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:输入一个字符串,过滤此串,只保留串中的字母字 符,并统计新生成串中包含的字母个数。 例如:输入的字符串为ab234$df4,新生成的串为abdf 。 ------------------------------------------------*/ #include #include #define N 80 void wwjt(); fun(char *ptr) { /**********Program**********/ int i=0,n=0; while(*(ptr+i)!='\0') { if((*(ptr+i)>='a'&&*(ptr+i)<='z')||(*(ptr+i)>='A'&&*(ptr+i)<='Z')) { *(ptr+n)=*(ptr+i); n++; } i++; } *(ptr+n)=0; return n; /********** End **********/ } main() { char str[N]; int s; printf("input a string:");gets(str); printf("The origINal string is :"); puts(str); s=fun(str); printf("The new string is :");puts(str); }

c语言程序设计流程图详解

c语言程序设计流程图详解 介绍常见的流程图符号及流程图的例子。 本章例1-1的算法的流程图如图1-2所示。本章例1-2的算法的流程图如图1-3所示。 在流程图中,判断框左边的流程线表示判断条件为真时的流程,右边的流程线表示条件为假时的流程,有时就在其左、右流程线的上方分别标注“真”、“假”或“T、”“F或”“Y、”“N”注“真”、“假”或“T、”“F或”“Y、”“N”

另外还规定,流程线是从下往上或从右向左时,必须带箭头,除此以外,都不画箭头,流程线的走向总是从上向下或从左向右。 2.算法的结构化描述 早期的非结构化语言中都有goto语句,它允许程序从一个地方直接跳转到另一个地方去。 执行这样做的好处是程序设计十分方便灵活,减少了人工复杂度,但其缺点也是十分突出的,一大堆跳转语句使得程序的流程十分复杂紊乱,难以看懂也难以验证程序的正确性,如果有错,排起错来更是十分困难。这种转来转去的流程图所表达的混乱与复杂,正是软件危机中程序人员处境的一个生动写照。而结构化程序设计,就是要把这团乱麻理清。 经过研究,人们发现,任何复杂的算法,都可以由顺序结构、选择(分支)结构和循环结构这三种基本结构组成,因此,我们构造一个算法的时候,也仅以这三种基本结构作为“建筑 单元”,遵守三种基本结构的规范,基本结构之间可以并列、可以相互包含,但不允许交叉,不允许从一个结构直接转到另一个结构的内部去。正因为整个算法都是由三种基本结构组成的,就像用模块构建的一样,所以结构清晰,易于正确性验证,易于纠错,这种方法,就是结构化方法。遵循这种方法的程序设计,就是结构化程序设计。 相应地,只要规定好三种基本结构的流程图的画法,就可以画出任何算法的流程图。 (1)顺序结构 顺序结构是简单的线性结构,各框按顺序执行。其流程图的基本形态如图1-4所示,语句 的执行顺序为:A→B→C。 (2)选择(分支)结构 这种结构是对某个给定条件进行判断,条件为真或假时分别执行不同的框的内容。其基本形状有两种,如图1-5a)、b)所示。图1-5a)的执行序列为:当条件为真时执行A,否则执 行B;图1-5b)的执行序列为:当条件为真时执行A,否则什么也不做。 (3)循环结构 循环结构有两种基本形态:while型循环和do-while型循环。 a.while型循环 如图1-6所示。 其执行序列为:当条件为真时,反复执行A,一旦条件为假,跳出循环,执行循环紧后的语句。 b.do-while型循环 如图1-7所示。

i2c通讯协议及程序

I2C通信协议简介 (2013-01-17 10:48:03) 转载▼ 分类:通讯协议 标签: 杂谈 ACK是acknowledge的意思,确认. 摒弃复杂的情况,这里只对I2C做简单的介绍。 一、I2C 总线的一些特征: ? 只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL ? 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器? 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏 ? 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s ? 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整 ? 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制 二、I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据 起始和结束:

bool I2C_Start(void) { SDA_H; SCL_H; I2C_delay(); if(!SDA_read)return FALSE; // SDA线为低电平则总线忙,退出 SDA_L; // 拉低SDA线(当SCL为高电平时,SDA由高电平向低电平跳变表示开始信号) I2C_delay(); if(SDA_read) return FALSE; // SDA线为高电平则总线出错,退出 SDA_L; //数据为准备好时,拉低SCL线 I2C_delay(); return TRUE; } 发出开始信号之后,设备在数据未准备好时,拉低SCL线,这样主设备可知从设备未发送数据,从设备在数据准备好,可以发送的时候,停止拉低SCL线,这时候才开始真正的数据传输 void I2C_Stop(void) { SCL_L; I2C_delay(); SDA_L; I2C_delay(); SCL_H; // SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据 I2C_delay(); SDA_H; I2C_delay(); }

相关主题
文本预览
相关文档 最新文档