;***********从机代码***********汇编
;*****头文件*******
include xHTxxF3XXX.inc ;改为自己需要的单片机名字
;********end**************
;*****伪指令*************
ds .section 'data'
DEL1 DB ?
DEL2 DB ?
DEL3 DB ?
SEND_DATA DB ?
COUNT DB ?
SCOUNT DB ?
;****定义引脚****************
LED_PORT EQU PD
LED_PORTC EQU PDC
SEG_PORT EQU PC
SEG_PORTC EQU PCC
MASTER_SDI EQU PA.3
MASTER_SDIC EQU PAC.3
MASTER_SDIPU EQU PAPU.3
MATER_SDO EQU PA.1
MASTER_SDOC EQU PAC.1
MASTER_SDOPU EQU PAPU.1
MATER_SCK EQU PB.6
MASTER_SCKC EQU PBC.6
MASTER_SCKPU EQU PBPU.6
M_SCS EQU PB5
M_SCSC EQU PBC5
M_SCSPU EQU PBPU.5
;***********************************
;**************主代码***************
cs .section at 000h 'code'
ORG 00H
MOV A,10101000B
MOV WDTC,A ;关闭看门狗
CLR PDC ;PD设置为输出模式
CLR PD
CLR PAC4 ;数码管的位选的设置模式
;CLR PA.4
CLR SEG_PORTC ;设置数码管段选输出模式
CLR SEG_PORT
;****spi相关的4个引脚配置******
CLR MASTER_SDOC ;PA1输出模式
SET MASTER_SDIC ;PA3输入模式 PAPU3
SET MASTER_SCKC ;SCK输入模式
SET M_SCSC ;PB5输入模式
;************配置上拉****
SET MASTER_SDIPU ;PAPU3 上拉
SET MASTER_SCKPU ;PBPU6上拉
SET M_SCSPU ;PBPU5上拉
;********设置对应的引脚功能*********
MOV A,01001000b
MOV PAS0,A
MOV A,00010100b
MOV PBS1,A
mov A,00011110B
MOV IFS,A
;*********配置寄存器********
MOV A,10100000B
MOV SIMC0,A
MOV A,00111100B
MOV SIMC2,A
SET SIMEN ;使能SPI
;****************************
;*********从机接收数据*******
RE_START:
MOV A,10011001B ;4
MOV SEND_DATA,A
M_SEND:
MOV A,SEND_DATA
MOV SIMD,A
SZ WCOL
CLR WCOL ;有无冲突,0无,1有
JMP S_RECEIVE ;
S_RECEIVE:
SNZ TRF ;判断SPI数据传输是否结束
JMP $-1 ;没有结束就进入等待阶段
CLR TRF ;清除SPI传输标志位
MOV A,SIMD ;读取SIMD寄存器的值
MOV SEG_PORT,A ;将SIMD寄存器的值给数码管
CLR TRF ;判断SPI数据传输是否结束
SET PD.0 ;点亮led0
JMP M_SEND
LOOP:
JMP LOOP
;*********end*********
;*************延时程序*******************
DELAY PROC
MOV A,100
MOV DEL1,A
DEL_1: MOV A,30
MOV DEL2,A
DEL_2: MOV A,110
MOV DEL3,A
DEL_3: SDZ DEL3
JMP DEL_3
SDZ DEL2
JMP DEL_2
SDZ DEL1
JMP DEL_1
RET
DELAY ENDP
;***********end***********
END
;*******头文件*************主机********成功版
include xHTxxxxxx.inc
;******定义伪指令指令*****
ds .section 'data'
DEL1 DB ?
DEL2 DB ?
DEL3 DB ?
SEND_DATA DB ?
COUNT DB ?
;************end**********************
;****定义引脚****************
LED_PORT EQU PD
LED_PORTC EQU PDC
SEG_PORT EQU PC
SEG_PORTC EQU PCC
MASTER_SDI EQU PA.3
MASTER_SDIC EQU PAC.3
MASTER_SDIPU EQU PAPU.3
MATER_SDO EQU PA.1
MASTER_SDOC EQU PAC.1
MASTER_SDOPU EQU PAPU.1
MATER_SCK EQU PB.6
MASTER_SCKC EQU PBC.6
MASTER_SCKPU EQU PBPU.6
M_SCS EQU PB5
M_SCSC EQU PBC5
M_SCSPU EQU PBPU.5
;***********end*********************
;**********主要程序部分************
cs .section at 000h 'code'
ORG 00H
MOV A,10101000B
MOV WDTC,A ;关闭看门狗;
;****灯的配置*********
CLR PDC ;灯3输出模式
CLR PD
;******************************
;**************SIP四个引脚的配置模式*****
CLR PAC1 ;PA1输出模式
SET MASTER_SDIC ;PA3输入模式
CLR MASTER_SCKC ;PB6输出模式
CLR M_SCSC ;PB5输出模式
;**************配置上拉电阻*****
SET MASTER_SDIPU ;使能PAPU3
SET MASTER_SCKPU ;PBPU6输入模式CLK
SET M_SCSPU ;PBPU5输入模式
;********设置对应的引脚功能*********
MOV A,01001000b
MOV PAS0,A
MOV A,00010100b
MOV PBS1,A
MOV A,00001000B
MOV IFS,A
;*********配置寄存器**************
MOV A,01000000B
MOV SIMC0,A
MOV A,00111100B
MOV SIMC2,A
SET SIMEN ;使能spi
;**************主机发送数据************
RE_START:
MOV A,8
MOV COUNT,A
MOV A,10110000B
MOV SEND_DATA,A ; 初始寄存器
M_SEND:
CLR WCOL
MOV A,SEND_DATA
MOV SIMD,A
SZ WCOL ;有无冲突,0无,1有
jmp M_SEND ;
M_RECEIVE:
SNZ TRF ;SPI DATA TRANSFER IS COMPLETED?
JMP $-1 ;NO ,WAITING
CLR TRF ;CLEAR TRF
SET PD.2
JMP M_SEND
LOOP:
JMP LOOP
;*************延时程序*******************
DELAY PROC
MOV A,100
MOV DEL1,A
DEL_1: MOV A,30
MOV DEL2,A
DEL_2: MOV A,110
MOV DEL3,A
DEL_3: SDZ DEL3
JMP DEL_3
SDZ DEL2
JMP DEL_2
SDZ DEL1
JMP DEL_1
RET
DELAY ENDP
end