第9章-串行总线接口技术课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第9章-串行总线接口技术课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串行 总线接口 技术 课件
- 资源描述:
-
1、12022-12-142022-12-1422022-12-143 2022-12-1442022-12-1452022-12-1462022-12-147 2022-12-1482022-12-1492022-12-14102022-12-14112022-12-1412sbit DO=P12sbit CLK=P11sbit CS=P10bdata Unsigned char addata;sbit adin0=addata 0;unsigned char TLC549 _ad(void)/*A/D转换程序*/unsigned char i;Clk=0;CS=0;/*令CS为低选中TLC54
2、9*/_nop_();2022-12-1413for(i=0;i8;i+)/*循环读取8位A/D转换结果*/CLK=1;/*令CLK引脚为高,产生时钟*/delay();/*延时*/adin0=DO;/*读取A/D转换后数据线的一位数据*/addata=addata 1;/*左移一位,先读取为高位,后读为低位*/CLK=0;/*令CLK恢复为0*/_nop_();_nop_();return addata;/*返回A/D转换值*/void delay()unsigned char i;for(i=0;i20;i+)2022-12-1414 2022-12-14152022-12-1416202
3、2-12-1417 2022-12-14182022-12-1419 2022-12-14202022-12-1421 2022-12-1422设要转换的数据放在R7R6中,R7为高8位,R6低8位 DIN BIT P1.2 ;引脚定义 CS BIT P1.1 SCLK BIT P1.0 TLC5615_DA:CLR C;将R7R6中数据左移2位(16位数据的最低2位添00)RLC R6 RLC R7 CLR C RLC R6 RLC R7 SETB CS ;初始化片选信号为高 CLR SCLK ;初始化时钟为低 CLR DIN;D/A数据线置低 CLR CS;选中TLC5615,开始启动D/
4、A MOV R5,#16 ;将16位数据从DIN端移进内部的16位移位寄存器2022-12-1423 LOOP:RLC R6;R7R6中数据左移一位,最高位进入CY RLC R7 MOV DIN,C;将数据送到DIN引脚 SETB SCLK ;送时钟 NOPNOPNOPCLR SCLK;NOPNOPNOP DJNZ R5,LOOPSETB CS ;D/A片选拉高,10 位有效数据锁存到DAC寄存器,开始转换 RET 2022-12-1424D/A转换C语言程序:sbit DA_clk=P10;/*引脚定义*/sbit DA_ cs=P11;sbit DA_in=P12;void delay_s
5、(unsigned char n)/*延时*/unsigned char i;for(i=0;in;i+);void TLC5615_DA_conver(unsigned int DA_data)/*D/A转换程序*/unsigned char i;DA_data=DA_data 2;/*将数据左移2位(最低2位添00)*/DA_cs=1;/*初始化片选信号为高*/DA_clk=0;/*初始化时钟为低*/DA_in=0;/*D/A数据线置低*/DA_cs=0;/*选中TLC5615,开始启动D/A*/for(i=0;i16;i+)/*将16位数据从DIN端移进内部的16位移位寄存器*/2022
6、-12-1425 DA_data=DA_data 1;/*左移一位,最高位进入CY*/DA_in=CY;/*将数据送到DIN引脚*/DA_clk=1;delay_s(0 x02);/*送时钟*/DA_clk=0;delay_s(0 x02);DA_cs=1;/*片选拉高,10 位数据锁存到DAC寄存器,开始转换*/delay_s(0 x20);2022-12-1426 2022-12-14272022-12-1428 2022-12-14292022-12-14302022-12-14312022-12-1432 2022-12-14332022-12-1434(2022-12-1435。20
7、22-12-1436SCL BIT P1.1;汇编语言定义端口;汇编语言定义端口SDA BIT P1.0sbit SDA=P10;/C语言定义端口语言定义端口sbit SCL=P11;bit ack;/应答标志位,有应答为应答标志位,有应答为1,无应答为,无应答为0#define DELAY5US _nop_();_nop_();_nop_();_nop_();_nop_();2022-12-1437汇编语言程序:START:SETB SDA;发送起始条件数据信号SETBSCL;发送起始条件的时钟信号NOPNOPNOPNOPCLR SDA;发送起始信号(SCL为高,SDA发生由高到低)NOPN
8、OPNOPNOPNOPCLRSCLRET 2022-12-1438C语言程序:void start()SDA=1;/*将SDA、SCL置为1*/SCL=1;DELAY5US;/*延时5us*/SDA=0;/*SCL为高时,SDA由高变低*/DELAY5US;SCL=0;/*SCL变低,准备发送或接收数据*/2022-12-1439 汇编语言程序:STOP:CLR SDA ;发送停止条件的数据信号SETB SCL;发送停止条件的时钟信号NOPNOPNOPNOPNOP SETB SDA;发送I2C总线停止信号(SCL为高,SDA发生由低到高)NOP NOP NOP NOPCLR SCLCLR SD
9、ARET2022-12-1440C语言程序:void stop()SDA=0;/*将SDA清0,SCL置1*/SCL=1;DELAY5US;SDA=1;/*当SCL为高电平时,SDA由低变高*/DELAY5US;SCL=0;2022-12-1441汇编语言程序:MACK:CLR SDA ;发送应答信号MACKSETB SCLNOPNOPNOPNOPNOPCLR SCLSETB SDARET2022-12-1442C语言程序:void ack(void)/*产生应答信号*/SDA=0;/*SDA先清0,发应答信号*/SCL=1;/*SCL由低变高,产生一个时钟*/DELAY5US;/*延时5us
10、*/SCL=0;/*SCL变低,以便继续接收*/SDA=1;2022-12-1443汇编语言程序:NACK:SETB SDA ;发送应答信号NACKSETB SCLNOPNOPNOP NOPNOPCLR SCLCLR SDARET2022-12-1444C语言程序:void nack(void)SDA=1;/*DA先置1,发非应答信号*/SCL=1;/*SCL由低变高,产生一个时钟*/DELAY5US;SCL=0;/*时钟线SCL恢复到低电平*/SDA=0;2022-12-1445汇编语言程序(F0=1通信失败):CACK:SETB SDA ;发送应答信号CACKSETB SCLCLR F0M
11、OV C,SDAJNC CENDSETB F0 CEND:CLR SCLRET2022-12-1446C语言程序:void cack(void)SDA=1;/*SDA先置1,发非应答信号*/SCL=1;/*SCL由低变高,产生一个时钟*DELAY5US;ack=0;if(SDA=1)ack=1;SCL=0;/*时钟线SCL恢复到低电平*/2022-12-1447 汇编语言程序:;从A中取一个字节数据写向I2C总线WRITE_BYTE:MOV R7,#8;写8位WRITE_LOOP:RLC A ;发送A中数据 MOV SDA,C SETB SCL NOP NOP NOP NOP NOP CLR
12、SCL DJNZ R7,WRITE_LOOP RET2022-12-1448C语言程序:/*将指针P指向的一个字节数据发送*/void SendByte(uchar*p)uchar n,temp;temp=*p;for(n=0;n8;n+)/*一字节为8位,循环8次*/if(temp&0 x80)SDA=1;/*将数据线SDA置1或清0*/else SDA=0;NOP SCL=1;/*置SCL为高,通知从机开始接收数据*/DELAY5US;SCL=0;/*SCL变低,准备发送下一位数据*/temp=temp 1;/*准备下一位要发送的数据*/2022-12-1449;从I2C总线接收一个字节
13、数据放在A中RDBYTE:MOV R7,#8;写8位RD_LOOP:SETB SDA SETB SCL NOP;延时5s NOP NOP NOP NOP NOP MOV C,SDA ;采样SDA线上的数据到cy MOV A,R2 ;R2为接收数据的缓冲寄存器RLC A ;将cy中的数据左移进A中MOV R2,A ;数据送回缓冲寄存器R2CLR SCLDJNZ R7,RD_LOOPRET2022-12-1450C语言程序:/*接收一个字节数据放在P指向单元*/uchar RcvByte(uchar*P)uchar n,temp;for(n=0;n8;n+)/*一字节为8位,循环8次*/SDA=1
14、;/*置数据线SDA为高,进入接收方式*/SCL=1;/*SCL由低变高,产生一个时钟*/DELAY5US;temp=temp1;if(SDA=1)temp=temp0X01 ELSE temp=temp&0 xfe;SCL=0;/*时钟线SCL清0*/*p=temp;2022-12-14512022-12-1452WNBYTE:MOV A,R3;LCALL START LCALL WRITE_BYTE LCALL CACK JB F0,WRBYTE MOV A,R2LCALL WRITE_BYTE LCALL CACKJB F0,WRBYTEWRDA:MOV A,R0LCALL WRITE_
15、BYTE LCALL CACKJB F0,WRBYTEINC R0DJNZ R7,WRDALCALL STOPRET 2022-12-14532022-12-14542022-12-1455汇编语言程序:;多字节读操作子程序RNBYTE;入口参数:R7写入的字节数,R0写入数据的首地址,R2从器件地址内部地址,R3从器件写地址,R4从器件读地址RNBYTE:LCALL STARTMOV A,R3 ;取从器件写地址LCALL WRITE_BYTE;写从器件地址LCALL CACK;检测应答信号JB F0,RNBYTE;无应答重新开始MOV A,R2 ;取从器件地址内部地址LCALL WRITE_
16、BYTELCALL CACKJB F0,RNBYTELCALL START2022-12-1456MOV A,R4 ;取从器件读地址LCALL WRITE_BYTELCALL CACKJB F0,RNBYTERDN:LCALL RDBYTE ;接收一个字节数据MOV R0,ADJNZ R7,ACKLCALL MNACK ;接收完发非应答信号LCALL STOPACK:LCALL MACK ;没接收完发应答信号INC R0SJMP RDN2022-12-1457C语言程序:/*多字节读操作子程序RNBYTE/*入口参数:n写入的字节数,s0读数据存放的首地址,s2从器件地址内部地址,s3从器件写
17、地址,s4从器件读地址*/viod Rcvnbyte(uchar*s3,uchar*s4,uchar*s2,uchar*s0,uchar n)loop:start();/*发起始信号,启动总线*/SendByte(s3);/*发送从器件地址*/Cack();/*应答检测*/if(ack)/*如果没能应答,重新开始*/goto loop SendByte(s2);/*发送器件子地址*/Cack();/*应答检测*/if(ack)/*如果没能应答,重新开始*/goto loop2022-12-1458 start();/*再次发起始信号*/SendByte(s4);/*sla+1表示进行读操作*/
18、cack();/*应答检测*/if(ack)/*如果没能应答,重新开始*/goto loop for(i=0;in-1;i+)/*对前n-1个字节发应答信号*/RcvByte(s0);/*接收数据*/ack();/*发送应答信号*/s+;RcvByte(s0);/*接收最后一个字节*/nack();/*发送非应答信号*/stop();/*发结束信号,结束本次数据传送*/2022-12-1459 2022-12-14602022-12-1461 2022-12-14622022-12-1463 2022-12-14642022-12-14652022-12-14662022-12-1467)20
19、22-12-1468引脚序号引脚名称功能描述1SC/KR2数码管c段/键盘行信号22SD/KR3数码管d段/键盘行信号33DIG3/KC3数码管位选信号3/键盘列信号34DIG2/KC2数码管位选信号2/键盘列信号25DIG1/KC1数码管位选信号1/键盘列信号16DIG0/KC0数码管位选信号0/键盘列信号07SE/KR4数码管e段/键盘行信号48SF/KR5数码管f段/键盘行信号59SG/KR6数码管g段/键盘行信号610DP/KR7数码管dp段/键盘行信号711GND接地12DIG6/KC6数码管位选信号6/键盘列信号62022-12-1469引脚序号引脚名称功能描述13DIG7/KC7
展开阅读全文