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
开始 |
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暂存
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』