📄 spi.lis
字号:
.module spi.c
.area data(ram, con, rel)
0000 _disp::
0000 .blkb 2
.area idata
0000 C0F9 .byte 192,249
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 A4B0 .byte 164,176
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 9992 .byte 153,146
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 82F8 .byte 130,248
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 8090 .byte 128,144
.area data(ram, con, rel)
000A .dbfile E:\ICCAVR\project\AVRMEG~2\icc\019-TEST\spi.c
000A .dbsym e disp _disp A[10:10]c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~2\icc\019-TEST\spi.c
0000 .dbfunc e SPI_MasterInit _SPI_MasterInit fV
.even
0000 _SPI_MasterInit::
0000 .dbline -1
0000 .dbline 19
0000 ;
0000 ; #include "iom16v.h"
0000 ;
0000 ; /*
0000 ; 实验四:
0000 ; SPI接口实险,LED数据管显示。
0000 ; 1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
0000 ; 2、内部1 M晶振,程序采用单任务方式,软件延时。
0000 ; 3、进行此实验请插上JP1的所有8个短路块,JP6(SPI_EN)短路块。
0000 ;
0000 ; AVR mega16学习板
0000 ; www.iccavr.com
0000 ; 2006-01-10
0000 ; */
0000 ;
0000 ; unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
0000 ;
0000 ; /*SPI接口初始化*/
0000 ; void SPI_MasterInit(void) {
0000 .dbline 21
0000 ;
0000 ; DDRB |= 0xF0; /* 设置MOSI 和SCK 为输出,其他为输入 */
0000 87B3 in R24,0x17
0002 806F ori R24,240
0004 87BB out 0x17,R24
0006 .dbline 22
0006 ; SPCR = (1<<SPE) | (1<<MSTR)
0006 83E5 ldi R24,83
0008 8DB9 out 0xd,R24
000A .dbline -2
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e SPI_MasterTransmit _SPI_MasterTransmit fV
000C ; i -> R16
.even
000C _SPI_MasterTransmit::
000C .dbline -1
000C .dbline 27
000C ; | (1<<SPR1) | (1<<SPR0); /* 使能SPI 主机模式,设置时钟速率为fck/128 */
000C ; }
000C ;
000C ; /*SPI数据发送*/
000C ; void SPI_MasterTransmit(unsigned char i) {
000C .dbline 29
000C ;
000C ; SPDR = i; /* 启动数据传输 */
000C 0FB9 out 0xf,R16
000E L3:
000E .dbline 30
000E .dbline 31
000E .dbline 32
000E L4:
000E .dbline 30
000E ; while (!(SPSR & (1<<SPIF))) { /* 等待传输结束 */
000E 779B sbis 0xe,7
0010 FECF rjmp L3
0012 .dbline -2
0012 L2:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 16 c
0014 .dbend
0014 .dbfunc e SPI_595_Out _SPI_595_Out fV
0014 ; i -> R20
.even
0014 _SPI_595_Out::
0014 0E940000 xcall push_gset1
0018 402F mov R20,R16
001A .dbline -1
001A .dbline 36
001A ; ;
001A ; }
001A ; }
001A ;
001A ; /*595数据输出*/
001A ; void SPI_595_Out(unsigned char i) {
001A .dbline 37
001A ; PORTB &= ~(1 << 4); /*准备锁存*/
001A C498 cbi 0x18,4
001C .dbline 38
001C ; SPI_MasterTransmit(i);
001C 042F mov R16,R20
001E F6DF xcall _SPI_MasterTransmit
0020 .dbline 39
0020 ; PORTB |= (1 << 4); /*锁存数据*/
0020 C49A sbi 0x18,4
0022 .dbline -2
0022 L6:
0022 0E940000 xcall pop_gset1
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r i 20 c
0028 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -