标题: AT90S8515单片机SPI驱动74LS595源程序 [打印本页]

作者: 新洲罗远    时间: 2020-3-31 07:17
标题: AT90S8515单片机SPI驱动74LS595源程序
AT90S8515使用SPI驱动74LS595。
我这里使用了SS口线PB.4,作为74LS595的锁存信号,关键是把PB.4设置为输出。
74LS595驱动发光管显示加1计数,我用SPI最高速度,所以显示16位计数高八位,低八位太快,看不清楚。



单片机源程序如下:
  1. //ICC-AVR application builder : 2020/3/30 22:23:31
  2. // Target : 8515
  3. // Crystal: 8.0000Mhz

  4. #include <io8515v.h>
  5. #include <macros.h>

  6. #define SS_ON PORTB |= BIT(4);     //E置1
  7. #define SS_OFF PORTB &= ~BIT(4);   //E置0

  8. void port_init(void)
  9. {
  10. PORTA = 0x00;
  11. DDRA  = 0x00;
  12. DDRB  = 0xff;
  13. PORTB = 0xFF; //复用SS脚的关键是PB.4设为输出
  14. PORTC = 0x00;
  15. DDRC  = 0x00;
  16. PORTD = 0x00;
  17. DDRD  = 0xFF;
  18. }

  19. //SPI initialize
  20. // clock rate: 62500hz
  21. void spi_init(void)
  22. {
  23. SPCR = 0xFC; //setup SPI
  24. }

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

  26. #pragma interrupt_handler spi_stc_isr:iv_SPI_STC
  27. void spi_stc_isr(void)
  28. {
  29.               //byte in SPDR has been sent/received
  30.      SS_OFF;   //PB.4=0
  31.          SS_ON;    //PB.4=1
  32.      spi_d = spi_d+1;
  33.          SPDR = spi_d>>8;
  34. }

  35. //call this routine to initialize all peripherals
  36. void init_devices(void)
  37. {
  38. //stop errant interrupts until set up
  39. CLI(); //disable all interrupts
  40. port_init();
  41. spi_init();

  42. MCUCR = 0x00;
  43. GIMSK = 0x00;
  44. TIMSK = 0x00;
  45. SEI(); //re-enable interrupts
  46. //all peripherals are now initialized
  47. }

  48. void main(void)
  49. {
  50.     init_devices();         //初始化系统
  51.    
  52. SPDR=0X00;
  53. while(1)
  54.     {}
  55. }
复制代码

以上程序51hei提供下载:
SPI01.zip (9 KB, 下载次数: 8)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1