background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
122
;          7      6      5      4      3      2      1      0
;SPCTL   SSIG   SPEN   DORD   MSTR   CPOL   CPHA   SPR1   SPR0
if MASTER
    MOV   SPCTL,#11111100B          ;0FCH, 忽略 SS 脚, 设为主机
    ;SSIG=1: 忽略 SS 脚
    ;SPEN=1:允许 SPI  工作
    ;DORD=1:先传低位 LSB
    ;MSTR=1:设为主机
    ;CPOL=1:SPI  空闲时 SPICLK = 1,前跳变沿是下降沿,后跳变沿是上升沿。
    ;CPHA=1:数据由 SPICLK  前跳变沿驱动到 SPI  口线,SPI  模块在后跳变沿采样数据。
    ;SPR1,SPR0 = 00:主模式时 SPI  时钟源选择为 fosc/4
else
    MOV   SPCTL,#11101100B          ;0ECH, 忽略 SS 脚, 设为从机
    ;SSIG=1: 忽略 SS 脚
    ;SPEN=1:允许 SPI  工作
    ;DORD=1:先传低位 LSB
    ;MSTR=0:设为从机
    ;CPOL=1:SPI  空闲时 SPICLK = 1,前跳变沿是下降沿,后跳变沿是上升沿。
    ;CPHA=1:数据由 SPICLK  前跳变沿驱动到 SPI  口线,SPI  模块在后跳变沿采样数据。
    ;SPR1,SPR0 = 00:主模式时 SPI  时钟源选择为 fosc/4
endif
    MOV   SPSTAT,#11000000B         ;清 0 标志位 SPIF(SPSTAT.7), WCOL(SPSTAT.6)
                                    ;向该两个标志位写 "1" 会将它们清 0
    MOV   A, #00001000B
    ORL   AUXR, A                   ;令 ESPI(AUXR.3)=1,允许 SPIF(SPSTAT.7)产生中断
    SETB  EADC_SPI                  ;开 ADC 中断和 SPI 中断共享的总中断控制位
    RET
;------------------------------------------------------------------------------
RS232_Send_Byte:                    ;RS232 串口发送一个字节
    CLR   TI                        ;清零串口发送中断标志
    MOV   SBUF, A
RS232_Send_Wait:
    JNB   TI, RS232_Send_Wait       ;等待发送完毕, 未发送完毕跳回本行
    CLR   TI                        ;清零串口发送中断标志
    RET
;------------------------------------------------------------------------------
;此段程序只有主 MCU  调用
SPI_Send_Byte:                      ;SPI 发送一个字节
    CLR   EADC_SPI                  ;关 ADC 中断和 SPI 中断共享的总中断控制位
    MOV   SPDAT, A                  ;SPI 发送数据
SPI_Send_Byte_Wait:
    MOV   A, SPSTAT                 ;等待 SPIF=1 即等待 SPI 发送完毕
    ANL   A, #80H