1、51 单片机总线模拟方法集锦关于 SPI 模拟时序的问题 我想用 51 单片机的 IO 口模拟 SPI 串行通信 请各位大侠指点一下代码 思路 等等 小弟完全没有思路 谢谢/*/函数名:SpisendByte(INT8U dat)/输入:发送的数据/输出:无/功能描述:SPI 发送一个字节/*INT8U SpiTxRxByte(INT8U dat)INT8U i,temp;temp = 0;SCK = 0;for(i=0; i1 说 明 进 度 超 前 , 符 合 要 求 ; SPI#include /sfr P4 = 0xe8;/STC12LE5A60S2 单片机自带 SPI 控制器连接/s
2、bit VCC1 = P20;/ VCC1 NO USE/sbit SON = P16 ;/ MISO/sbit SIN = P15 ;/ MOSI/sbit SCKN = P17 ; / SCKsbit CSN = P14 ;/ 28J60 - CS/sbit RSTN = P35 ; /RST, no use/sbit INTN = P33 ; / INT, no usevoid init_spi(void);void WriteByte(u8_t temp);u8_t ReadByte(void);#endif/spi.c/#include/STC12LE5A60S2 单片机自带 SPI
3、 控制器连接void init_spi(void)/SSIG = 1; /忽略 SS 脚/SPEN = 1; /允许 SPI 工作/DORD = 0; /先传高位 MSB/MSTR = 1; /设置单片机为主机SPCTL = 0xD0; /SPI Control Register SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0000,0100SPSTAT = 0xC0; /IE2 |= 0x02; /允许 SPI 中断控制位void WriteByte(u8_t temp)SPDAT = temp;while(!(SPSTAT SPSTAT = 0xC0;u
4、8_t ReadByte(void)idata u8_t temp;/SPSTAT = 0xC0;SPDAT = 0x00;while(!(SPSTAT temp = SPDAT;SPSTAT = 0xC0;return temp;bascom SPI 接口控制 74HC595 LED 显示2009-12-13 10:47SPI 接口的全称是“Serial Peripheral Interface“,意为串行外围接口。SPI 接口主要应用在EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。 SPI 接口是在 CPU 和外围低速器件之间进行同步串行数据传输
5、,在主器件的移位脉冲下,数据按位传输,为全双工通信,数据传输速度总体来说比 I2C 总线要快,速度可达到几 Mbps。SPI 接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:(1)MOSI 主器件数据输出,从器件数据输入 (2)MISO 主器件数据输入,从器件数据输出 (3)SCLK 时钟信号,由主器件产生 (4)/SS 从器件使能信号,由主器件控制在 BASCOM 中,提供了软件实现的 SPI 接口的语句,同样 BASCOM 也有支持硬件 SPI 的语句。下面将使用三个例子来说明如何在 BASCOM 中使用 SPI 接口。在介绍例子之前,我们先了解
6、一下硬件连接图,连接如图 1 所示。图中共使用三片 74HC595 芯片,分别控制三个数码管,三片 74HC595 通过Q7引脚进行级联。第一片 74HC595 的 DS 引脚连接到了 ATmega88 的 MOSI 引脚,而 SH_CP 引脚连接到了 ATmega88 的 SCK 引脚,ST_CP 引脚连接到了 ATmega88的 PB1 引脚。一、使用硬件 SPI 接口控制 74HC595 -使用芯片: ATmega88,晶振: 内部 8MHz 晶振email: 软件版本: Bascom-AVR 1.11.8.3 Full version-$regfile = “m88def.dat“ 芯
7、片为ATmega88 $crystal = 8000000 8M 晶振频率 $hwstack = 32 设置堆栈大小 $swstack = 10$framesize = 40Dim I As ByteDim A(3) As ByteLatch Alias Portb.1Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes ,Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0定义使用单片机自带的硬件SPI,SPI 中断未使能,数据发送时,高位先发送。设为
8、SPI 主设备,时钟 4 分频 Spiinit SPI 初始化Restore Segtab 获取要显示数据的内容 For I = 1 To 3Read A(i)Next ISpiout A(1) , 3 输出要显示的内容给74HC595,分别输出 A(1),A(2),A(3)Latch = 1? 使能显示 Waitus 10Latch = 0DoLoopEnd*-专用字形表-Segtab:Data /*函数:void I2C_On()功能:启动 I2C 总线收发数据返回:0正常,1异常(无应答)说明:参数 Mode 是操作模式,决定 I2C 总线收发格式。常见的收发格式有 3 种,具体如下:0
9、接收模式,格式:S | SLA+R | Data. | P1发送模式,格式:S | SLA+W | Addr | Data. | P2带 Sr 接收,格式:S | SLA+W | Addr | Sr | SLA+R | Data. | P*/bit I2C_On(unsigned char Mode, /操作模式unsigned char SLA, /从机地址unsigned char Addr, /子地址unsigned char *Buf, /数据缓冲区unsigned char Size /数据长度);#endif /I2C_H/*I2C.C标准 80C51 模拟 I2C 总线程序(主模式,通用)*/i nclude