📄 spi.lis
字号:
0082 .dbline 103
0082 ;
0082 ; while ((SPI0_P & (1 << SPI0_SCK)) != 0x00); //等待恢复为空闲低电平
0082 ;
0082 ; datalen--; //继续下一位操作
0082 ; }//while
0082 ;
0082 ; return redata; //返回
0082 F6 lda ,X
0083 .dbline -2
0083 L2:
0083 A702 ais #2
0085 .dbline 0 ; func end
0085 81 rts
0086 .dbsym l redata 0 c
0086 .dbsym l datalen 1 c
0086 .dbsym l snddata 4 c
0086 .dbend
0086 .dbfunc e SPI1Init _SPI1Init fV
0086 _SPI1Init::
0086 .dbline -1
0086 .dbline 118
0086 ; }
0086 ;
0086 ;
0086 ;
0086 ; //SPI1Init:----------------------------------------------------------------*
0086 ; //功能:SPI1通信初始化函数,定义为SPI主机 *
0086 ; //参数:无 *
0086 ; //返回:无 *
0086 ; //#define SPI1_SS 7 //从机选择引脚位 *
0086 ; //#define SPI1_SCK 6 //时钟引脚 *
0086 ; //#define SPI1_MOSI 5 //主出从入 *
0086 ; //#define SPI1_MISO 4 //主入从出 *
0086 ; //-------------------------------------------------------------------------*
0086 ; void SPI1Init()
0086 ; {
0086 .dbline 122
0086 ; //定义引脚功能
0086 ;
0086 ; //1.从机选择
0086 ; SPI1_D |= (1 << SPI1_SS); //输出引脚
0086 1E07 bset #7,0x7
0088 .dbline 123
0088 ; SPI1_P |= (1 << SPI1_SS); //初始化为高
0088 1E03 bset #7,0x3
008A .dbline 126
008A ;
008A ; //2.时钟信号
008A ; SPI1_D |= (1 << SPI1_SCK); //输出引脚
008A 1C07 bset #6,0x7
008C .dbline 127
008C ; SPI1_P &= ~(1 << SPI1_SCK); //初始化为低
008C 1D03 bclr #6,0x3
008E .dbline 131
008E ;
008E ;
008E ; //3.主出从入
008E ; SPI1_D |= (1 << SPI1_MOSI); //输出引脚
008E 1A07 bset #5,0x7
0090 .dbline 132
0090 ; SPI1_P |= (1 << SPI1_MOSI); //初始化为高
0090 1A03 bset #5,0x3
0092 .dbline 135
0092 ;
0092 ; //4.主入从出
0092 ; SPI1_D &= ~(1 << SPI1_MISO); //输入引脚
0092 1907 bclr #4,0x7
0094 .dbline -2
0094 L21:
0094 .dbline 0 ; func end
0094 81 rts
0095 .dbend
0095 .dbfunc e SPI1MASTERCOM _SPI1MASTERCOM fc
0095 ; redata -> 0,X
0095 ; datalen -> 1,X
0095 ; i -> 2,X
0095 ; snddata -> 5,X
0095 _SPI1MASTERCOM::
0095 .dbline -1
0095 A7FD ais #-3
0097 95 tsx
0098 .dbline 150
0098 ; //SPI1_P &= ~(1 << SPI1_MISO); //初始化为低
0098 ;
0098 ; }
0098 ;
0098 ; //SPI1MASTERCOM:-----------------------------------------------------------*
0098 ; //功能:SPI1主机通信程序 *
0098 ; //参数:snddata-发送数据 *
0098 ; //返回:接收数据 *
0098 ; //#define SPI1_SS 7 //从机选择引脚位 *
0098 ; //#define SPI1_SCK 6 //时钟引脚 *
0098 ; //#define SPI1_MOSI 5 //主出从入 *
0098 ; //#define SPI1_MISO 4 //主入从出 *
0098 ; //-------------------------------------------------------------------------*
0098 ; INT8U SPI1MASTERCOM(INT8U snddata)
0098 ; {
0098 .dbline 155
0098 ; INT8U redata; //接收数据
0098 ; INT8U datalen; //数据长度
0098 ; INT8U i;
0098 ;
0098 ; datalen = 0x08; //每次发送8位
0098 A608 lda #8
009A E701 sta 1,X
009C .dbline 158
009C ;
009C ; //操作8位
009C ; for(i = 0; i < datalen; i++)
009C 6F02 clr 2,X
009E 2058 bra L26
00A0 L23:
00A0 .dbline 159
00A0 ; {
00A0 .dbline 161
00A0 ; //先将MOSI数据上线,高位优先
00A0 ; if((snddata & (1 << (datalen - 1 - i ))) == 0x00)
00A0 E601 lda 1,X
00A2 A001 sub #1
00A4 E002 sub 2,X
00A6 6E0100 mov #1,*__r2
00A9 A407 and #7
00AB 2704 beq X8
00AD X7:
00AD 3800 lsl *__r2
00AF 4BFC dbnza X7
00B1 X8:
00B1 E605 lda 5,X
00B3 B400 and *__r2
00B5 2604 bne L27
00B7 .dbline 162
00B7 ; {
00B7 .dbline 163
00B7 ; SPI1_P &= ~(1 << SPI1_MOSI); //置低电平
00B7 1B03 bclr #5,0x3
00B9 .dbline 164
00B9 ; }
00B9 2002 bra L28
00BB L27:
00BB .dbline 166
00BB ; else
00BB ; {
00BB .dbline 167
00BB ; SPI1_P |= (1 << SPI1_MOSI); //置高电平
00BB 1A03 bset #5,0x3
00BD .dbline 168
00BD ; }
00BD L28:
00BD .dbline 171
00BD ;
00BD ; //读MISO数据
00BD ; if((SPI1_P & (1 << SPI1_MISO)) == 0x00)
00BD 08031C brset #4,0x3,L29
00C0 .dbline 172
00C0 ; {
00C0 .dbline 173
00C0 ; redata &= ~(1 << (datalen - 1 - i)); //低电平
00C0 E601 lda 1,X
00C2 A001 sub #1
00C4 E002 sub 2,X
00C6 6E0100 mov #1,*__r2
00C9 A407 and #7
00CB 2704 beq X10
00CD X9:
00CD 3800 lsl *__r2
00CF 4BFC dbnza X9
00D1 X10:
00D1 4E0000 mov *__r2,*__r0
00D4 3300 com *__r0
00D6 F6 lda ,X
00D7 B400 and *__r0
00D9 F7 sta ,X
00DA .dbline 174
00DA ; }
00DA 2015 bra L30
00DC L29:
00DC .dbline 176
00DC ; else
00DC ; {
00DC .dbline 177
00DC ; redata |= 1 << (datalen -1 - i); //高电平
00DC E601 lda 1,X
00DE A001 sub #1
00E0 E002 sub 2,X
00E2 6E0100 mov #1,*__r2
00E5 A407 and #7
00E7 2704 beq X12
00E9 X11:
00E9 3800 lsl *__r2
00EB 4BFC dbnza X11
00ED X12:
00ED F6 lda ,X
00EE BA00 ora *__r2
00F0 F7 sta ,X
00F1 .dbline 178
00F1 ; }
00F1 L30:
00F1 .dbline 181
00F1 1C03 bset #6,0x3
00F3 .dbline 182
00F3 9D NOP
00F4 .dbline 183
00F4 1D03 bclr #6,0x3
00F6 .dbline 184
00F6 L24:
00F6 .dbline 158
00F6 6C02 inc 2,X
00F8 L26:
00F8 .dbline 158
00F8 E602 lda 2,X
00FA E101 cmp 1,X
00FC 25A2 blo L23
00FE .dbline 186
00FE ;
00FE ; //SPI1_SCK空闲时为低电平,通信时置高
00FE ; SPI1_P |= (1 << SPI1_SCK);
00FE ; asm("NOP");
00FE ; SPI1_P &= ~(1 << SPI1_SCK);
00FE ; }//for
00FE ;
00FE ; return redata;
00FE F6 lda ,X
00FF .dbline -2
00FF L22:
00FF A703 ais #3
0101 .dbline 0 ; func end
0101 81 rts
0102 .dbsym l redata 0 c
0102 .dbsym l datalen 1 c
0102 .dbsym l i 2 c
0102 .dbsym l snddata 5 c
0102 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -