//ICC-AVR application builder : 2007-7-18 13:01:11
// Target : M16
// Crystal: 7.3728Mhz
// 作者:古欣
// AVR与虚拟仪器 [url]http://www.avrvi.com[/url]
// 功能:SPI主机模式,循环发送从1~255
#include <iom168v.h>
#include <macros.h>
#include <LED_Interphone.h>
#include <TransToSlave.h>
uchar uSenddata[]={0x53,81,85,82,0x45};
int iNum_send;
uchar uRec_back_flag=0;
/*******************************************
函数名称:master_port_init(void)
功 能:端口初始化函数
参 数: 无
返回值 : 无
/********************************************/
void master_port_init(void)
{
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0xFF;
//PORTD = 0x00;
DDRD = 0xFF;
}
//SPI initialize
// clock rate: 57599hz
/*******************************************
函数名称:void master_spi_init(void)
功 能:SPI 设置初始化
参 数: 无
返回值 : 无
/********************************************/
void master_spi_init(void)
{
//PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
//DDRB |= (1<<DDB5) | (1<<DDB7) | (1<<DDB4); //Set MOSI, SCK AND SS as outputs
PORTB |= (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5);
DDRB |= (1<<DDB3) | (1<<DDB5) | (1<<DDB2); //Set MOSI, SCK AND SS as outputs
SPCR = 0x73; //setup SPI
SPSR = 0x00; //setup SPI
}
/*******************************************
函数名称:master_init_devices(void)
功 能:初始化设备
参 数: 无
返回值 : 无
/********************************************/
void master_init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
master_port_init();
master_spi_init();
MCUCR = 0x00;
//GICR = 0x00;
//TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
/*******************************************
函数名称:void SPI_MasterTransmit(char cData)
功 能:SPI 主机发送 函数
参 数: 无
返回值 : 无
/********************************************/
void SPI_MasterTransmit(char cData)
{
//PORTB &=~ (1<<PB4); //强制接收方进入从模式
PORTB &=~ (1<<PB2); //强制接收方进入从模式
SPCR |= (1<<MSTR); // MSTR有时会被清零,这里强制进入主机模式
/* 启动数据传输 */
SPDR = cData;
/* 等待传输结束 */
while(!(SPSR & (1<<SPIF)))
;
//PORTB |= (1<<PB4);
PORTB |= (1<<PB2); ///讲SS拉高时,表示数据传输停止
}
/*******************************************
函数名称:void SPI_MasterTransmit(char cData)
功 能:SPI 主机 写数据 函数
参 数: 无
返回值 : 无
/********************************************/
void SPI_HostWriteByte(unsigned char Data)
{
// 启动数据传输
SPDR = Data;
// 等待传输结束
while(!(SPSR & (1<<SPIF)))
;
}
#pragma interrupt_handler spi_stc_isr:iv_SPI_STC
void spi_stc_isr(void)
{uchar Rec_tempdata;
//byte in SPDR has been sent/received
//SPCR &=~(1<SPIE);
Rec_tempdata = SPDR;
if(Rec_tempdata=0xaa)
{uRec_back_flag=1;
PORTD=Rec_tempdata;
Delayms(20);
PORTD=0x00;
} //标志位 --表示接受到了确认信息
//master_init_devices();
}
uchar SPI_MasterReadByte(void)
{
SPDR = 0;
// 等待传输结束
while(!(SPSR & (1<<SPIF)))
;
return SPDR;
}
void Send_reg_data(uchar reg[],int num)
{int i;
for(i=0;i<num;i++)
{
SPI_MasterTransmit(uSenddata[i]);
//SPI_HostWriteByte(uSenddata[i]);
Delayms(10);
}
}
void main(void)
{
uchar i=0;
uchar recdata=0;
master_init_devices();
//InitDevicesToSlave();
while(1)
{
Send_reg_data(uSenddata,5); //发送数据包
Delayus(100);
InitDevicesToSlave();
Delayms(100);
if(uRec_back_flag==1)
{PORTC|=0x03;
Delayms(50);
PORTC&=0x00;
uRec_back_flag=0;
}
master_init_devices();
//InitDevicesToSlave();
//uchar uRec_back_flag=0;
Delayms(200); //延时足够时间,让下位机有足够时间处理数据
// if(uRec_back_flag==0) {Send_reg_data(uSenddata,5);}
// else master_init_devices();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SPI双机互通信.rar (47个子文件)
SPI_master_slave_change
spi.PWI 8KB
spi.DSN 101KB
master
master.lis 25KB
master.lst 19KB
master.prj 944B
master.o 7KB
master.dbg 3KB
AVR_PQ1A._h 2KB
TransToSlave._h 1KB
master.lk 11B
TransToSlave.h 1KB
master._c 4KB
master.mp 3KB
master.i 0B
spi._h 2KB
master.s 12KB
master.dp2 291B
master.hex 2KB
master.cof 5KB
master.c 4KB
RCS
master.mak 846B
LED_Interphone.h 2KB
MASTER.SRC 77B
Last Loaded spi.DBK 101KB
slave
ChangToMaster.h 2KB
slave.lk 10B
LED_Interphone._h 2KB
slave.cof 5KB
send_to_master._ 329B
salve.c 3KB
salve.dp2 288B
slave.mak 805B
slave.dbg 3KB
slave.hex 2KB
send_to_master._h 1KB
slave.mp 3KB
salve._c 3KB
ChangToMaster._h 2KB
salve.lis 24KB
send_to_master.h 1KB
send_to_master 329B
slave.lst 17KB
slave.prj 938B
LED_Interphone.h 2KB
salve.s 11KB
salve.o 6KB
SLAVE.SRC 78B
共 47 条
- 1
资源评论
beancurd_725
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功