类似xHTxx单片机SPI学习

;***********从机代码***********汇编
;*****头文件*******
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值