登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

软件模拟SPI的问题

作者:davy123456 栏目:单片机
软件模拟SPI的问题
我用软件模拟SPI对EPROM写数据,就是写不进去,时序好象都对,请帮我看看哪出了问题。PIC用的是PIC12F629,EPROM用的是AT25640A

list      p=12F629           ; list directive to define processor
#include <p12F629.inc>       ; processor specific variable definitions

__CONFIG   _CP_ON & _WDT_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT&_CPD_ON  

;***** VARIABLE DEFINITIONS

eaddrl      equ  20h
eaddrh      equ  21h
ebuf       equ  22h
etemp      equ   23h
ecount     equ  24h

ECS       equ    4
ESK       equ    0
EDO    equ  2
EDI   equ     1

;**********************************************************************
   ORG     0x000             ; processor reset vector
   goto    main              ; go to beginning of program

main
   bcf  STATUS,RP0
   movlw 07h
   movwf CMCON
   bsf     STATUS,RP0        ; set file register bank to 1
   movlw B'00001100'
   movwf TRISIO        ;set gp3,gp2 as input,others OUTPUT    
   bcf     STATUS,RP0        ; set file register bank to 1
   
   clrf GPIO
   bsf GPIO,ECS
          
          bsf GPIO,EDO
          
          movlw b'00000001' ;WRSR(write status register)
    movwf etemp
    bcf GPIO,ECS
    call WEPROG
    movlw b'00000010' ;
    movwf etemp
    call WEPROG
    bsf GPIO,ECS
    
          
          movlw  00h
          movwf eaddrl
          movlw 00h
          movlw eaddrh       ;eprom address to be write
          movlw  0ffh
          movwf ebuf
          call WEDATA
          goto $
          
WEDATA
    movlw b'00000110'  ;WREN (write enable latch)
    movwf etemp
    bcf GPIO,ECS
    call WEPROG
    bsf GPIO,ECS
    movlw b'00000010' ;WRITE(write data to MEMORY array)
    movwf etemp
    bcf GPIO,ECS
    call WEPROG
    bsf GPIO,ECS
    nop
    bcf GPIO,ECS
    movlw .16
    movwf ecount
    
loop  rlf eaddrl,1   ;write 16 bits address
    rlf eaddrh,1
    btfss STATUS,C
    call WRITE0
    btfsc STATUS,C
    call WRITE1
    decfsz ecount,1
    goto loop
    movf ebuf,0
    movwf etemp
    call WEPROG
    bsf GPIO,ECS
    return
    
WEPROG  movlw .8  ;write 8 bits data
    movwf ecount
loop1  rlf etemp,1
    btfss STATUS,C
    call WRITE0
    btfsc STATUS,C
    call WRITE1
    decfsz ecount,1
    goto loop1
    return
    
WRITE1
   bsf GPIO,EDI    ;write 1
   bsf GPIO,ESK
   nop
   nop
   nop
   bcf GPIO,ESK
   return
   
WRITE0
   bcf GPIO,EDI ;write 0
   bsf GPIO,ESK
   nop
   nop
   nop
   bcf GPIO,ESK
   return
   
           end             ;end

   
   



参与讨论
昵称:
讨论内容:
 
 
相关帖子
无意中想出来了如何解謐PIC的小容量芯片
FERR位如何清零?
休眠模式?
单户水表采集+电池供电(6 years)+无线发送(5m)  有作的吗
向大家请教一个PICC18编译出错的问题
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号