📄 spi-in.c
字号:
/* ****************************************************************
** 功能描述: SPI串行输入外部8位开关量并以PORTD口输出程序
*************************************************************** */
#include "pic18.h" /* 所有PIC18系列的头文件 */
/* ****************************************************************
** 函 数 名: initial()
** 功能描述: 系统初始化子程序,放在程序首部
*************************************************************** */
void initial()
{
INTCON=0x00; /* bit7-bit0:关总中断 */
ADCON1=0X07; /* 设置数字输入输出口 */
PIE1=0; /* PIE1 的中断不使能 */
PIE2=0; /* PIE2 的中断不使能 */
PIE3=0; /* PIE3 的中断不使能 */
}
/* ****************************************************************
** 函 数 名: SPI_In_initial()
** 功能描述: SPI输入初始化子程序
*************************************************************** */
void SPI_In_initial()
{
PIR1=PIR1&0xf7; /* 清除SSPIF标志*/
SSPCON1=0x30; /* SSPEN=1;CKP=0,FOSC/4 */
SSPSTAT=0xC0;
TRISC=TRISC|0x10; /* SDI(RC4)引脚为输入 */
TRISC=TRISC&0xf7; /* SCK(RC3)引脚为输出 */
TRISA=TRISA&0xef; /* RA4为输出方式,用作串行输入74HC165芯片控制信号*/
}
/* ****************************************************************
** 函 数 名: SPIIN()
** 功能描述: SPI输入接收外部8位开关量子程序
*************************************************************** */
char SPIIN()
{
unsigned char data;
RA4=0; /* 74HC165置数使能,将8位开关量置入器件 */
RA4=1; /* 74HC165移位置数使能,芯片串行工作 */
SSPBUF=0; /* 启动SPI,此操作用于清除SSPSTAT的BF位 */
do
{
;
}while(SSPIF==0); /*查询数据接收完毕否?*/
SSPIF=0; /*清除SSPIF标志*/
data=SSPBUF;
return(data); /*返回接收到的数据*/
}
main()
{
initial(); /* 系统初始化子程序 */
SPI_In_initial(); /* SPI初始化子程序 */
CMCON=0x07; /* 关比较器 */
TRISD=0x00; /* 设置PORTD口为输出 */
while(1)
{
PORTD=SPIIN(); /* 用户可编写其他程序 */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -