×
单片机 > 单片机程序设计 > 详情

AT90S8515单片机SPI驱动74LS595源程序

发布时间:2024-05-05 发布时间:
|

AT90S8515使用SPI驱动74LS595。
我这里使用了SS口线PB.4,作为74LS595的锁存信号,关键是把PB.4设置为输出。
74LS595驱动发光管显示加1计数,我用SPI最高速度,所以显示16位计数高八位,低八位太快,看不清楚。

单片机源程序如下:

//ICC-AVR application builder : 2020/3/30 22:23:31

// Target : 8515

// Crystal: 8.0000Mhz


#include

#include


#define SS_ON PORTB |= BIT(4); //E置1

#define SS_OFF PORTB &= ~BIT(4); //E置0


void port_init(void)

{

PORTA = 0x00;

DDRA = 0x00;

DDRB = 0xff;

PORTB = 0xFF; //复用SS脚的关键是PB.4设为输出

PORTC = 0x00;

DDRC = 0x00;

PORTD = 0x00;

DDRD = 0xFF;

}


//SPI initialize

// clock rate: 62500hz

void spi_init(void)

{

SPCR = 0xFC; //setup SPI

}


int spi_d =0X00; //太快,用高8位


#pragma interrupt_handler spi_stc_isr:iv_SPI_STC

void spi_stc_isr(void)

{

//byte in SPDR has been sent/received

SS_OFF; //PB.4=0

SS_ON; //PB.4=1

spi_d = spi_d+1;

SPDR = spi_d>>8;

}


//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

port_init();

spi_init();


MCUCR = 0x00;

GIMSK = 0x00;

TIMSK = 0x00;

SEI(); //re-enable interrupts

//all peripherals are now initialized

}


void main(void)

{

init_devices(); //初始化系统

SPDR=0X00;

while(1)

{}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义