EX20AVR ATmega8A SPI PORTC2PORTC

2018-06-14  本文已影响17人  山前雨1

//EX19AVR SPI PORTC-PORTC/*//EX18AVR ATmega8A SPI master program//author :QI小米粥//data :2018.3.30#include#includevoid init(void) {SFIOR &=~BIT(2);//配置的上拉DDRC=0X00;PORTC=0XFF;//上拉电阻配置DDRB =BIT(2)|BIT(3)|BIT(5);//SS,MOSI,SCK设置位输出SPCR =BIT(6)|BIT(4)|BIT(0); }void master_t(char a) {PORTB &=~BIT(2);//拉低ssSPDR =a;//数据写入自动启动时钟SCKwhile(!(SPSR&BIT(7))) //完成中断产生后,可以继续往下走 {}SPSR &=~BIT(7);//清除中断PORTB |=BIT(2);//抬高ss清除spi}#pragma interrupt_handler inter_spi:11void inter_spi(void) {}void main(void) {init();while(1) {master_t(PINC);}}//默认输入引脚也要上拉,并没有这么做//按着datasheet中的简单的操作来的//SS开始转换要拉低,结束转换后要抬高*///EX19AVR ATmega8A SPI slave program//author:QI小米粥//data:2018.3.30#include#includeint a;

void init(void)

{

DDRC =0xff;//slave的输出

DDRB |=BIT(0);

SFIOR &=~BIT(2);

DDRB &=~BIT(2);//SS输入

PORTB |=BIT(2);

DDRB |=BIT(4);//MISO设置为输出

SPCR |=BIT(6);//SPI使能

}

char slave_r(void)

{

while(!(SPSR&BIT(7)))//传输完成后产生,中断后继续往下走,

{}

/*清除中断标志位*/

SPSR &=~BIT(7);//清除中断标志位

return SPDR;

}

void main(void)

{

init();

while(1)

{

a=slave_r();

PORTC=a;

}

}

上一篇下一篇

猜你喜欢

热点阅读