📄 spi.asm
字号:
;单片机与外围器件之间串行通信
;单片机运用片上的SPI模块进行移位输出,实现单片机和外围器件串行通信的方法。
;本实验中选择了两个移位寄存器作为外围器件分别进行输入
;即74LS164(8位的串行输入/并串行输出移位寄存器)
; 74LS166(8位串(并)行输入/串行输出移位寄存器)
;
;SPI的基本原理:
;SPI由4个信号构成:MISO(主设备输入,从设备输出),MOSI(主设备输出,从设备输入)
;SCK(串行数据流输入/输出的移位时钟),SS:从设备使能信号。
;SPI常用的模式是:主控模式和从动模式。
;SPI方式允许8位数据同时同步发送和接收,为完成通信功能,在PIC单片机中需要3条信号线。
;典型的3个引脚是:SDO(串行数据输出),SDI(串行数据输入),SCK(串行时钟)
;掌握SPI工作方式的初始化。
;(该模块的主要寄存器:SSPCON(同步串口控制寄存器),SSPSTAT(同步串行接口状态寄存器))
STATUS EQU 03H
PORTB EQU 06H
PORTC EQU 07H
SSPBUF EQU 13H
SSPCON EQU 14H
TRISB EQU 86H
TRISC EQU 87H
SSPSTAT EQU 94H
PIR1 EQU 0CH
RP1 EQU 06H
RP0 EQU 05H
DATA1 EQU 20H
DATA2 EQU 21H
TEMP1 EQU 23H
TEMP2 EQU 24H
COUNT1 EQU 82H
COUNT2 EQU 0FFH
ORG 00H
NOP
GOTO MAIN
MAIN
CALL INITIAL
LOOP
CALL OUT166
CALL DELAY
CALL DELAY
CALL OUT166
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL OUT164
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
GOTO LOOP
INITIAL
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 00H
MOVWF TRISB ;设置PB端口为输出。
MOVLW 00H
MOVWF TRISC ;设置PC端口为输出。
MOVLW 80H
MOVWF SSPSTAT ;在每位数据输出结束时刻进行输入数据采样。
;SCK上跳沿数据传送。
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 00H
MOVWF PORTC
MOVLW 00H
MOVWF PORTB ;将输出控制的RB7,RB6,都置为低电平。
MOVLW 30H
MOVWF SSPCON ;主控方式,使用串行口。
;时钟为f/4,空闲时时钟为高电平。
;CLRF SSPBUF ;清数据BUFFER为0
MOVLW 01H
MOVWF TEMP1
MOVLW 0FFH
MOVWF TEMP2 ;赋值
RETURN
OUT164
BSF STATUS,RP0
BCF STATUS,RP1
BCF SSPSTAT,0 ;清缓冲器满标志位。
BCF STATUS,RP0
BCF STATUS,RP1
BCF PIR1,3 ;清同步串行口中断标志位,(等待发送/接收)
MOVF TEMP1,0
MOVWF SSPBUF ;将TEMP1的值写入SSPBUF
BSF PORTB,6 ;74LS164输出使能。(与SPI的SCK相与,产生一个上升沿)
;引入PORTB。6是为了控制产生上升沿。
LOOP1
BCF STATUS,RP0
BCF STATUS,RP1
BTFSS PIR1,3 ;查看接收是否完成(0为未完,1为完成。)
GOTO LOOP1
BCF STATUS,RP0
BCF STATUS,RP1
INCF TEMP1 ;TEMP1自加1
BCF PORTB,6 ;74LS164输出不使能。
RETURN
OUT166
BSF STATUS,RP0
BCF STATUS,RP1
BCF SSPSTAT,0 ;清缓冲器满标志位。
BCF STATUS,RP0
BCF STATUS,RP1
BCF PIR1,3 ;清同步串行口中断标志位,(等待发送/接收)
MOVF TEMP2,0 ;将TEMP1的值写入SSPBUF
MOVWF SSPBUF
BSF PORTB,7 ;74LS166输出使能。(与SPI的SCK相与,产生一个上升沿)
;引入PORTB。7是为了控制产生上升沿。
LOOP2
BCF STATUS,RP0
BCF STATUS,RP1
BTFSS PIR1,3 ;查看接收是否完成(0为未完,1为完成。)
GOTO LOOP2
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0FFH
XORWF TEMP2,1 ;temp2翻转。
BCF PORTB,7 ;74LS166输出不使能。
RETURN
DELAY
MOVLW COUNT1
MOVWF DATA1
LOOP3
MOVLW COUNT2
MOVWF DATA2
LOOP4
DECFSZ DATA2,1
GOTO LOOP4
DECFSZ DATA1,1
GOTO LOOP3
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -