串行总线技术_第1页
串行总线技术_第2页
串行总线技术_第3页
串行总线技术_第4页
串行总线技术_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021-12-151单片机原理与应用系统设计单片机原理与应用系统设计 电子工业出版社电子工业出版社 , 2009.72021-12-1522021-12-1532021-12-1542021-12-1552021-12-156起始位停止位P空闲位D0D1D2D3D4D5D6D72021-12-157起始标志起始标志地址场地址场控制场控制场信息场信息场帧校验场帧校验场结束标志结束标志01111110ACIFC01111110模式模式开始标志开始标志地址地址功能代码功能代码数据数量数据数量校验码校验码结束标志结束标志ASCII:2字符字符2字符字符n字符字符2字符字符LRCCR,LARTU无无1

2、字节字节1字节字节n字节字节2字节字节CRC无无2021-12-1582021-12-1592021-12-15102021-12-15112021-12-15122021-12-15132021-12-15142021-12-15152021-12-15162021-12-1517从设备2从设备1从设备NSCKMOSIMISO主设备(MCU)SS2SS1SSNMISO MOSI SCKMISO MOSI SCKMISO MOSI SCKI/O1I/O2I/ON SPI 8位移位寄存器位移位寄存器 SPI 8位移位寄存器位移位寄存器 MSB 主设备主设备 LSB MSB 从设备从设备 LSB

3、SPI时钟发生器时钟发生器MOSI MISOMOSI MISOMISO MOSIMISO MOSICLK CLK CLKCLKSPISPI总线原理总线原理 主设备和从设备的两个移位寄存器可以看作是一个主设备和从设备的两个移位寄存器可以看作是一个16bits16bits的循环移位寄存器,当数据从主设备移位传送到的循环移位寄存器,当数据从主设备移位传送到从设备的同时,数据也以相反的方向移入。这意味着在从设备的同时,数据也以相反的方向移入。这意味着在一个移位周期中,主设备和从设备的数据相互交换。一个移位周期中,主设备和从设备的数据相互交换。2021-12-15192021-12-1520从机2从机1

4、从机NSKSISO主机(MCU)CS2CS1CSNSISOSKI/O1I/O2I/ONSISOSKSISOSK2021-12-1521状态寄存器状态寄存器SPSTATSPSTAT、数据寄存器、数据寄存器SPDATSPDAT通过软件向相应位写入通过软件向相应位写入“1 1”可将可将 SPIF SPIF 和和 WCOL WCOL 标志清零。标志清零。D7D6D5D4D3D2D1D0SPCTLSSIGSPENDORGMSTRCPOLCPHASPR1SPR0SPSTATSPIFWCOLSPDATD7D6D5D4D3D2D1D00E1H0E1H 0E3H0E3H 0E3H0E3H 2021-12-152

5、2SCLKCONVSTAD7810MISO(P2.3)SCK(P2.5)GNDDOUTP2.6VIN-VIN+GNDVDDVREF+P89LPC933VDDVIN-12345678CONVST高速模式DB9DB0CONVST低速模式SCLKDOUTAD7810AD7810工作模式与时序工作模式与时序2021-12-1523#include /* LPC900 单片机的单片机的SFR 与标准与标准80C51 兼容兼容 */#include /* C51内部函数描述内部函数描述 */#define uint unsigned intsfr SPTCL = 0 xe2; /* 定义控制寄存器定义控制

6、寄存器 */sfr SPSTAT = 0 xe1; /* 定义状态寄存器定义状态寄存器 */sfr SPDAT = 0 xe3; /* 定义数据寄存器定义数据寄存器 */sbit CONVST = P26; /*定义转换控制引脚定义转换控制引脚 */自动低功耗模式自动低功耗模式A/D转换转换C51/ /* * 启动启动AD7810AD7810转换一次,返回值为转换结果转换一次,返回值为转换结果 * */ /uint ad7810()uint ad7810() uint x;uint x;SPCTL= 0 xd1;SPCTL= 0 xd1;/ /* * 设置为主机,确定时钟模式及速率设置为主机,

7、确定时钟模式及速率 * */ /SPSTAT=0 xc2 ; SPSTAT=0 xc2 ; / /* * 向标志位写向标志位写1 1,清除标志,清除标志 * */ /CONVST=1; CONVST=1; / /* * 唤醒器件并启动唤醒器件并启动A/DA/D转换转换 * */ /CONVST=0;CONVST=0;_nop_();_nop_();_nop_(); _nop_(); / /* * 等待等待A/DA/D转换结束转换结束 * */ /SPDAT= 0 xff; SPDAT= 0 xff; / /* * 发送任意数据,启动发送任意数据,启动SPI SPI 接收高接收高8 8位数据位数

8、据 * */ /while (SPSTAT=127) ;/while (SPSTAT=127) ;/* * SPI SPI接收未结束,等待接收未结束,等待 * */ /SPSTAT=0 xc2 ; SPSTAT=0 xc2 ; / /* * 向标志位写向标志位写1 1,清除标志,清除标志 * */ /x= SPDATx= SPDAT* *4; 4; / /* * 读取高读取高8 8位数据位数据 * */ /SPDAT= 0 xff; SPDAT= 0 xff; / /* * 发送任意数据,启动发送任意数据,启动SPI SPI 接收低接收低8 8位数据位数据 * */ /while (SPSTA

9、T=127); /while (SPSTAT=127); /* * SPI SPI接收未结束,等待接收未结束,等待 * */ /SPSTAT=0 xc2 ; SPSTAT=0 xc2 ; / /* * 向标志位写向标志位写1 1,清除标志,清除标志 * */ /x = x+SPDAT/64; x = x+SPDAT/64; / /* * 读取低读取低2 2位数据,与高位数据,与高8 8位数据合并位数据合并* */ /return(x);return(x); 2021-12-1524E E2 2PROMPROM,可通过,可通过ORGORG管脚配置成管脚配置成1281281616或或2562568

10、 8两种结构,两种结构,ORGORG端接端接VCCVCC或悬空时,输出为或悬空时,输出为16bits16bits;接;接GNDGND时,输出为时,输出为8bits8bits。P1.0P1.2AT89S51DISKCSP1.1DOP1.3VCCGNDAT93C46VCCORGDCGND812345672021-12-1525指令指令起始起始位位操作操作码码地址位地址位数据位数据位指令功能指令功能8 168 16READ110A6A 5A0从指定的单元读数从指定的单元读数EWEN10011xxxxx 11xxxx允许擦允许擦/写操作指令写操作指令ERASE111A6A 5A0擦除指定单元擦除指定单

11、元WRIET101A6A 5A0D7D0 D15D0写入指定存储单元写入指定存储单元ERAL10010 xxxxx 10 xxxx擦除存储器所有单元擦除存储器所有单元WRAL10001xxxxx 01xxxxD7D0 D15D0写入存储器所有单元写入存储器所有单元EWDS10000 xxxxx 00 xxxx禁止擦禁止擦/写操作指令写操作指令2021-12-15262021-12-15272021-12-15282021-12-15291SCLSDA起始信号23456789应答非应答2021-12-1530数据寄存器数据寄存器S1DATS1DAT:发送发送/ /接收一个数据字节的寄存器,接收一

12、个数据字节的寄存器,P89C66xP89C66x通过通过该寄存器向总线移位发送数据或从总线接收数据该寄存器向总线移位发送数据或从总线接收数据。0DAH 0D8H 0DBH D7D6D5D4D3D2D1D0S1ADRGCS1DATD7D6D5D4D3D2D1D0S1CONCR2ENS1STASTOSIAACR1CR0S1SATSD4SD3SD2SD1SD00000D9H 2021-12-1531状态寄存器状态寄存器S1SATS1SAT:S1STAS1STA是一个只读寄存器,高是一个只读寄存器,高5 5位有效,存放了位有效,存放了2626个个I2CI2C总线的状态码,其中在主发送方式下,可产生总线

13、的状态码,其中在主发送方式下,可产生7 7个总线状态码;在个总线状态码;在主接收方式下,可产生主接收方式下,可产生5 5个总线状态码;在从接收方式下,可产生个总线状态码;在从接收方式下,可产生9 9个总个总线状态码;在从发送方式下,可产生线状态码;在从发送方式下,可产生5 5个总线状态码。个总线状态码。SIO1SIO1的中断入口地的中断入口地址为址为002BH002BH,中断服务程序根据这些状态码进行相应的处理。,中断服务程序根据这些状态码进行相应的处理。0DAH 0D8H 0DBH D7D6D5D4D3D2D1D0S1ADRGCS1DATD7D6D5D4D3D2D1D0S1CONCR2ENS

14、1STASTOSIAACR1CR0S1SATSD4SD3SD2SD1SD00000D9H 2021-12-1532#include #include / / * * P89C668 P89C668的硬件的硬件I2CI2C定义与定义与8XC5528XC552的一样的一样 * */ /#define uchar unsigned char#define uchar unsigned char/ /* * 申请占用总线,进行申请占用总线,进行I I2 2C C时钟速率、使能、发送起始信号等初始化时钟速率、使能、发送起始信号等初始化* */ /void GetBus()void GetBus() S1

15、CON=0 xc5;S1CON=0 xc5; / /* * 设置时钟为设置时钟为100k100k, MCUMCU主频为主频为12M12M, ENS1ENS1和和AAAA置位置位 * */ /STA=1;STA=1; / /* * 申请成为主机,起动总线申请成为主机,起动总线 * */ /while(SI=0); /while(SI=0); /* * 等待起始位的发送等待起始位的发送 * */ / / /* * 发送数据函数,用于向总线发送数据发送数据函数,用于向总线发送数据 * */ /void SendByte(uchar c)void SendByte(uchar c) S1DAT=c;S

16、1DAT=c;S1CON=0 xc5;S1CON=0 xc5; / /* * 清除清除SISI位等位等 * */ /while(SI=0); /while(SI=0); /* * 等待数据发送完成等待数据发送完成 * */ / P89C66xP89C66x单片机单片机I I2 2C C通信主方式通信主方式C51C51语言程序语言程序2021-12-1533/ /* * 向无子地址器件发送字节数据函数,从器件地址向无子地址器件发送字节数据函数,从器件地址slasla(最低位为(最低位为0 0),),待发送的数据为待发送的数据为c c;如果返回;如果返回1 1,表示操作成功,否则操作有误,表示操作

17、成功,否则操作有误 * */ /bit ISendByte(uchar sla,uchar c)bit ISendByte(uchar sla,uchar c) GetBus();GetBus();/ /* * 启动总线启动总线 * */ /SendByte(sla);SendByte(sla);/ /* * 发送器件地址发送器件地址, ,若无应答则返回若无应答则返回 * */ /if (S1STA!=0 x18) if (S1STA!=0 x18) S1CON=0 xd5; return(0);S1CON=0 xd5; return(0);SendByte(c);SendByte(c);/

18、/* * 发送数据发送数据 * */ /if (S1STA!=0 x28) if (S1STA!=0 x28) S1CON=0 xd5; return(0);S1CON=0 xd5; return(0);S1CON=0 xd5;S1CON=0 xd5;/ /* * 结束总线结束总线 * */ /return(1);return(1); 2021-12-1534/ /* * 向无子地址器件读字节数据函数,从器件地址向无子地址器件读字节数据函数,从器件地址slasla(最低位为(最低位为0 0),返),返回字节值在回字节值在c c;如果返回;如果返回1 1,表示操作成功,否则操作有误,表示操作成功

19、,否则操作有误 * */ /bit IRcvByte(uchar sla,ucharbit IRcvByte(uchar sla,uchar* *c)c) GetBus();GetBus();/ / * * 启动总线启动总线 * */ /SendByte(sla+1);SendByte(sla+1);/ /* * 发送器件地址发送器件地址 * */ /if (S1STA!=0 x40) if (S1STA!=0 x40) S1CON=0 xd5; return(0);S1CON=0 xd5; return(0);S1CON=0 xc1; S1CON=0 xc1; / /* * 接收一字节数据即

20、发送非应答位接收一字节数据即发送非应答位 * */ /while(SI=0);while(SI=0);/ /* * 等待接收数据等待接收数据 * */ /if (S1STA!=0 x58) if (S1STA!=0 x58) S1CON=0 xd5; return(0);S1CON=0 xd5; return(0);* *c=S1DAT;c=S1DAT;/ /* * 读取数据读取数据 * */ /S1CON=0 xd5;S1CON=0 xd5;/ /* * 结束总线结束总线 * */ /return(1);return(1); 2021-12-1535。2021-12-1536D7D6D5D4

21、D3D2D1D0地址字节地址字节01011AD1AD00控制字节控制字节R2R1R0RSTPDA02021-12-1537SCL SCL BIT BITP1.0P1.0; ; 定义定义I I2 2C C串行时钟线串行时钟线SDA SDA BIT BIT P1.1P1.1; ; 定义定义I I2 2C C串行数据线串行数据线START: SETB START: SETB SDASDA; ; 产生开始条件子程序产生开始条件子程序 SETB SETB SCLSCL; ; 释放总线释放总线 NOP NOP; ; 延时降低总线速率延时降低总线速率 CLR CLR SDASDA; ; 产生开始条件产生开始

22、条件 NOP NOP CLR CLR SCLSCL; ; 数据修改准备数据修改准备 RET RET软件模拟软件模拟I I2 2C C接口程序设计接口程序设计 STOP: CLR STOP: CLR SDASDA; ; 产生结束条件子程序产生结束条件子程序 NOP NOP SETB SETB SCLSCL; ; 准备产生结束条件准备产生结束条件 NOP NOP SETB SETB SDASDA; ; 产生结束条件产生结束条件 NOP NOP RET RET2021-12-1538; ; 接收接收MAX517MAX517应答信号子程序,返回时应答结果在应答信号子程序,返回时应答结果在CyCy中中A

23、CK: ACK: CLR CLR SCLSCL; ; 保证时钟为低保证时钟为低 SETB SETB SDASDA SETB SETB SCLSCL; ; 释放总线释放总线 NOP NOP MOV MOV C, SDAC, SDA; ; 接收接收MAX517MAX517应答信号应答信号 CLR CLR SCLSCL RET RET; ; 发送字节子程序,待发送数据在发送字节子程序,待发送数据在ACCACC中,返回应答在中,返回应答在CyCy中中OUTBYTE: OUTBYTE: MOV MOV R0, #8R0, #8; ; 输出一个字节输出一个字节LOOP0: LOOP0: CLR CLR S

24、CLSCL; ; 保证时钟为低保证时钟为低RLC RLC A A; ; 一位数据送入一位数据送入CyCy中中MOV MOV SDA, CSDA, C; ; 准备发送一位数据准备发送一位数据NOPNOPSETBSETBSCLSCL; ; 发送一位数据发送一位数据NOPNOPCLR CLR SCLSCL; ; 一位数据发送完成一位数据发送完成DJNZ DJNZ R0, LOOP0R0, LOOP0LCALLLCALLACKACK; ; 接收应答信号接收应答信号RETRET2021-12-1539; MAX517; MAX517输出转换子程序,输出数据在输出转换子程序,输出数据在ACCACC中,返回

25、中,返回Cy=0Cy=0时发送正确时发送正确OUT517: OUT517: PUSH ACCPUSH ACC; ; 保存输出数据保存输出数据 LCALL STARTLCALL START; ; 输出开始条件输出开始条件 MOVMOVA, #01011010BA, #01011010B ; MAX517; MAX517地址字节内容地址字节内容LCALLLCALLOUTBYTEOUTBYTE; ; 输出地址字节输出地址字节JC JC OUTENDOUTEND; ; 无应答,提前结束无应答,提前结束MOV MOV A, #00HA, #00H; ; 控制字节控制字节LCALLLCALLOUTBYTE

26、OUTBYTE; ; 输出控制字节输出控制字节JC JC OUTENDOUTEND; ; 无应答,提前结束无应答,提前结束POPPOPACCACC; ; 恢复输出数据恢复输出数据LCALLLCALLOUTBYTEOUTBYTE; ; 输出输出DACDAC数据数据PUSHPUSHACCACCOUTEND: OUTEND: POPPOPACCACCLCALLLCALLSTOPSTOP; ; 输出结束条件输出结束条件RETRET2021-12-1540 2021-12-15412021-12-15422021-12-1543微控制器1CAN总线CAN控制器1CAN收发器1TxRx微控制器2CAN控制

27、器2CAN收发器2TxRx2021-12-15442021-12-1545 2021-12-15462021-12-1547USBUSB系统的基本系统的基本软件包括软件包括USBUSB设备驱设备驱动程序、动程序、USBUSB驱动程驱动程序和序和USBUSB控制器驱动控制器驱动程序。程序。客户软件USB系统软件USB主控制器集线器功能单元USB逻辑设备USB总线接口主机系统USB设备2021-12-15482021-12-15492021-12-15502021-12-1551USBDATAUSBDATAEQU EQU P0P0USBRDUSBRDEQU EQU P1.0P1.0USBWR US

28、BWR EQU EQU P1.1P1.1USBTXE USBTXE EQU EQU P1.2P1.2USBRXF USBRXF EQU EQU P1.3P1.3USBREN USBREN EQU EQU P1.4P1.4; ; 从从FIFOFIFO接收缓冲区读一个字节送入累加器接收缓冲区读一个字节送入累加器A ARDBYTE:RDBYTE:JBJBUSBRXF, RDBYTEUSBRXF, RDBYTE; ; 等待接收数据,低电平有效等待接收数据,低电平有效CLR CLR USBRD USBRD ; ; 发出读信号发出读信号 MOVMOVA, USBDATAA, USBDATA; ; 读字节读

29、字节SETB SETB USBRD USBRD RETRET; ; 将累加器将累加器A A中内容写入中内容写入FIFOFIFO发送缓冲区发送缓冲区WRBYTE:WRBYTE:JBJBUSBTXE, WRBYTEUSBTXE, WRBYTE; ; 等待发送数据,低电平有效等待发送数据,低电平有效MOVMOVUSBDATA, AUSBDATA, A; ; 输出字节内容输出字节内容CLR CLR USBWR USBWR ; ; 发出写信号发出写信号 SETB SETB USBWR USBWR RETRET2021-12-1552 2021-12-15532021-12-1554主机复位脉冲Tx从机接

30、收模式Rx从机等待从机应答脉冲主机拉低从机拉低电阻拉高至少480S60240S1560S至少480S2021-12-1555主机写“0”时隙从机采样60120S1S主机写“1”时隙15S45S从机采样15S45S1S主机读“0”时隙主机采样1S主机读“1”时隙15S45S15S1S主机采样2021-12-15562021-12-1557地址地址ROMRAME2PROM028H温度低温度低8位位1温度高温度高8位位248位位THTH3器件序列号器件序列号TLTL4配置寄存器配置寄存器配置寄存器配置寄存器5保留保留6保留保留7CRC保留保留8CRCD7D6D5D4D3D2D1D0字节字节02322

31、21202-12-22-32-4字节字节1SSSSS262524字节字节4TMR1R0111112021-12-15582021-12-1559INIT: CLRINIT: CLRDQDQ; ; 初始化程序初始化程序MOVMOVR2, #240R2, #240; ; 拉低总线至少拉低总线至少480480s sLCALLLCALL DELAYDELAYSETBSETBDQDQMOVMOVR2, #30R2, #30; ; 释放总线释放总线6060s sLCALLLCALL DELAYDELAYMOVMOVC, DQC, DQ; ; 读取应答信息至读取应答信息至CyCyRETRETWRBIT: W

32、RBIT: CLRCLRDQDQ; ; 写一位子程序写一位子程序MOVMOVR2, #2R2, #2; ; 拉低总线不超过拉低总线不超过15s15sLCALLLCALLDELAYDELAYMOVMOVDQ, CDQ, C; ; 写写CyCy至至DQDQMOVMOVR2, #30R2, #30; ; 保持保持60s60sLCALLLCALLDELAYDELAYSETBSETBDQDQ; ; 释放总线释放总线RETRET DQ DQ定义为单片机的定义为单片机的I/OI/O口线,单片机的晶体振荡频率为口线,单片机的晶体振荡频率为12MHz12MHz,机器周期为机器周期为1s1s。2021-12-15

33、60DBIT: DBIT: CLRCLRDQDQ; ; 读一位子程序读一位子程序NOPNOP; ; 拉低总线拉低总线2s2sSETBSETBDQDQMOVMOVR2, #3R2, #3LCALLLCALLDELAYDELAY; ; 延时延时MOVMOVC, DQC, DQ; 15s; 15s之内采样之内采样RETRETDELAY: DELAY: DZNZDZNZR2, $R2, $; ; 延时子程序延时子程序RETRETRDBYTE: MOVRDBYTE: MOVR3, #8R3, #8 ; ; 读字节子程序读字节子程序RDLP1: RDLP1: LCALLLCALLRDBITRDBIT; ;

34、 读一位数据读一位数据RRCRRCA A; ; 移位到移位到A A中中DJNZDJNZR3, RDLP1R3, RDLP1RETRETWRBYTE: MOVWRBYTE: MOVR3, #8R3, #8 ; ; 写字节子程序写字节子程序WRLP1: WRLP1: RRCRRCA A; A; A中位数据移位到中位数据移位到CyCyLCALLLCALLWRBITWRBIT; ; 写一位数据写一位数据DJNZDJNZR3, WRLP1R3, WRLP1RETRET2021-12-1561; ; 温度转换及读取子程序温度转换及读取子程序 DQDQBITBITP1.0P1.0; I/O; I/O管脚定义

35、管脚定义SNCODESNCODEEQUEQU30H30H; ; 存放该存放该DS18B20DS18B20序列号的首地址序列号的首地址TM18B20: TM18B20: LCALLLCALLINITINIT; ; 初始化总线初始化总线JCJCTM18B20TM18B20; ; 等待应答信号等待应答信号MOVMOVA, #55HA, #55H; ; 匹配相应匹配相应ROMROMLCALLLCALLWRBITEWRBITE; ; 发送匹配发送匹配ROMROM命令命令MOVMOVR4, #8R4, #8MOVMOVR0, #SNCODER0, #SNCODELOOP: LOOP: MOVMOVA, R0A, R0LCALLLCALLWRBITEWRBITE; ; 发送发送8 8字节字节ROMROM序列号序列号INCINCR0R0DJNZDJN

温馨提示

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

评论

0/150

提交评论