《MSP430I2C通信》PPT课件.ppt

上传人:w****2 文档编号:16088238 上传时间:2020-09-18 格式:PPT 页数:45 大小:1.41MB
收藏 版权申诉 举报 下载
《MSP430I2C通信》PPT课件.ppt_第1页
第1页 / 共45页
《MSP430I2C通信》PPT课件.ppt_第2页
第2页 / 共45页
《MSP430I2C通信》PPT课件.ppt_第3页
第3页 / 共45页
资源描述:

《《MSP430I2C通信》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《MSP430I2C通信》PPT课件.ppt(45页珍藏版)》请在装配图网上搜索。

1、I2C通信,内容提要,I2C协议 I2C通信 I2C应用 数码管和矩阵键盘,MSP430G2553引脚图,I2C线与,两条总线: 串行时钟线SCL和串行数据线SDA,两条总线都被上拉电阻拉到VCC,线与输出。,I2C协议的基本规范,完整帧包括起始位、地址位、读写位、应答位、数据位 、数据位、应答位.数据位、应答位、停止位。 从起始位开始每帧数据都是9位,其中第一帧是7位从机地址+1位读写标识+1位数据接收应答位;后续的每帧都是8位数据+1位数据接收方应答。 R/W=0,主机发数据,ACK由从机负责拉低;反之如此。,I2C协议的起止位,8,1.在时钟线高电平时,数据线下降沿代表了起始位START

2、 2.在时钟线高电平时,数据线上升沿代表了停止位STOP 3.在时钟线高电平期间,数据线上的数据保持稳定 4.数据线上的数据只有当时钟线低电平期间才能转换。,I2C的地址规范,7位地址模式,10位地址模式,I2C的多主机仲裁,小地址通信优先,仲裁过程中,多主机时钟实现“线与”功能。,/| /| MSP430F6638 100k 100k MSP430F6638 slave | | master - | | - |XIN P8.5/UCB0SDA| |P8.5/UCB0SDA XIN|- | | | | | |XOUT | | | XOUT|- | P8.6/UCB0SCL|P8.6/UCB0S

3、CL | | | | |,主机在不停地发数据给从机,时钟为1MHz,例1:,#include unsigned char TXData; unsigned char TXByteCtr; void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDT P8SEL |= BIT5+BIT6; / Assign P8.5 to UCB0SDA and UCB0SCL P8DIR |= BIT6; / P8.6 to UCB0SCL UCB0CTL1 = UCSSEL_2 + UCSWRST; / Use SMCLK, keep SW reset UCB0C

4、TL0 = UCMST + UCMODE_3 + UCSYNC; / I2C Master, synchronous mode UCB0BR0 = 10; UCB0BR1 = 0; UCB0I2CSA = 0 x48; / Slave Address is 048h UCB0CTL1 / Increment data byte ,主机,#pragma vector = USCI_B0_VECTOR _interrupt void USCI_B0_ISR(void) switch(_even_in_range(UCB0IV,12) case 0: break; / Vector 0: No in

5、terrupts case 2: break; / Vector 2: ALIFG case 4: break; / Vector 4: NACKIFG case 6: break; / Vector 6: STTIFG case 8: break; / Vector 8: STPIFG case 10: break; / Vector 10: RXIFG case 12: / Vector 12: TXIFG if (TXByteCtr) / Check TX byte counter UCB0TXBUF = TXData; / Load TX buffer TXByteCtr-; / De

6、crement TX byte counter else UCB0CTL1 |= UCTXSTP; / I2C stop condition UCB0IFG ,#include volatile unsigned char RXData; void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDT P8SEL |= BIT5+BIT6; / Assign P8.5/6 to UCB0SDA and UCB0SCL UCB0CTL1 |= UCSWRST; / Enable SW reset UCB0CTL0 = UCMODE_3 + UCSYNC;

7、 / I2C Slave, synchronous mode UCB0I2COA = 0 x32; / Own Address is 032h UCB0CTL1 / Enter LPM0, enable interrupts ,从机,#pragma vector = USCI_B0_VECTOR _interrupt void USCI_B0_ISR(void) switch(_even_in_range(UCB0IV,12) case 0: break; / Vector 0: No interrupts case 2: break; / Vector 2: ALIFG case 4: br

8、eak; / Vector 4: NACKIFG case 6: break; / Vector 6: STTIFG case 8: break; / Vector 8: STPIFG case 10: / Vector 10: RXIFG RXData = UCB0RXBUF; / Get RX data _bic_SR_register_on_exit(LPM0_bits); / Exit LPM0 break; case 12: break; / Vector 12: TXIFG default: break; ,/| /| MSP430G2xx3 100k 100k MSP430G2x

9、x3 slave | | master - | | - -|XIN P1.7/UCB0SDA |P1.7/UCB0SDA XIN|- | | | | -|XOUT | | XOUT|- | P1.6/UCB0SCL |P1.6/UCB0SCL | | | | |,主机在不停地发数据给从机,时钟为1MHz,例2:,#include 主机 unsigned char TXData; unsigned char TXByteCtr; int main(void) WDTCTL = WDTPW + WDTHOLD; P1SEL |= BIT6 + BIT7; P1SEL2|= BIT6 + BIT7;

10、 UCB0CTL1 |= UCSWRST; UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; UCB0CTL1 = UCSSEL_2 ; UCB0BR0 = 10; UCB0BR1 = 0; UCB0I2CSA = 0 x48; UCB0CTL1 ,while (1) TXByteCtr = 1; while (UCB0CTL1 ,#pragma vector = USCIAB0TX_VECTOR _interrupt void USCIAB0TX_ISR(void) if (TXByteCtr) / Check TX byte counter UCB0TXBUF =

11、 TXData; / Load TX buffer TXByteCtr-; / Decrement TX byte counter else UCB0CTL1 |= UCTXSTP; / I2C stop condition IFG2 / Exit LPM0 ,#include 从机 volatile unsigned char RXData; int main(void) WDTCTL = WDTPW + WDTHOLD; P1SEL |= BIT6 + BIT7; P1SEL2|= BIT6 + BIT7; UCB0CTL1 |= UCSWRST; UCB0CTL0 = UCMODE_3

12、+ UCSYNC; UCB0I2COA = 0 x32; UCB0CTL1 ,#pragma vector = USCIAB0TX_VECTOR _interrupt void USCIAB0TX_ISR(void) RXData = UCB0RXBUF; _bic_SR_register_on_exit(CPUOFF); ,例3:,TM1638的各个管脚功能说明:,矩阵键盘的读取,LED数码管显示,数 码 管,显示的数字形式,七段半导体数码显示器(LED),数码管结构,a,b,c,d,e,f,g,h,h g f e d c b a,高电平,共阴极,h g f e d c b a,h g f

13、e d c b a,R8,com,D7 D6 D5 D4 D3 D2 D1 D0,段码,字形码,段码:为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段,因此为LED显示器提供的编码正好是一个字节。这些代码通过各段的亮与灭来显示不同字型的,因此称之为段码。,共阴极,D7 D6 D5 D4 D3 D2 D1 D0,h g f e d c b a,h g f e d c b a,h g f e d c b a,段码与字形的关系,0 x3f , 0 x06 , 0 x5b , 0 x4f , 0 x66 , 0 x6d , 0 1 2 3 4 5 0 x7d , 0 x

14、07 , 0 x7f , 0 x6f , 0 x77 , 0 x7c , 6 7 8 9 A B 0 x39 , 0 x5e , 0 x79 , 0 x71 , 0 x00 C D E F 无显示,+5V,h g f e d c b a,共阳极,com,R8,a b c d e f g h 某段为低电平时 该段点亮发光,D7 D6 D5 D4 D3 D2 D1 D0,段码,共阳极,段码与字形的关系,0 xc0 , 0 xf9 , 0 xa4 , 0 xb0 , 0 x99 , 0 x92 , 0 1 2 3 4 5 0 x82 , 0 xf8 , 0 x80 , 0 x90 , 0 x88 ,

15、 0 x83 , 6 7 8 9 A B 0 xc6 , 0 xa1 , 0 x86 , 0 x8e , 0 xff C D E F 无显示,动态显示,动态显示的特点:是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。当需要显示数字或字符时,将数码管轮流点亮,即动态扫描显示。 所谓动态扫描显示:即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。,图 八位LED动态显示器电路,#include TM1638.h const uint8_t tab2 = 0 x3F,0 x06,0 x5B,0 x4F,0 x66,

16、0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5E,0 x79,0 x71; void TM1638_Write(unsigned char DATA) /写数据函数 unsigned char i; P3DIR |= BIT5; for(i=0;i=1; ,unsigned char TM1638_Read(void) /读数据函数 unsigned char i; unsigned char temp=0; P3DIR ,void Write_COM(unsigned char cmd) /发送命令字 P3OUT |= BIT4; P

17、3OUT |= BIT2; P3OUT ,unsigned char Read_key(void) unsigned char c4; unsigned int key_value=0 x00; unsigned int i; P3OUT |= BIT2; P3OUT ,else if(c0 ,else if(c1 ,void Write_DATA(unsigned char add,unsigned char DATA) /指定地址写入数据 Write_COM(0 x44); P3OUT ,void Write_allLED(unsigned char DATA) unsigned char

18、 i; Write_COM(0 x8F);/显示控制 Write_COM(0 x40); /数据命令 P3OUT ,#ifndef _TM1638_H #define _TM1638_H #include msp430f6638.h #include #define CPU_F (double)20000000) #define _delay_us(x) _delay_cycles(long)(CPU_F*(double)x/1000000.0) #define _delay_ms(x) _delay_cycles(long)(CPU_F*(double)x/1000.0) #define D

19、IO_high(P3OUT |= BIT5) #define DIO_low(P3OUT #endif,参考程序代码,#include TM1638.h #include msp430f6638.h uint8_t num8; /各个数码管显示的值 uint8_t led_flag8; const uint8_t tab = 0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5E,0 x79,0 x71;,void init_port(void) P3DIR |= BIT5; P3DIR |= BIT4 + BIT2; P1DIR |= BIT0; / ACLK set out to pins P1SEL |= BIT0; ,void main(void) unsigned int i = 0; unsigned char count; WDTCTL = WDTPW+WDTHOLD; init_port(); init_TM1638();,while(1) i=Read_key(); if(i0;count-) numcount = numcount-1; ,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!