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)
{}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』