×
嵌入式 > 技术百科 > 详情

PIC16F87x单片机的串行外围接口SPI模块使用方法源程序

发布时间:2024-06-26 发布时间:
|

PIC16F877的扩展并行口程序和串行外围接口SPI的数据输入程序。

在系统程序的初始化部分应对程序中用到的寄存器和临时变量作说明,如:

count equ 0x20 ;存放计数控制数

data equ count+1 ;暂存读入的数据

scode equ data+1 ;存放控制代码

扩展并行输出口程序(控制指令暂存scode)

INSTRU_OUT

banksel TRISA ;选择存储体1

movlw B'11001111' ;设置RA4、RA5输出

movwf TRISA

clrf TRISD ;设置RD口输出

banksel PORTA ;选择存储体0

clrf PORTA

clrf PORTD ;PORTA、PORTD口清零

movf scode,0 ;控制指令送W寄存器

movwf PORTD

bsf PORTA,4 ;

bsf PORTA,5 ;LE=1,选通373芯片,送出控制指令

扩展并行输入口程序

1. 初始化SPI工作方式

SPI_INIT

banksel SSPCON ;选择存储体0

movlw B'00100000' ;SSPEN=1,允许SPI工作方式

;CKP=0,“非忙”状态时,时钟为高电平

;SPI主控方式,FOSC/4

movwf SSPCON

开始

banksel SSPSTAT ;选择存储体1

movlw B'01000000' ;SMP=0,在数据输出中程时间对其进行采样

;CKE=1,在SCK的上升沿传送数据

movwf SSPSTAT

2. 从开关量IN0-IN7并行读入数据到74HC165芯片,并送PIC16F877微控制器

SPI_IN

banksel TRISA ;选择存储体1

movlw B'11001111' ;RA4、RA5输出

movwf TRISA

movlw B'11110111' ;RC3输出、RC4

;输入

movwf TRISC

clrf TRISD ;RD口输出

banksel PORTA ;选择存储体0 图 2 SPI程序流程图

clrf PORTA

clrf PORTC ;时钟SCK=0

clrf PORTD

movlw 0x08

movwf count ;控制8位二进制数

movlw B'00111111' ;LOAD=0

movwf PORTD

bsf PORTA,4 ;

bsf PORTA,5 ;选通373芯片,并行读入IN0-IN7

nop

nop

clrf PORTA

bsf PORTD,7 ;LOAD=1

bsf PORTA,4

bsf PORTA,5 ;选通373芯片,允许串行移位读入DI

nop

nop

clrf PORTA

bsf PORTD,7

bsf PORTA,4

bcf PORTA,5 ;CS3=0,允许时钟SCK输入

banksel SSPBUF ;选择存储体0

clrf SSPBUF

loop banksel PORTC

bsf PORTC,3

nop

bcf PORTC,3

nop

clrz

decfsz count,1 ;count=0?,读完8位二进制数?

goto loop ;否,继续

bcf PORTA,4

bcf PORTA,5 ;关闭373

banksel SSPBUF

movf SSPBUF,0

movwf data ;数据送data暂存


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
看业界大佬们如何看待未来趋势!智能制造?健康医疗?新流通?