单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:2557|回复:0
打印上一主题下一主题

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

[复制链接]
跳转到指定楼层
楼主
ID:716413发表于 2020-3-31 07:17|只看该作者|只看大图回帖奖励
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)


评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网