资源简介
用51单片机IO口模拟SPI接口和EEPROM 25LC1024芯片通信。进行读写操作,供大家学习之用。
代码片段和文件信息
#include
#include//包含_nop_()函数
//定义命令
#define READ 0x03
#define WRITE 0x02
#define WREN 0x06
#define WRDI 0x04
#define RDSR 0x05
#define WRSR 0x01
#define PE 0x42
#define SE 0xd8
#define CE 0xc7
#define RDID 0xab
#define DPD 0xb9
//端口定义
sbit SCK = P1^4;
sbit MOSI = P1^5;
sbit MISO = P1^6;
sbit CS = P1^7;
//延时程序
void delay_ms(int n)
{
int i j;
for(i=0;i for(j=0;j<1000;++j);
}
//延时程序
void delay_ns(void) //延时>4us
{
_nop_();//空指令
_nop_();
_nop_();
_nop_();
}
//SPI写一个byte
void SPI_byte_write(const char *dat)
{
char tmp = *dat i;
for(i=0;i<8;++i){
SCK = 0;
MOSI = (bit)(tmp >> 7); //先输出高bit
tmp <<= 1; //数据左移一位
SCK = 1; //SCK为高发送bit
delay_ns(); //延时防止芯片为响应
}
}
//SPI读一个byte
void SPI_byte_read(char *dat)
{
char tmp = 0 i;
for(i=0;i<8;++i){
SCK = 0;
tmp <<= 1; //左移一位
tmp |= MISO; //接收最高位
SCK = 1;//SCK为高接收bit
delay_ns();
}
*dat = tmp;
}
//SPI写多个byte
void SPI_nbyte_write(const char *addr const char *dat char num)
{
char inst_wren = WREN inst_write = WRITE i;
CS = 0;
SPI_byte_write(&inst_wren); //写使能
CS = 1;
delay_ms(1);
CS = 0;
SPI_byte_write(&inst_write); //写指令
for(i=0;i<3;++i){
SPI_byte_write(addr + i);//写地址
}
for(i=0;i SPI_byte_write(dat + i);//写数据
}
CS = 1;
}
//SPI读多个byte
void SPI_nbyte_read(const char *addr char *dat char num)
{
char inst = READ i;
CS = 0;
SPI_byte_write(&inst); //读指令
for(i=0;i<3;++i){
SPI_byte_write(addr + i);//写地址
}
for(i=0;i SPI_byte_read(dat + i);//写数据
}
CS = 1;
}
char dat[] = {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f
0x770x7c0x390x5e0x790x71};//0~F的字形码
char save[16] = {0};
const char addr[3] = {0x00 0x00 0x00};//读写的地址
int main(void)
{
int i;
SPI_nbyte_write(addr dat 16);//写入数据
delay_ms(30);
SPI_nbyte_read(addr save 16);//读出数据
for(i=0;i<16;i++)
{
P3=save[i];//数码管显示
delay_ms(60);
}
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-10-13 22:21 SPI\
文件 871 2013-10-13 14:55 SPI\IIC.plg
文件 222744 2013-10-13 20:55 SPI\Last Loaded SPI.DBK
文件 7397 2013-10-13 21:16 SPI\SPI
文件 222744 2013-10-13 21:17 SPI\SPI.DSN
文件 5420 2013-10-13 21:16 SPI\SPI.LST
文件 10649 2013-10-13 21:16 SPI\SPI.M51
文件 7797 2013-10-13 21:16 SPI\SPI.OBJ
文件 911 2013-10-13 21:17 SPI\SPI.PWI
文件 2188 2013-10-13 23:08 SPI\SPI.c
文件 1884 2013-10-13 21:16 SPI\SPI.hex
文件 54 2013-10-13 21:16 SPI\SPI.lnp
文件 1308 2013-10-13 21:17 SPI\SPI.plg
文件 55656 2013-10-13 21:17 SPI\SPI.uvopt
文件 13395 2013-10-13 14:59 SPI\SPI.uvproj
文件 55658 2013-10-13 20:47 SPI\SPI_uvopt.bak
文件 0 2013-10-13 14:57 SPI\SPI_uvproj.bak
文件 6376 2009-05-07 14:37 SPI\STARTUP.A51
文件 14062 2013-10-13 21:16 SPI\STARTUP.LST
文件 758 2013-10-13 21:16 SPI\STARTUP.OBJ
相关资源
- STM8S 0.96寸OLED4线SPI驱动程序
- 科大讯飞XFS5152语音合成SPI驱动的C51源
- dsPIC33E 内部Flash读写及其它外设驱动
- dsPIC33EBootloader下位机
- 基于51单片机的温度测量系统_赵娜
- dspic30f4011直流电机控制程序
- 51单片机车轮测速的proteus仿真
- 基于51单片机的数字频率计程序仿真图
- 基于51单片机的温度控制系统
- SPI及PDECI公式包
- 基于51单片机定时器的设计
- 51单片机的AD7705代码
- 基于51单片机的智能风扇控制程序
- 利用pwm实现51单片机的呼吸灯功能
- 用51单片机解析GPS数据并在12864液晶显
- 51单片机读写W25X16
- 基于51单片机的ADC0832数字电压表仿真
- 基于51单片机的ADC0808 数字电压表
- 基于51单片机Max7219驱动8×8点阵PROTEU
- 基于51单片机的人体心率采集
- hal库硬件spi&模拟spi通信rn8209
- STM32的FLASH模拟EEPROM程序,亲测可用
- Hspice工艺库文件
- 51单片机Protues仿真舵机,可以通过按
- 51单片机的bootloader实现方法
- 51单片机KEIL C I2C通信程序。
- 建PSPICE仿真模型库[中文教程]
- HAL库版本,硬件SPI驱动74HC595
- stm32f10x相关库文件 (包含: stm32f10x
- SPICE语法基础详细学习资料
评论
共有 条评论