单片机IO口模拟SPI四种模式的程序
2013年09月21日 10:00:02 zyboy2000 阅读数:23924
#include "iom8535v.h" #define _CPOL 1 #define _CPHA 0 #define SCK_IO DDRA|=0X01 #define MOSI_IO DDRA|=0X02 #define MISO_IO DDRA&=0XFB #define SSEL_IO DDRA|=0X08 #define SCK_D(X) (X?(PORTA|=0X01):(PORTA&=0XFE)) #define MOSI_D(X) (X?(PORTA|=0X02):(PORTA&=0XFD)) #define SSEL_D(X) (X?(PORTA|=0X08):(PORTA&=0XF7))#define MISO_I() (PINA&0X04) void delay() {unsigned char m,n;for(n=0;n<5;n++);for(m=0;m<100;m++); } /************************************************端口方向配置 与输出初始化 ************************************************/ void SPI_Init(void) { SCK_IO ; MOSI_IO ; MISO_IO ; SSEL_IO ; SSEL_D(1); MOSI_D(1); #if _CPOL==0 SCK_D(0); #else SCK_D(1); #endif }/********************************************** 模式零 写数据 ***********************************************/ #if _CPOL==0&&_CPHA==0 //MODE 0 0 void SPI_Send_Dat(unsigned char dat) {unsigned char n;for(n=0;n<8;n++){SCK_D(0);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(1);}SCK_D(0); } /********************************************* 模式零 读数据 *********************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;for(n=0;n<8;n++){SCK_D(0);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(1);}SCK_D(0);return dat; } #endif /********************************************** 模式二 写数据 ***********************************************/ #if _CPOL==1&&_CPHA==0 //MODE 1 0 void SPI_Send_Dat(unsigned char dat) {unsigned char n;for(n=0;n<8;n++){SCK_D(1);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(0);}SCK_D(1); } /********************************************* 模式二 读数据 *********************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;for(n=0;n<8;n++){SCK_D(1);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(0);}SCK_D(1);return dat; }#endif /********************************************* 模式一 写数据 *********************************************/ #if _CPOL==0&&_CPHA==1 //MODE 0 1 void SPI_Send_Dat(unsigned char dat) {unsigned char n;SCK_D(0);for(n=0;n<8;n++){SCK_D(1);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(0);} } /********************************************* 模式一 读数据 *********************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;for(n=0;n<8;n++){SCK_D(1);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(0);}SCK_D(0);return dat; } #endif /// ///#if _CPOL==1&&_CPHA==1 //MODE 1 1 void SPI_Send_Dat(unsigned char dat) {unsigned char n;SCK_D(1);for(n=0;n<8;n++){SCK_D(0);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(1);} } /************************************ 模式三 读数据 ************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;SCK_D(0);for(n=0;n<8;n++){ SCK_D(0);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(1);}SCK_D(1);return dat; } #endif /************************************* *************************************/ void main() {SPI_Init(); DDRB = 0XFF; //#if _CPOL //SCK_D(0); //#endif while(1) { //SSEL_D(0); //SPI_Send_Dat(0x01); //SPI_Send_Dat(0x31); //SSEL_D(1); SSEL_D(0); SPI_Send_Dat(0x81); PORTB =SPI_Receiver_Dat(); SSEL_D(1); //delay(); } }
单片机IO口模拟SPI四种模式的程序相关推荐
- STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码
STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 因为芯片的spi口只有3个,有部分需要外接W25Q128 ...
- 单片机IO口模拟串口程序(发送+接收
单片机IO口模拟串口程序(发送+接收)[转] qcmc 发表于 - 2011-6-23 0:42:00 前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口.经过若干曲折并参考了一些 ...
- 国产单片机IO口模拟IrDA1.0协议
单片机IO口模拟IrDA1.0协议 IrDA1.0协议是一种利用红外通信的无线传输协议,可以很好的解决一些便携式设备与主机之间通信的问题,具有携带方便,低功耗,成本低,传输可靠等特点,缺点是传输距离较 ...
- io口模拟spi,stm32f103与MS5611基于spi总线的温度压力高度数据读取
以下文件为源文件 /** -----------------------MS5611驱动 && IO口模拟SPI驱动------------------------- ******** ...
- STC15单片机读写大容量SD卡(IO口模拟SPI模式)
使用的芯片是STC15系列的IAP15F2K61S2,开发板是51的xl2000.把芯片座上的51芯片拔掉换成STC的,混合模式.(配置够低吧) 源码由51开发板例程的实验26修改而来. 浏览了网上的 ...
- 串口发送程序linux,单片机IO口模拟串口程序(发送+接收
前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口.经过若干曲折并参考了一些现有的资料,基本上完成了.现在将完整的测试程序,以及其中一些需要总结的部分贴出来. 程序硬件平台:11. ...
- 20120726-分析解决“STM8L101单片机IO口模拟串口通讯发生的奇怪现象”
近日因工作关系,需要用STM8L101F3P6这款单片机用IO口模拟串行通讯,波特率2400bps,前辈同事已经写完了程序,我需要拿来研究一下该款MCU的低功耗的情况,而在调试的过程中,发现1个奇怪的 ...
- 芯圣SQ013单片机IO口模拟串口 延时法
因为懒,许久未来更新,不过学习还是没有停止.今天我们介绍用芯圣SQ013模拟串口. 串口通讯概述 我们常用的串口通讯协议 为1个起始位+8个数据位+1位结束位.起始位为低电平,结束位高电平.一般我们常 ...
- linux io模拟时序,spi四种模式io模拟时序
#include "iom8535v.h" #define _CPOL 1 #define _CPHA 0 #define SCK_IO DDRA|=0X01 #define MO ...
最新文章
- 显示DataGrid序号的一个适用的方法
- zeroc ice php,ZeroC ICE+PHP整合
- ITK:在没有写访问权的情况下迭代图像中的区域
- typora插入代码设置_Typora基本功能介绍
- 卷积在计算机中实现+pool作用+数据预处理目的+特征归一化+理解BN+感受野理解与计算+梯度回传+NMS/soft NMS
- Mysql优化_ORDER BY和GROUP BY 的优化讲解(单路排序和双路排序)
- Unity 分析器(仅专业版) Profiler (Pro only)
- K-L变换原理、图像压缩与人脸识别实战(附matlab代码)
- Linux下超简单的Mysql自动备份+定期删除之前备份文件脚本
- Microsoft Access 2002中文版标准培训教程pdf
- 织梦系统MySQL安装_如何更改已安装的织梦dedecms系统数据库表前缀?
- 拒绝LOW ---青鸟影院购票系统
- 基于QT和C++实现的停车场管理系统
- SDOI 2018 R2 游记
- android获取wifi支持的信道,Android获取当前连接wifi的信道
- mysql存储特殊表情符号,解决mysql存储特殊文字(表情符号)utf8mb4
- 关于Render在不同情况的用法
- numpy中takes函数
- 【新技术】:移动支付过程中的NFC技术
- 使用Angular和API服务器显示相关表中的数据
热门文章
- solr教程 solr5.5
- javaweb学习总结(四)——Http协议
- maven+eclipse编译常见问题
- 全面分析 Spring 的编程式事务管理及声明式事务管理(转)
- 面向接口编程详解(三)——模式研究
- 【UWB】Kalman filter, KF卡尔曼滤波, EKF 扩展卡尔曼滤波
- Python 类函数迭代器
- 4.1 什么是人脸识别-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- 3.7 测试时的 BatchNorm-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- 3.4 归一化网络的激活函数-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授