关于IIC的通信协议程序

合集下载

iic协议讲解

iic协议讲解

iic协议讲解
IIC(I2C)是一种用于在电子设备之间进行通信的串行通信协议。

IIC全称是Inter-Integrated Circuit,通常也称作I2C(Inter-IC,简称2-wire)。

由飞利浦(Philips)公司在20世纪80年代初开发并发布。

IIC协议使用双线制(SDA和SCL线)进行通信,其中SDA (Serial Data Line)是数据线,负责发送和接收数据;SCL(Serial Clock Line)是时钟线,用于同步数据传输。

这两条线都是双向的,可以通过连接多个设备实现多主控制。

在IIC协议中,有两种主要的设备,分别是主设备和从设备。

主设备负责发起和控制总线上的通信,而从设备则接受和执行主设备的请求。

从设备可以是各种外设,如传感器、存储器等。

IIC协议的通信过程包括起始信号、地址传输、数据传输和停止信号。

起始信号和停止信号是用于标志一次通信的开始和结束。

在起始信号和停止信号之后是8位的地址传输,其中最高位是设备地址,用于标识目标设备。

地址传输之后是数据传输阶段,可以发送或接收多个字节的数据。

IIC协议还支持两种传输模式,分别是7位地址模式和10位地址模式。

在7位地址模式下,可以有128个不同的设备地址,而在10位地址模式下,可以有1024个不同的设备地址。

总的来说,IIC协议是一种灵活简洁的串行通信协议,广泛应用于各种电子设备之间的通信。

它简化了硬件连接,提供了可靠的数据传输和多主控制的能力,同时也具有较低的通信成本。

iic通信应答信号例程

iic通信应答信号例程

IIC通信应答信号例程1. 什么是IIC通信IIC通信全称为Inter-Integrated Circuit,是一种串行通信协议,由飞利浦公司(Philips)于1980年代初开发。

它是一种高效、简单和灵活的通信方式,在各种电子设备中广泛应用。

IIC通信基于两根线路:SDA(Serial Data Line)和SCL(Serial Clock Line)。

SDA线路用于数据传输,而SCL线路用于同步数据传输的时钟信号。

通过这两根线路,多个设备可以在同一个总线上进行双向通信。

2. IIC通信的应答信号在IIC通信中,每个设备都有一个唯一的地址。

主设备通过发送起始条件来开始一次数据传输,并指定要与之通信的从设备地址。

然后,主设备发送数据或命令给从设备,并等待从设备的应答。

从设备的应答分为两种情况:ACK(Acknowledge)和NACK(Not Acknowledge)。

当从设备成功接收到主设备发送的数据或命令时,它会发送一个ACK信号作为应答。

如果从设备无法正确接收到数据或命令,则会发送一个NACK信号作为应答。

3. IIC通信应答信号例程下面是一个IIC通信应答信号的例程,用于演示如何在主设备和从设备之间进行数据传输,并根据应答信号判断传输是否成功。

主设备代码#include <Wire.h>void setup() {Wire.begin(); // 初始化IIC总线Serial.begin(9600); // 初始化串口通信}void loop() {Wire.beginTransmission(8); // 发送起始条件,并指定从设备地址为8Wire.write("Hello"); // 向从设备发送数据byte error = Wire.endTransmission(); // 结束传输并获取错误码if (error == 0) {Serial.println("Data sent successfully!"); // 打印成功信息} else {Serial.println("Data transmission failed!"); // 打印失败信息}delay(1000);}从设备代码#include <Wire.h>void setup() {Wire.begin(8); // 初始化IIC总线,并设置从设备地址为8Wire.onReceive(receiveEvent); // 注册接收事件函数}void loop() {}void receiveEvent(int numBytes) {while (Wire.available()) { // 当有数据可用时循环读取数据char c = Wire.read(); // 读取数据到变量cif (c == 'H') { // 判断接收到的字符是否为'H'Wire.sendACK(); // 发送ACK信号作为应答Serial.println("Data received successfully!"); // 打印成功信息} else {Wire.sendNACK(); // 发送NACK信号作为应答Serial.println("Data reception failed!"); // 打印失败信息}}}在上述代码中,主设备使用Wire库初始化IIC总线,并通过Wire.beginTransmission()函数指定从设备地址为8。

实验八 IIC通信协议

实验八 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-4us2、SDA拉高,保持时间约为1.2-4us;应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。

CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。

若未收到应答信号,由判断为受控单元出现故障。

应答信号的时序图如下所示:应答时序图发送时的应答信号;**********应答信号**********ACK: SETB SDA ;数据线置高SETB SCL ;时钟线置高ACALL DELAYJB SDA,$ ;等待数据线变低ACALL DELAYCLR SCL ;时钟线置低RET注意:这里如果数据线一直为高将进入死循环,所以一般我们都会在这做一个容错的处理。

具体的程序如下:ACK: MOV R4,#00HSETB SDASETB SCLLOP0: JNB SDA,LOPDJNZ R4,LOP0 ;循环255次LOP: ACALL DELCLR SCLRET接收时的应答信号ACK1: CLR SDA ;数据线置低SETB SCL ;时钟线置高NOPNOPCLR SCL ;时钟线置低SETB SDA ;数据线置高RET3、字节的发送和接收写周期时序图一字节数据发送子程序,流程如下:图6-22 发送子程序流程图(2)一字节数据接收子程序,流程如下:图6-23 接收子程序流程图7、写操作(1)字节写图6-24 字节写时序图流程如下:图6-25 字节写的流程图(2)页写图6-26 页写时序图页写流程如下:8、读操作(1)选择读图6-28 选择读时序图图6-29 NO ACK时序图(2)连续读图6-30 连续读时序图四、实验原理图:I2C总线电路图五、实验例题:例题一编写一程序,实现I2C的指定字节读写,用24C08来记录单片机复位或者开机的次数,并将复位或者开机的次数显示在数码管上。

IIC通信协议

IIC通信协议

IIC通信协议协议名称:IIC通信协议一、引言IIC通信协议是一种串行总线通信协议,用于在集成电路(IC)之间进行数据传输。

本协议旨在规范IIC通信的硬件连接和通信协议的数据格式,以确保不同设备之间的互操作性和数据传输的可靠性。

二、定义和缩写1. IIC:Inter-Integrated Circuit,即IIC总线,又称为I2C总线。

2. 主设备(Master):发起IIC通信的设备。

3. 从设备(Slave):响应主设备的IIC通信的设备。

4. SDA:串行数据线,用于传输数据。

5. SCL:串行时钟线,用于同步数据传输。

三、物理连接1. 主设备和从设备之间的连接方式:a. 将主设备的SDA线连接到从设备的SDA线。

b. 将主设备的SCL线连接到从设备的SCL线。

c. 通过上拉电阻将SDA和SCL线拉高至Vcc。

四、通信协议1. 通信起始和停止条件:a. 通信起始条件:在SCL为高电平时,SDA由高电平切换至低电平。

b. 通信停止条件:在SCL为高电平时,SDA由低电平切换至高电平。

2. 数据传输格式:a. 数据位:每个数据位都由SDA线上的电平表示。

b. 时钟信号:数据在SCL线上的时钟信号驱动下传输。

c. 数据传输顺序:从高位到低位,MSB(Most Significant Bit)先传输。

3. 通信过程:a. 主设备发起通信:i. 主设备发送起始条件。

ii. 主设备发送从设备地址和读/写位。

iii. 主设备接收从设备的应答信号。

b. 从设备响应通信:i. 从设备接收到地址匹配的信号后,发送应答信号。

ii. 从设备根据主设备的读/写位,执行相应的读或写操作。

iii. 从设备发送数据或接收数据,并发送应答信号。

c. 主设备结束通信:i. 主设备发送停止条件。

五、数据传输速率IIC通信协议支持多种数据传输速率,常见的有100Kbps、400Kbps和1Mbps。

具体的传输速率由主设备和从设备的硬件支持决定。

IIC通信协议

IIC通信协议

IIC通信协议协议名称:IIC通信协议一、引言IIC通信协议是一种串行通信协议,用于在集成电路之间进行数据传输。

本协议旨在规范IIC通信的数据格式、传输速率、地址分配和错误处理等方面的要求,以确保各种设备之间的互操作性和稳定性。

二、定义1. IIC总线:指由串行数据线(SDA)和串行时钟线(SCL)组成的双线制总线。

2. 主设备:指能够发起IIC通信的设备,负责控制总线上的数据传输。

3. 从设备:指响应主设备请求的设备,负责接收和发送数据。

4. 起始条件:指主设备将总线上的SDA线从高电平拉低,而SCL线保持高电平的状态。

5. 停止条件:指主设备将总线上的SDA线从低电平拉高,而SCL线保持高电平的状态。

三、通信流程1. 主设备发送起始条件。

2. 主设备发送从设备地址和读/写位。

3. 从设备响应主设备的地址和读/写位。

4. 主设备或从设备发送数据。

5. 主设备或从设备接收数据。

6. 主设备发送停止条件。

四、数据格式1. 地址格式:从设备地址由7位二进制数表示,最高位为0表示写操作,为1表示读操作。

2. 数据格式:每个字节由8位二进制数表示,以大端模式传输。

数据传输可以是单字节或多字节。

五、传输速率1. 标准模式:传输速率为100 kbit/s。

2. 快速模式:传输速率为400 kbit/s。

3. 高速模式:传输速率为3.4 Mbit/s。

六、地址分配1. 从设备地址由7位二进制数表示,范围从0000000(0x00)到1111111(0x7F)。

2. 保留地址:0000xxx(0x00-0x07)和1111xxx(0xF8-0xFF)为保留地址,不可分配给从设备。

七、错误处理1. 总线冲突:当多个设备同时发送数据时,可能会导致总线冲突。

冲突检测由主设备负责,发生冲突时主设备将停止数据传输。

2. 超时处理:当设备在传输过程中未能及时响应时,主设备将停止数据传输并进行错误处理。

3. 错误标志:主设备和从设备在传输过程中可以通过特定的标志位表示传输过程中的错误。

IIC通信协议

IIC通信协议

IIC通信协议协议名称:IIC通信协议一、引言IIC通信协议是一种用于短距离数字通信的串行总线通信协议。

本协议旨在规范IIC通信协议的使用方式,确保各设备之间的数据传输的可靠性和一致性。

二、定义1. IIC总线:指两根信号线,即串行数据线(SDA)和串行时钟线(SCL)。

2. 主设备:指发起IIC通信的设备,负责控制总线上的数据传输。

3. 从设备:指被主设备控制的设备,负责接收和发送数据。

三、通信流程1. 总线初始化主设备通过向SCL线发送时钟信号来初始化总线。

初始化过程中,主设备将SDA线拉高,然后发送起始信号,标志着通信的开始。

2. 寻址主设备发送一个包含从设备地址和读/写位的字节来寻址从设备。

从设备地址由7位二进制数表示,最高位为0表示写操作,为1表示读操作。

3. 数据传输主设备向从设备发送数据时,将数据位逐个发送到SDA线上,并通过SCL线的时钟信号同步传输。

从设备接收到数据后,发送应答信号,表示数据接收成功。

4. 停止信号主设备发送停止信号来结束通信。

停止信号由将SDA线从低电平拉到高电平,然后将SCL线拉高形成。

四、数据格式1. 起始信号:SDA线从高电平拉到低电平,SCL线保持高电平。

2. 数据位:在SCL线为低电平时,SDA线上的数据保持稳定,直到SCL线变为高电平。

3. 应答信号:在主设备发送完一个字节的数据后,从设备需要发送一个应答信号。

应答信号由将SDA线拉低形成。

4. 停止信号:SDA线从低电平拉到高电平,SCL线保持高电平。

五、错误处理1. 总线忙错误:如果主设备在发送起始信号前检测到SDA线为低电平,则表示总线正忙,主设备需要等待总线空闲后再次尝试。

2. 应答错误:如果主设备在发送完一个字节的数据后未收到从设备的应答信号,则表示应答错误,主设备可以选择重发数据或中断通信。

六、电气特性1. 电压:通信线路上的电压应在0V至5V之间。

2. 高电平:通信线路上的高电平应大于等于2.1V。

I2C通信原理及程序详细讲解

I2C通信原理及程序详细讲解

I2C通信原理及程序详细讲解I2C(Inter-Integrated Circuit)是一种串行通信协议,常用于连接微控制器、传感器和其他外部设备。

I2C通信协议由荷兰飞利浦公司于1982年开发,它使用两根信号线(SDA和SCL)进行数据传输。

I2C通信协议采用主从结构,一个主设备(如微控制器)可以连接多个从设备(如传感器)。

主从设备之间通过SDA和SCL线进行数据传输。

SDA线是双向数据线,用于传输数据,SCL线是时钟线,用于同步数据传输。

I2C通信协议中,设备的地址是一个重要概念。

每个设备都有一个唯一的地址,通过该地址可以选择和通信特定的设备。

地址由7个位组成,其中最高位是固定的,并取决于设备是主设备还是从设备。

如果最高位为0,则表示该设备是主设备;如果最高位为1,则表示该设备是从设备。

通过以下步骤,让我们详细了解如何在I2C总线上进行通信。

1.初始化I2C总线:在程序开始时,需要初始化I2C总线。

这通常包括初始化SDA和SCL引脚,设置时钟频率等。

具体的初始化步骤取决于使用的硬件和软件环境。

2.发送开始信号:开始信号表示I2C数据传输的开始。

它由主设备发送,并且SDA线从高电平转为低电平时发出。

发送开始信号后,SDA线上的数据将被解释为地址数据。

3.发送设备地址:主设备发送一个包含设备地址和读/写位(R/W)的数据字节。

设备地址是唯一的,并且由主设备选择。

读/写位指示从设备是要读取数据还是写入数据。

4.等待从设备响应:主设备发送设备地址后,会等待从设备的响应。

从设备将响应一个应答位(ACK)来确认地址接收成功。

如果收到ACK位,则继续进行下一步,否则可能是设备未连接或通信错误。

5.发送数据:主设备发送数据给从设备。

数据可以是命令、配置或实际数据,具体取决于应用场景。

发送数据的方式是将每个数据字节传输到SDA线上,并在每个数据字节后发送一个ACK位。

6.接收数据:从设备将数据发送给主设备。

数据可以是传感器读数、存储器数据等。

qtwindowsiic协议编程

qtwindowsiic协议编程

qtwindowsiic协议编程
QTwindowsIIC协议编程是指在Qt框架下使用IIC(Inter-Integrated Circuit)协议进行编程。

IIC是一种串行通信协议,通常用于连接微控制器和外部设备,如传感器、存储器或其他外围设备。

在Qt框架中,可以使用QI2CDevice类来进行IIC通信的编程。

首先,要进行QTwindowsIIC协议编程,需要在Qt环境中安装相应的库和工具。

然后,可以创建一个Qt项目,并在项目中包含QI2CDevice类所在的头文件。

接下来,可以使用QI2CDevice类的方法来初始化IIC总线、发送数据、接收数据等操作。

在编程过程中,需要考虑以下几个方面:
1. 初始化,在使用IIC通信前,需要初始化IIC总线和设备地址等参数。

2. 数据传输,可以使用QI2CDevice类提供的方法来发送和接收数据,需要注意数据的格式和长度。

3. 错误处理,在实际应用中,可能会遇到IIC通信出现错误的情况,需要进行相应的错误处理,例如超时、设备未响应等情况。

4. 多线程,如果在Qt应用程序中需要进行IIC通信,需要考虑多线程编程的相关问题,确保IIC通信不会阻塞主线程。

另外,还可以考虑使用Qt提供的信号与槽机制来处理IIC通信的事件,以及使用Qt的调试工具来调试IIC通信过程中的问题。

总之,QTwindowsIIC协议编程涉及到Qt框架下对IIC通信的相关编程技术,需要充分了解Qt框架和IIC通信协议的相关知识,并结合具体的应用场景进行编程实现。

希望以上回答能够全面解答你的问题。

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

#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)#endifextern uchar dog;/*void delay_1ms(uchar xtal){uchar i;for(i=0;i<(uint)(143*xtal-2);i++){;}}//2 延时nmsvoid delay_ms(uchar m, uchar fosc){uchar i;i=0;while(i<m){delay_1ms(fosc);i++;}}*///-----------------------------IIC操作子程序-------------------------------//IIC写操作//address_device为器件地址,0xa0为24C64//address_reg1为寄存器地址1,address_reg2为寄存器地址2//data_package为写的数据void twi_write(uchar address_reg1,uchar address_reg2, uchar data_package) {//TWI预分频为4分频//CLI();sbi(TWSR,TWPS0);cbi(TWSR,TWPS1);TWBR=0x20;//SCL频率0x20=29khz ,begin:dog=1;TWCR=_BV(TWEN)|_BV(TWSTA)|_BV(TWINT);while(!(TWCR&_BV(TWINT)))//等待TWINT置位,TWINT置位表示开始信号发送完毕dog=1;if(((TWSR&0xF8)!=0x08)&((TWSR&0xF8)!=0x10))//检查状态寄存器,如果状态字不是START或RESTART,重新发送开始信号goto begin;TWDR=0xa0;//将器件地址写入到TWDR寄存器,TWINT位清零,启动发送地址// TWDR="0xa0";//%%%%%%%%%%%%%%%TWCR=_BV(TWEN)|_BV(TWINT);while(!(TWCR&_BV(TWINT)))//等待TWINT置位,TWINT置位表示总线命令SLA+W已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x18)//检查TWI状态寄存器,如果状态字不是地址ACK,重新发送开始信号goto begin;//---发送寄存器地址TWDR=address_reg1;//写寄存器地址//TWDR=address_reg1;//%%%%%%%%%%%%%%%TWCR=_BV(TWEN)|_BV(TWINT);while(!(TWCR&_BV(TWINT)))//等待TWINT置位,TWINT置位表示总线命令SLA+W已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x28)//检查TWI状态寄存器,如果状态字不是地址ACK,重新发送开始信号goto begin;//---发送EEPROM的第二个地址TWDR=address_reg2;//写寄存器地址//TWDR=address_reg2;//%%%%%%%%%%%%%%%TWCR=_BV(TWEN)|_BV(TWINT);while(!(TWCR&_BV(TWINT)))//等待TWINT置位,TWINT置位表示总线命令SLA+W已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x28)//检查TWI状态寄存器,如果状态字不是地址ACK,重新发送开始信号goto begin;//---写入数据TWDR=data_package;//将数据载入到TWDR寄存器,TWINT位清零,启动发送地址//TWDR=data_package;//%%%%%%%%%%%%%%%TWCR=_BV(TWINT)|_BV(TWEN);while(!(TWCR&_BV(TWINT)))//等待TWINT置位,TWINT置位表示总线数据已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x28)//检查TWI状态寄存器,如果状态字不是数据ACK,重新发送开始信号goto begin;TWCR=_BV(TWINT)|_BV(TWSTO)|_BV(TWEN);//发送STOP信号//delay_ms(2,8);//delay_ms(2,8);//SEI();//delay_ms(2,8);//PORTC&=~(1<<6);}//-------------------------------------------//IIC读操作//address_reg1为寄存器地址,address_reg2为寄存器地址2/////////////////////////////////uchar twi_read(uchar address_reg1,uchar address_reg2){uchar result1=0;sbi(TWSR,TWPS0);//TWI预分频为4分频cbi(TWSR,TWPS1);TWBR=0x20;//SCL频率92160HZbegin://delay_ms(2,8);dog=1;TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);//发送开始信号while(!(TWCR&(1<<TWINT)))//等待开始信号发送完毕dog=1;if(((TWSR&0xF8)!=0x08)&((TWSR&0xF8)!=0x10))//检查TWI状态寄存器,如果状态字不是START或RESTART,重新发送开始信号goto begin;//---发送器件地址TWDR=0xa0;//发器件写地址,TWINT位清零,启动发送%%%%%%%%%%%%%% TWCR=(1<<TWINT)|(1<<TWEN);while(!(TWCR&(1<<TWINT)))//等待TWINT置位,TWINT置位表示总线命令SLA+W已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x18)//检查TWI状态寄存器,如果状态字不是地址ACK,重新发送开始信号goto begin;//---发送寄存器地址TWDR=address_reg1;//写寄存器地址,TWINT位清零,启动发送%%%%%%%%%%%%%%%%%%TWCR=(1<<TWINT)|(1<<TWEN);while(!(TWCR&(1<<TWINT)))//等待TWINT置位,TWINT置位表示总线数据已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x28)//检查TWI状态寄存器,如果状态字不是数据ACK,重新发送开始信号goto begin;//---发送EEPROM的第二个地址TWDR=address_reg2;//写寄存器地址//TWDR=address_reg2;//%%%%%%%%%%%%%%%TWCR=_BV(TWEN)|_BV(TWINT);while(!(TWCR&_BV(TWINT)))//等待TWINT置位,TWINT置位表示总线命令SLA+W已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x28)//检查TWI状态寄存器,如果状态字不是地址ACK,重新发送开始信号goto begin;//---发送起始信号TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);//发送开始信号while(!(TWCR&(1<<TWINT)))//等待TWINT置位,TWINT置位表示开始信号发送完毕dog=1;if(((TWSR&0xF8)!=0x08)&((TWSR&0xF8)!=0x10))//检查TWI状态寄存器,如果状态字不是START或RESTART,重新发送开始信号goto begin;//---发送读命令TWDR=0xa0+1;//读器件地址写入到TWDR寄存器,TWINT位清零,启动发送TWCR=(1<<TWINT)|(1<<TWEN);while(!(TWCR&(1<<TWINT)))//等待TWINT置位,TWINT置位表示总线命令SLA+W已发出,及收到应答信号ACK/NACKdog=1;if((TWSR&0xF8)!=0x40)//检查TWI状态寄存器,如果状态字不是地址ACK,重新发送开始信号goto begin;TWCR=(1<<TWINT)|(1<<TWEN);//发送NACK信号while(!(TWCR&(1<<TWINT)))dog=1;if((TWSR&0xF8)!=0x58)goto begin;TWCR=(1<<TWSTO)|(1<<TWEN);//发送STOP信号result1=TWDR;//将TWDR寄存器的数据读入//delay_ms(2,8);//delay_ms(2,8);//delay_ms(2,8);return result1;}void SETPA(uchar b,uchar v){if(v==0) PORTA&=~(1<<b);else if(v==1) PORTA|=(1<<b);}void SETPB(uchar b,uchar v){if(v==0) PORTB&=~(1<<b);else if(v==1) PORTB|=(1<<b);}void SETPC(uchar b,uchar v){if(v==0) PORTC&=~(1<<b);else if(v==1) PORTC|=(1<<b);}void SETPD(uchar b,uchar v){if(v==0) PORTD&=~(1<<b);else if(v==1) PORTD|=(1<<b);}void SETPE(uchar b,uchar v){if(v==0) PORTE&=~(1<<b);else if(v==1) PORTE|=(1<<b);}void SETPF(uchar b,uchar v){if(v==0) PORTF&=~(1<<b);else if(v==1) PORTF|=(1<<b); }void SETPG(uchar b,uchar v) {if(v==0) PORTG&=~(1<<b); else if(v==1) PORTG|=(1<<b); }。

相关文档
最新文档