SPI总线在51系列单片机系统中的实现
行外围接口芯片(如A/D转换芯片、网络控制器芯片、LED显示驱动芯片等)。对于下降沿输入、上升沿输出的各种串行外围接口芯片,只要改变P1.1的输出电平顺序,即先置P1.1为低电平,之后再次置P1.1为高电平,再置P1.1为低电平……,则这些子程序也同样适用。
3.1MCU串行输入子程序SPIIN
从X25F008的SPISO线上接收8位数据并放入寄存器R0中的应用子程序如下:
SPIIN:SETBP1.1;使P1.1(时钟)输出为1
CLRP1.2;选择从机
MOVR1,#08H;置循环次数
SPIIN1:CLRP1.1;使P1.1(时钟)输出为0
NOP;延时
NOP
MOVC,P1.3;从机输出SPISO送进位C
RLCA;左移至累加器ACC
SETBP1.1;使P1.0(时钟)输出为1
DJNZR1,SPIIN1;判断是否循环8次(8位数据)
MOVR0,A;8位数据送R0
RET
3.2MCU串行输出子程序SPIOUT
将MCS51单片机中R0寄存器的内容传送到X25F008的SPISI线上的程序如下:
SPIOUT:SETBP1.1;使P1.1(时钟)输出为1
CLRP1.2;选择从机
MOVR1,#08H;置循环次数
MOVA,R0;8位数据送累加器ACC
SPIOUT1:CLRP1.1;使P1.1(时钟)输出为0
NOP;延时
NOP
RLCA;左移至累加器ACC最高位至C
MOVP1.0,C;进位C送从机输入SPISI线上
SETBP1.1;使P1.1(时钟)输出为1
DJNZR1,SPIOUT1;判是否循环8次(8位数据)
RET
3.3MCU串行输入/输出子程序SPIIO
将MCS51单片机R0寄存器的内容传送到X25F008的SPISI中,同时从X25F008的SPISO接收8位数据的程序如下:
SPIIO:SETBP1.1;使P1.1(时钟)输出为1
CLRP1.2;选择从机
MOVR1,#08H;置循环次数
MOVA,R0;8位数据送累加器ACC
SPIIO1:CLRP1.1;使P1.1(时钟)输出为0
NOP;延时
NOP
MOVC,P1.3;从机输出SPISO送进位C
RLCA;左移至累加器ACC最高位至C
MOVP1.0,C;进位C送从机输入
SETBP1.1;使P1.1(时钟)输出为1
DJNZR1,SPIIO1;判断是否循环8次(8位数据)
RET
4结束语
本文介绍了通过SPI总线接口实现数据传输的实现方法,给出了用MCS51单片机汇编语言模拟SPI串行总线的输入、输出,输入/输出以传送8位数据的子程序。实际上,也可以根据SPI串行总线的操作时序特点来在MCS96系列、ATMEL89系列等单片机上实现SPI总线的接口。
《SPI总线在51系列单片机系统中的实现(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/173192.html
3.1MCU串行输入子程序SPIIN
从X25F008的SPISO线上接收8位数据并放入寄存器R0中的应用子程序如下:
SPIIN:SETBP1.1;使P1.1(时钟)输出为1
CLRP1.2;选择从机
MOVR1,#08H;置循环次数
SPIIN1:CLRP1.1;使P1.1(时钟)输出为0
NOP;延时
NOP
MOVC,P1.3;从机输出SPISO送进位C
RLCA;左移至累加器ACC
SETBP1.1;使P1.0(时钟)输出为1
DJNZR1,SPIIN1;判断是否循环8次(8位数据)
MOVR0,A;8位数据送R0
RET
3.2MCU串行输出子程序SPIOUT
将MCS51单片机中R0寄存器的内容传送到X25F008的SPISI线上的程序如下:
SPIOUT:SETBP1.1;使P1.1(时钟)输出为1
CLRP1.2;选择从机
MOVR1,#08H;置循环次数
MOVA,R0;8位数据送累加器ACC
SPIOUT1:CLRP1.1;使P1.1(时钟)输出为0
NOP;延时
NOP
RLCA;左移至累加器ACC最高位至C
MOVP1.0,C;进位C送从机输入SPISI线上
SETBP1.1;使P1.1(时钟)输出为1
DJNZR1,SPIOUT1;判是否循环8次(8位数据)
RET
3.3MCU串行输入/输出子程序SPIIO
将MCS51单片机R0寄存器的内容传送到X25F008的SPISI中,同时从X25F008的SPISO接收8位数据的程序如下:
SPIIO:SETBP1.1;使P1.1(时钟)输出为1
CLRP1.2;选择从机
MOVR1,#08H;置循环次数
MOVA,R0;8位数据送累加器ACC
SPIIO1:CLRP1.1;使P1.1(时钟)输出为0
NOP;延时
NOP
MOVC,P1.3;从机输出SPISO送进位C
RLCA;左移至累加器ACC最高位至C
MOVP1.0,C;进位C送从机输入
SETBP1.1;使P1.1(时钟)输出为1
DJNZR1,SPIIO1;判断是否循环8次(8位数据)
RET
4结束语
本文介绍了通过SPI总线接口实现数据传输的实现方法,给出了用MCS51单片机汇编语言模拟SPI串行总线的输入、输出,输入/输出以传送8位数据的子程序。实际上,也可以根据SPI串行总线的操作时序特点来在MCS96系列、ATMEL89系列等单片机上实现SPI总线的接口。
《SPI总线在51系列单片机系统中的实现(第2页)》