主机程序
#include "iom16v.h"
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
/*-----------------------------------------
函数名称: void delay(uchar Data)
函数功能: 延时函数
参 数:
返 回 值: 无
-----------------------------------------*/
void delay(uchar Data)
{
uchar i;
while(Data--)
for(i=125;i>0;i--);
}
/*-----------------------------------------
函数名称: void SPI_MasterInit()
函数功能: 主机初始化函数
参 数:
返 回 值: 无
-----------------------------------------*/
void SPI_MasterInit()
{
DDRB|=BIT(5);
DDRB|=BIT(7);
SPCR|=BIT(SPE);
SPCR|=BIT(MSTR);
}
/*-----------------------------------------
函数名称: void SPI_MasterTransmit(uchar Data)
函数功能: 主机发送数据
参 数:
返 回 值: 无
-----------------------------------------*/
void SPI_MasterTransmit(uchar Data)
{
SPDR=Data;
while(!(SPSR&BIT(SPIF)));
}
void main()
{
uchar i,d;
SPI_MasterInit();
while(1)
{
d=0xfe;
for(i=0;i<8;i++)
{
SPI_MasterTransmit(d);
d=d<<1;
delay(100);
}
}
}
从机程序
#include "iom16v.h"
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
void delay(uchar Data)
{
uchar i;
while(Data--)
for(i=125;i>0;i--);
}
void SPI_SlaveInit()
{
DDRB&=~BIT(5);
DDRB&=~BIT(7);
SPCR|=BIT(SPE);
}
uchar SPI_SlaveTransmit()
{
while(!(SPSR&BIT(SPIF)));
return SPDR;
}
void main()
{
DDRC=0XFF;
PORTC=0XFF;
SPI_SlaveInit();
while(1)
{
PORTC=SPI_SlaveTransmit();
delay(50);
}
}
关键字:avr单片机 SPI
引用地址:
AVR单片机SPI简单应用
推荐阅读最新更新时间:2024-03-16 15:19
MSP430 SD卡SPI读写操作(4) —— FatFs文件系统实现
本节介绍MSP430F5438A FatFs文件系统的移植。 FatFs是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。FatFs模块与IO是分开的,因此移植时需要实现下面几个底层函数: DSTATUS disk_initialize (BYTE drv); //初始化存储器 DSTATUS disk_status (BYTE drv); //获取存储器状态 DRESULT disk_read (BYTE drv, BYTE* buff, DWORD sector, UINT count); //读存储器 DRESULT disk_write (BYTE drv, const BYTE* buff,
[单片机]
一文了解SPI总线工作原理、优缺点和应用案例
将微控制器连接到传感器,显示器或其他模块时,您是否考虑过两个设备之间如何通信?他们到底在说什么?他们如何能够相互理解? 电子设备之间的通信就像人类之间的通信,双方都需要说同一种语言。在电子学中,这些语言称为通信协议。幸运的是,在构建大多数DIY电子项目时,我们只需要了解一些通信协议。在本系列文章中,我们将讨论三种最常见协议的基础知识:串行外设接口(SPI),内部集成电路(I2C)和通用异步接收器/发送器(UART)驱动通信。 首先,我们将从一些关于电子通信的基本概念开始,然后详细解释SPI的工作原理。 SPI,I2C和UART比USB,以太网,蓝牙和WiFi等协议慢得多,但它们更简单,使用的硬件和系统资源也更少。 SPI,I2C和
[嵌入式]
AVR单片机I/O端口应用
1、端口寄存器及配置 作为通用数字I/O使用时,每个引脚都具有3个寄存器位:DDRxn、PORTxn、PINxn 2、配置实例 (1)PA配置为输出 DDRA = 0XFF; PORTA = 0X03; //PA输出值为0x03 (2)PA口配置为不带上拉的输入 DDRA = 0X00; PORTA = 0X00; i = PINA; //将PA口输入的值赋给变量i (3)PB口配置为带上拉的输入 DDRB = 0X00; PORTB =
[单片机]
基于ATMEGA8A_AVR单片机温度测控系统proteus仿真
仿真电路图: #include mega48.h #include delay.h // DS18b20 Temperature Sensor functions #include ds18b20.h // Alphanumeric LCD Module functions #include alcd.h #define ADC_VREF_TYPE 0x60 #define Temp_Set_Key_Not_Pressed PIND.6 #define Alarm_Set_Key_Not_Pressed PIND.7 // Read the 8 most significant bits // of th
[单片机]
AVR单片机高压解锁器的制作设计
概述: 利用常用的AVR单片机ATmega16制作的高压解锁器,可以解开所有芯片锁死的情况(除非芯片损坏、烧毁)。制作作品经实验验证,解开了山东大学物理学院AVR单片机实验室所有近40片锁死的单片机以及许多同学锁死的单片机。制作方法简单,保证你一小时之内做完。 所需元件极少(如电路图所示):仅一只三极管、一片7805,三支电阻、一只LED、三个小电容,一片可用的单片机,一个12V电源。 程序与电路连接可方便的移植到其它型号单片机上(凡支持高压编程的,都可以)。 希望能对初学单片机的同学有所帮助,特别是我们学校暑假参加电子设计比赛的同学。 制作背景(常见芯片锁死情况与高压解锁介绍): AVR单片机是我们学校同学经常使用的
[单片机]
STM32 SPI Flash DFU
这次讲的是将程序、图片或其他文件下载到SPI Flash中。我使用的是W25X16的SPI Flash,他共有2MB空间,2个Block,512ge Sector,8096个Page。由于SPI Flash不能直接跑程序,我们从接口就知道了。 接下去我们就来讲讲怎么编写SPI flash的升级功能。这次的工程是基于之前的Internal Flash修改而来的。修改的部分主要在USB_User组里: STM32 SPI Flash DFU - ziye334 - ziye334的博客我只将改改的部分。 hw_config.c、usb_istr.c、usb_prop.c、usb_pwr.c这介个文件没有什么还修改的。usb_desc.
[单片机]
电子工程师传经授道:AVR单片机经典使用经验
使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。 AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力的不断学习、实践提高。 AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。 功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。 “外行看
[模拟电子]
8051/2单片机常用的本地通讯方式 UART,RS485,I2C,SPI 之 UART串口通讯 1
一 ,说明 1. 串口UART, 波特率:9600 接设备的时候,一般只接GND RX TX,不会接Vcc,避免与目标设备上的供电冲突。 1.1 RS485标准( +2V ~ +6V:1 / -6V ~ -2V:0) 1.2 RS232标准( -15V ~ -3V:1 / +3V ~ +15V:0),需要MAX232进行电平反转后,才能与MCU进行通讯 1.3 TTL标准( 2.4V--5V:1 / 0V--0.5V:0 ) 二、演示 三、代码: /** * 8051/2 DEMO 3 * 常用的本地通讯方式 * 1. 串口UART, 波特率:9600 * 接设备的时候,一般只接GND RX TX,
[单片机]