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 <io8515v.h>
- #include <macros.h>
- #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)
- {}
- }
复制代码
以上程序51hei提供下载:
SPI01.zip
(9 KB, 下载次数: 8)
|