




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机基础讲义陈明专用 第一节课 点亮LED灯1. 单片机内部资源的三大指标: FLASH (程序存储空间),RAM(内存),SFR(特殊功能寄存)。2. 单片机最小系统;三要素:电源电路、复位电路、晶振电路。特点:单片机可以运行程序,是单片机控制系统的核心。3. 单片机C语言SFR声明: sfr P0 = 0x80; sfr TCON = 0x88; sbit IT0 = TCON0; sbit LED = P0 0; 一个字节是8位,一位控制一个I/O口,字节控制所有的I/O口4. 作业 牢记发光二极管参数和限流电阻计算方法。理解单片机基本外围电路,以及单片机的FLASH、RAM、SFR的概念。初步了解单片机程序的基本方式,并且通过查看数据手册来了解SFR的有关内容 第二节课 硬件基础学习1去耦电容的使用n 低频滤波电容,平常应用最多的是钽电容,电解电容,陶瓷电容,起到去除电源低频纹波,稳定电源的作用。n 高频滤波电容,电源附近,通常用104电容来进行去除高频干扰。2.三极管n 三极管是我们的日常应用电路中经常会用到的一个器件。分为PNP和NPN型。n 三极管常用功能:1、开关控制 2、信号放大 3、电平转换3.74HC138n 74HC138:由三个输入来控制8个输出口的状态,即所谓的三八译码器。n 0000 1 1 1 1 1 1 1 n 0011 0 1 1 1 1 1 1n 0101 1 0 1 1 1 1 1n 0111 1 1 0 1 1 1 1n 1001 1 1 1 0 1 1 1n 1011 1 1 1 1 0 1 1n 1101 1 1 1 1 1 0 1n 1111 1 1 1 1 1 1 05. 作业n 1、理解并掌握电源输入端滤波电路及其电容的应用和原理。n 2、记忆三极管的型号和导通原理。n 3、理解三八译码器的原理,并且学会使用。 第三节课 流水灯1. 常用延时办法n 非精确延时 1、for(i = 0; i 100; i+);2、i = 100; while(i-); 精确延时办法 1、利用库函数_nop_(); (需要include )2.变量类型关键字所占字节取值范围unsigned char10255“00000000”到”11111111”unsigned int2065535“00000000 00000000”到“11111111 11111111”依照国际惯例,我们可以用uint8 uint16 等缩写来替代,只需要用typedef语句可以完成:typedef unsigned char uint8;typedef unsigned int uint16;4. 流水灯实验n 8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,在程序编写过程中,可以直接用P0来进行操作。n C语言的8位二进制数代表了8个IO口n P0 = 0xfe;n P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0n 1 1 1 1 1 1 1 05. C语言运算符n 左移 n X2n 左移,最低位填0补充;右移,最高位填0补充n 0xf0 11100000 01111000n 按位取反符号 取反后1变成0,0变成10x0F取反后成为 0xF0,即00001111-111100006. 数码管6. 数码管真值表根据单片机连接电路,可以计算出数码管的真值表:n P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0n dp g f e d c b an 1 1 1 1 1 0 0 1n P0 = 0xF9;根据单片机连接电路,计算出数码管的真值表(共阳极) 0 1 2 3 4 5 0xc0 0xf9 0xa4 0xb0 0x99 0x92 6 7 8 9 A b0x82 0xf8 0x80 0x90 0x88 0x83 C d E F0xa7 0xa1 0x86 0x8e6. 作业n 记住C语言2个变量类型及其范围,掌握C语言的位操作和字节操作。n 用3个LED小灯做一个交通灯的程序。n 根据原理图和流水灯程序,独立完成流水灯反方向流动以及小灯一个个点亮直到全亮的功能。n 明白数码管的原理,写出数码管真值表。 第四节课 定时器1. 时钟周期和机器周期n 时钟周期T是时序中最小的时间单位。具体计算就是1/时钟源。我们开发板上单片机使用的时钟周期= 1/11059200 s。n 机器周期CPU完成一个操作的最短时间。 普通51一个机器周期是12个时钟周期。2. 定时器和计数器n 2个定时器/计数器:定时器0和定时器1n 定时器:每经过一个机器周期,寄存器加1。因此,可以将机器周期看作为计数周期。n 计数器:后续课程介绍。3.特殊功能寄存器TCON位76543210符号TF1TR1TF0TR0IE1IT1IE0IT0n TF:定时器溢出标志。溢出时,该位自动置1。中断执行时硬件清零,或者软件清零。n TR:定时器运行控制位,置1开始计时,清0停止计时。4.定时器的特殊功能寄存器 TMOD位76543210符号T1GATET1C/TT1M1T1M0T0GATET0C/TT0M1T0M0n T1和T0分别代表单片机两个计数器n GATE:该位被置位时为门控位。仅当TR1被置位并且INT1脚为高,定时器开始计数。当该位被清零时,只要TR1被置位,定时器1马上开始计数。n C/T:该位为0的时候,用作定时器,该位为1的时候,用做计数器。M1,M0n 00 01 10 11n 模式0 模式1 模式2 模式3n 模式1:16位的计数器。(TH1,TL1)n 模式2:自动装载8位计数器。主要应用在串口波特率发生器。n 模式0&模式3:几乎不用。n TCON和TMOD复位后都会自动变成0x00.n 12 * (65536- x)/11059200 = 0.0015. 使用定时器的方法n 第一:设置特殊功能寄存器TMOD,使之工作在需求的状态。n 第二:设置计数寄存器的初值,精确设定好定时时间。n 第三:设置特殊功能寄存器TCON,通过打开TR来让定时器进行工作。(也可设置为中断模式)n TH1 = 0xfc; TL1 = 0X66;n 12(65536 x) /11059200 = 0.02s7. 程序#include typedef unsigned char uint8;typedef unsigned int uint16;sbit ENLED = P14;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit LED = P00;main()uint8 counter;ENLED = 0;ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1;TMOD = 0x01;TH0 = 0xB8;TL0 = 0x00;TR0 = 1;while(1) if(1 = TF0) TF0 = 0; TH0 = 0xB8;TL0 = 0x00; counter+; if(50 = counter) counter = 0; LED = LED; 第五课 基础学习+习题课1. 变量n 局部变量: l 在函数内部声明的变量是内部变量,它只在本函数内有效,在此函数外是不能作用的。函数体内占内存,出了函数释放内存。n 全局变量:l 在函数外边声明的变量就是外部变量,也叫做全局变量,一个源文件(.c)可以包含一个或者多个函数,全局变量的作用范围是从声明的位置一直到文件结束,一直占用内存。n 静态变量l 在函数体内声明,前边加static关键字声明,属于局部变量,和局部变量的区别是一直占用内存,和全局变量的区别是只能在函数体内使用。注意:只有第一次赋值有效。2. 晶振电路n 晶振选择: l 根据实际系统需求选择,6M,12M,11.0592M,20M等等n 负载电容:l 对地接2个10到30pF的电容即可,常用20pF 。n 万用表测晶振:l 直接用红表笔对晶振引脚,黑表笔接GND,测量电压即可。3. 复位电路n 复位:l 把单片机内部电路设置成为一个确定的状态,所有的寄存器初始化。l 51单片机的复位时间大约在2个机器周期左右,具体需要看芯片数据手册。l 一般通过复位芯片或者复位电路,具体的阻容参数的计算,通过google查找。4. 单片机IO口状态n 1、普通IO口n 2、强推挽n 3、开漏(开集)n 4、单片机IO口的驱动能力n 5、 74HC245的应用5. 上下拉电阻n 上拉就是将不确定的信号通过一个电阻嵌位在高电平,下拉同理。n 1、电平转换,提高输出电平数值。n 2、OC门必须加上拉电阻才能使用。n 3、加大普通IO引脚驱动能力。n 4、悬空引脚上下拉抗干扰。 6. 上拉电阻选取原则n 1、从节约功耗及芯片灌电流能力考虑应当足够大;电阻大,电流小。n 2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。n 3、对于高速电路,过大的上拉电阻可能会导致边沿变平缓。n 综合考虑:上拉电阻常用值在1K到10K之间选取,下拉同理。7. 在线仿真n ISP:In-System Programming,是指在系统可编程,指电路板上的空白器件(单片机)可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。n Ice: In Circuit Emulator,是指在线仿真器,ICE是最为常用的调试设备,它的核心思想是完全模拟CPU工作,通过外围电路捕获CPU的各种状态信息,输送到PC端,通过PC来查看当前CPU的工作状态。 8. &和|n 对于不能进行直接位操作的SFR进行位操作的办法:n 某一位置1的办法:a = a| 10000000, 将要置1的位为1,其他为0。n a |= 0x01; 低位置1a= xxxxxxx1n 某一位清0的办法:a = a& xxxxxxx0, 将要清0的位为0,其他为1。n a &= 0xef; xxx0xxxx#include typedef unsigned char uint8;typedef unsigned int uint16;sbit LED = P00;sbit ENLED = P14;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;main()uint8 j = 8;uint16 i;ENLED = 0;ADDR3 = 1;ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; while(1)P0 = (1 -j); for(i=0; i20000; i+);if(0 = j) j = 8; 9. 作业n 充分理解并且学会使用晶振电路、复位电路。n 理解单片机的IO口的状态,并且具有以后阅读数据手册进行IO口设计的能力。n 理解并且牢记上下拉电阻的原理和选用方式。n 学会如何使用在线仿真进行调试程序,要学会定位问题并且解决问题。第六课 中断1. 中断的SFR位76543210符号EAECET2ESET1EX1ET0EX0n 中断使能控制寄存器IEn EA:总中断使能位,总阀门。n EC:PCA中断使能位n ET2:定时器2中断使能位n ES:串口中断n ET1:定时器1溢出中断使能n EX1:外部中断1使能n ET0:定时器0溢出中断使能n EX0:外部中断0使能位76543210符号保留PPCPT2PSPT1PX1PT0PX0位76543210符号保留PPCHPT2HPSHPT1HPX1HPT0HPX0H中断优先级寄存器IP IPHPPC:PCA中断优先级PT: 定时器中断优先级PS:串口中断优先级PX:外部中断优先级2. 中断优先级的说明n 当设置为默认中断优先级时: 当几个中断同时发生时,则先处理中断优先级高的中断程序,在处理任意中断期间发生中断,都不会响应。n 当人为配置了中断优先级, 同时发生中断,优先级高的先响应,在处理任意中断时,发生同级别或低级的中断,则不响应,发生优先级更高的中断时,则先处理高优先级中断,处理完毕,再回来处理当前中断。n 当设置为默认中断优先级时: 假设“水开”默认优先级高于“门铃”优先级,当先听到“水开”则先处理“水开”这件事,当先听到“门铃”则先处理“门铃”这件事。只有当两件事同时发生时,则会先去处理“水开”,再处理“门铃”。 n 当人为配置了中断优先级n 配置“水开”为高优先级,则当“水开”事件发生时,直接处理“水开”,在处理“水开”的过程中,使“门铃”响了,也不会去理会。当“门铃”响了,正在走向门口时,这个时候,“水开”事件又发生了,那么从门口转向,先去处理“水开”,处理好了后,再回头到门口,处理“门铃”事件。3. include typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32; code uint8 number = 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa7,0xa1,0x86,0x8e;uint8 a6; uint16 counter = 0;sbit ENLED = P14;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;void timer1_init()TMOD |= 0x10;TMOD &= 0xdf; TH1 = 0xFC;TL1 = 0x67;TR1 = 1;void int_init()ET1 = 1;EA = 1;void refresh_led() static uint8 j = 0;switch(j) case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j+;P0 = numbera0;break;case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j+;P0 = numbera1;break;case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j+;P0 = numbera2;break;case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j+;P0 = numbera3;break;case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j+;P0 = numbera4;break;case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = numbera5;break;default: break;main()ENLED = 0; ADDR3 = 1;timer1_init();int_init();while(1);void interrupt_timer1()interrupt 3 static uint32 sec = 0; TH1 = 0xFC; TL1 = 0x67; counter+; if(counter = 1000) sec+;counter = 0;a0 = sec%10;a1 = sec/10%10;a2 = sec/100%10;a3 = sec/1000%10;a4 = sec/10000%10;a5 = sec/100000%10; refresh_led(); 4. 作 业 n 1、充分理解中断的意义。n 2、使用照葫芦画瓢将这节课的全部程序重新编写并且下载到单片机里边,看是否能够将功能进行实现。n 3、将数码管的显示功能加以改进,使其只显示有效位。第七课 LED点阵1. 点阵LED原理2. #include typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32; code uint8 graph = 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF, 0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7, 0xFF,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ;sbit ENLED = P14;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;uint8 i= 0,counter = 0;void timer1_init()TMOD |= 0x10;TMOD &= 0xdf; TH1 = 0xFC;TL1 = 0x67;TR1 = 1;void int_init()ET1 = 1;EA = 1;void refresh_led() static uint8 j = 0;switch(j) case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;break;case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;break;case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;break;case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;break;case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;break;case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;break;case 6: ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;break;case 7: ADDR0 = 1;ADDR1 = 1;ADDR2 = 1;break;default: break;P0 = graphi + j;if(7 = j+) j = 0; main()ENLED = 0; ADDR3 = 0;timer1_init();int_init();while(1);void interrupt_timer1()interrupt 3 TH1 = 0xFC; TL1 = 0x67; counter+; if(counter = 200) counter = 0;i+;if(i=32)i=0; refresh_led(); 3.作业n 仿照水滴程序,做个类似的作业。n 弄明白点阵LED原理和硬件设计n 自己用点阵led画出漂亮的图片。n 进行单个汉字的静态显示和多个汉字的动态显示。/*作者:网友 孤竹翼羽 */#include typedef unsigned char uint8;sbit ENLED = P14;sbit ADDR3 = P13;sbit ADDR2 = P12;sbit ADDR1 = P11;sbit ADDR0 = P10;sbit DB0 = P00;void main() unsigned char i,k,p,t,j;char l;unsigned char a=0,1,2,4,6,16,32,64; /亮度数组以实现拖尾效果unsigned char b=0,34,48,59,68,76,84,91,97,103,109,114,119,123,126; /时间数组以实现加速效果signed char c=-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7;ENLED=0;ADDR3=1;ADDR0=0;ADDR1=1;ADDR2=1;P0=0xFF;while(1)/*/*水滴形成(渐变效果)*/*/k=0;for(i=0;i=252;i+)if(0=(i%4) k+;for(t=0;t=16;t+)DB0=0;for(j=0;j=64;j+)if(j=k) DB0=1;/*/*水滴掉下(加速与拖尾效果)*/*/for(j=0;j=254;j+)p=0;for(k=0;k=15;k+)if(j=bk) l=ck;for(i=0;i=64;i+)for(k=0;k=7;k+)if(i=ak) p=p|(1=0)P0=(t-l); 第八课 按 键1.#include #include key.hcode uint8 number=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0xFF;int8 n = 0;main()P0 =0xFF;KeyOut1 = 0;ENLED = 0; ADDR3 = 1;ADDR0 = 0; ADDR1 = 0; ADDR2 = 0;P0 = number0;while(1)if(!KeyIn1) delay();if(!KeyIn1)if(n=9) n = 0;else n+;P0 = numbern;while(!KeyIn1);if(!KeyIn2) delay();if(!KeyIn2)if(n = 0) n = 9;else n-;P0 = numbern;while(!KeyIn2);void delay()uint16 i = 1000;while(i-);#include #include key.hmain()P0 = 0xFF;/ led初始化ENLED = 0;ADDR3 = 1;ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;while (1)KeyOut1 = 0;KeyOut2 = 1;KeyOut3 = 1;KeyOut4 = 1;if(KeyIn1 = 0) delay();if(KeyIn1 = 0) P0 = 1;if(KeyIn2 = 0)delay();if(KeyIn2 = 0) P0 = 2;if(KeyIn3 = 0)delay();if(KeyIn3 = 0) P0 = 3;if(KeyIn4 = 0)delay();if(KeyIn4 = 0) P0 = 4;while(KeyIn1 = 0)|(KeyIn2 = 0)| (KeyIn3 = 0)|(KeyIn4 = 0);KeyOut1 = 1;KeyOut2 = 0;KeyOut3 = 1;KeyOut4 = 1;if(KeyIn1 = 0) delay();if(KeyIn1 = 0) P0 = 5;if(KeyIn2 = 0)delay();if(KeyIn2 = 0) P0 = 6;if(KeyIn3 = 0)delay();if(KeyIn3 = 0) P0 = 7;if(KeyIn4 = 0)delay();if(KeyIn4 = 0) P0 = 8;while(KeyIn1 = 0)|(KeyIn2 = 0)| (KeyIn3 = 0)|(KeyIn4 = 0);KeyOut1 = 1;KeyOut2 = 1;KeyOut3 = 0;KeyOut4 = 1;if(KeyIn1 = 0) delay();if(KeyIn1 = 0) P0 = 9;if(KeyIn2 = 0)delay();if(KeyIn2 = 0) P0 = 10;if(KeyIn3 = 0)delay();if(KeyIn3 = 0) P0 = 11;if(KeyIn4 = 0)delay();if(KeyIn4 = 0) P0 = 12;while(KeyIn1 = 0)|(KeyIn2 = 0)| (KeyIn3 = 0)|(KeyIn4 = 0);KeyOut1 = 1;KeyOut2 = 1;KeyOut3 = 1;KeyOut4 = 0;if(KeyIn1 = 0) delay();if(KeyIn1 = 0) P0 = 13;if(KeyIn2 = 0)delay();if(KeyIn2 = 0) P0 = 14;if(KeyIn3 = 0)delay();if(KeyIn3 = 0) P0 = 15;if(KeyIn4 = 0)delay();if(KeyIn4 = 0) P0 = 16; while(KeyIn1 = 0)|(KeyIn2 = 0)| (KeyIn3 = 0)|(KeyIn4 = 0);void delay(void)uint16 i=1000;while (i-);2. 头文件的建立.hn #ifndef _MAIN_H_n #define _MAIN_H_n .n .n #endif3. 按键抖动4. 硬件去抖5. 软件去抖n 检测出键闭合后执行一个延时程序,产生5ms10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。6. 作业n 理解按键扫描,和按键消抖原理n 发挥想象力,利用矩阵按键控制数码管的数字变化。n 用定时中断的方式去抖动n 在主函数中不占时间的方式去抖动 第九课 异步串口通信UART1.常用串行通信方式n 1、UART异步串口通信n 2、I2C总线串行同步通信n 3、SPI串行总线同步通信2. UART的四种模式n 模式0:使用较少,暂时不讲或自学。n 模式1:以TXD为例,平时没数据时TXD为高电平,来了数据,一位起始位0,八位数据位(一个字节),一位停止位1。n 模式2和3:原理和模式1一样,只是添加了一位奇偶校验位(防止通信出错)。3. 串口波特率n 常用串口波特率: 300、600、1200、2400、4800、9600、19200 115200;n 波特率:就是发送一位数据的速率,即发送一个数据的持续时间 = 1/baud;n SBUF:串口数据缓冲寄存器,发送数据时,只要将数据送入SBUF,则单片机自动发送数据,接收数据时,自动将数据接收至SBUF。4. SCON串口控制寄存器位76543210符号SM0SM1SM2RENTB8RB8TIRISM0和SM1为工作方式选择位SM0SM1方式说明波特率000移位寄存器fosc/120118位数据位定时器产生1029位数据位fosc/32或fosc/641139位数据位定时器产生n SM2:使能模式2和3中的多机通信功能。通常不使用。n REN:使能串口接收。由软件置1,则允许串口接收数据;由软件清零,则禁止串口接收数据。n TB8,RB8:方式2和方式3中的校验位,分为四种方式A.偶校验;B.奇校验;C.强制为0;D.强制为1 。n TI:发送中断标志,在发送停止位时由硬件置1。必须通过软件才能清零。n RI:接收中断标志,接收停止位的中间时刻由硬件置1,必须通过软件清零。5. 串口实验n 实现一个串口程序,向电脑发送一串数据。n 接收从电脑来的数据,加1后返回给电脑。n 通过串口中断的方式来实现,并且理解串口中断。6. 定时器1作为波特率发生器n 定时器1使用自动重装模式,即模式2。n TH1 = TL1 = 256 - 11059200/(12 * 32 * 9600) =0xfdn 实现步骤:n 1、将定时器1置为自动重装模式。n 2、将串口设置为方式1。n 3、根据公式计算出定时器1的初值。n 4、打开定时器1,打开串口允许接受。include typedef unsigned char uint8;typedef unsigned int uint16;uint8 Buf=hello world!n;/* * 延时*/void delay(uint16 n)while (n-);/* * UART初始化 * 波特率:9600*/void UART_init(void) SCON = 0x50; / 10位uart,允许串行接受 TMOD = 0x20; / 定时器1工作在方式2(自动重装) TH1 = 0xFD; TL1 = 0xFD; TR1 = 1;/* * UART 发送一字节*/void UART_send_byte(uint8 dat)SBUF = dat;while (TI = 0);TI = 0;/* * UART 发送字符串*/void UART_send_string(uint8 *buf)while (*buf != 0)UART_send_byte(*buf+);main()UART_init();while (1)UART_send_string(Buf);delay(20000);8. 作业n 1、学习视频完全掌握单片机和电脑通信n 2、将单片机的按键值通过串口上传到电脑n 3、用电脑串口调试助手下发数据,通过数码管上显示出来。 第十课 IIC通信EEPROM1. I2C的起始和停止SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。 2. I2C的数据传输n SCL为高电平期间,数据线上的数据必须保持稳定,只有SCL信号为低电平期间,SDA状态才允许变化。3. I2C的起始程序n void I2CStart(void)n n SDA = 1; n Delay(); / 延时子程序n SCL = 1;n Delay();n SDA = 0;n Delay();n SCL = 0;n 4,。I2C的结束程序n void I2CStop(void)n n SCL = 0;n Delay();n SDA = 0;n Delay();n SCL = 1;n Delay();n SDA = 1;n Delay();n 5. I2C的数据读写和应答n I2C与UART不同的地方首先在于先传高位,后传送低位。n 主机写数据时,每发送一个字节,接收机需要回复一个应答位“0”,通过应答位来判断从机是否接收成功。n 主机读数据时,接收一个字节结束后,主机也需要发送一应答位“0”,但是当接收最后一个字节结束后,则需发送一个非应答位“1”,发完了1后,再发一个停止信号,最终结束通信。6. I2C写数据流程 首先I2C起始信号,然后发送首字节,即器件(EEPROM)地址。并且在读写方向位上选择“写操作”方向。(0xa0) 第二个字节,发送数据的存储地址,就是要读取的数据所存储在EEPROM中的位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环保产业行业绿色技术创新与市场前景研究报告
- 2025年物联网技术应用场景与发展前景研究报告
- 2025年区块链行业技术应用前景展望研究报告
- 商场员工安全培训资料课件
- 2025年生物医药行业创新药物研发与市场前景分析报告
- 2025年运输行业无人驾驶技术发展前景研究报告
- 山西省2025山西长治医学院招聘博士研究生40人笔试历年参考题库附带答案详解
- 商场业主管理培训课件
- 夏县2025山西运城市夏县事业单位引进高素质青年人才25人笔试历年参考题库附带答案详解
- 国家事业单位招聘2025中国农业科学院作物科学研究所科研管理处招聘1人笔试历年参考题库附带答案详解
- 新入职教师法律法规培训
- 数字经济与就业
- 2024年-2025年司法考试真题及复习资料解析
- 幼儿园护学岗职责
- 国开电大《组织行为学》形考任务1-4
- 施工安全生产风险分级管控和隐患排查治理双重预防机制建设实施方案
- 精细化工技术-大学专业介绍
- 餐饮财务问题的研究报告
- 慢性疾病运动干预中心服务要求(征求意见稿)
- 林同炎与美洲银行大厦
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
评论
0/150
提交评论