找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2593|回复: 0
收起左侧

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

[复制链接]
ID:716413 发表于 2020-3-31 07:17 | 显示全部楼层 |阅读模式
AT90S8515使用SPI驱动74LS595。
我这里使用了SS口线PB.4,作为74LS595的锁存信号,关键是把PB.4设置为输出。
74LS595驱动发光管显示加1计数,我用SPI最高速度,所以显示16位计数高八位,低八位太快,看不清楚。

5d6034a85edf8db1b0806a680923dd54564e740b.jpg

单片机源程序如下:
  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)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表