機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
877A軟件模擬SPI通信讀寫93C46
877A軟件模擬SPI通信讀寫93C46
 更新時(shí)間:2008-7-26 17:06:32  點(diǎn)擊數(shù):3
【字體: 字體顏色
;功能說(shuō)明:
;1.做一個(gè)燈的左移,將左移的8個(gè)碼建于TABLE中.
;2.從TABLE中取出數(shù)據(jù)并以16位的方式存入93C46中,地址00H-03H.
;3.將93C46的00H-03H地址中的數(shù)據(jù)碼取出并存入877A的RAM(30H)-(37H),并輸出至877A的RC口.
;當(dāng)斷電再?gòu)?fù)電,數(shù)據(jù)碼不會(huì)消失.
;4.本電路所使用93C46為ATMEL或MICROCHIP的,或不是該廠的,則燒寫時(shí)間會(huì)有差異
;必須調(diào)整本程序的DELAY時(shí)間
;本實(shí)戰(zhàn)的目的是讓大家進(jìn)上步熟悉SPI通信的時(shí)序,熟悉93C46的讀寫,會(huì)用軟件模擬SPI通信
;硬件接法:
;1.93C46的CS接877A的RB1口;CLK接877A的RB2口;DI接877A的RB4口;DO接877A的RB5口;93C46的ORG端接VCC,使93C46工作于16位方式
;2.實(shí)驗(yàn)本實(shí)驗(yàn)須將MCD-DEMO實(shí)驗(yàn)板上的24CXX系列芯片先取下,在實(shí)驗(yàn)過(guò)程中不要按動(dòng)同樣接在RB口的按鍵,以免影響通信時(shí)序.
;3.實(shí)驗(yàn)板上拔碼開關(guān)S1要置ON,其它拔碼開關(guān)都可以關(guān)閉。
;PIC單片機(jī)學(xué)習(xí)網(wǎng)  陳學(xué)乾  http://www.pic16.com   討論論壇:http://pic16.com/bbs/
;版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處,并不能去掉或改變文件中的說(shuō)明文字。
;程序文件名“MCD-93C46.ASM"
;程序清單如下:
;************************************
    LIST      P=16F877A, R=DEC
    include "P16F877A.inc"
;***********************************
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
;************************************ 定義查表偏移量
READ   EQU   0  ;讀93C46
WRITE  EQU   1  ;寫入93C46
EWEN   EQU   2  ;93C46寫入使能
EWDS   EQU   3  ;93C46寫入禁止
;*************************************定義引腳位地址
CS     EQU   1
CLK    EQU   2
DI     EQU   4
DO     EQU   5
;*********************
ADR46  EQU   20H
F1     EQU   23H
F2     EQU   24H
F3     EQU   25H
F4     EQU   26H
F5     EQU   27H
F6     EQU   28H
F7     EQU   29H
;**********************
  ORG 000H
  NOP              ;放置一條ICD必需的空操作指令
  GOTO MAIN
  ORG 0008H
;******************************************************
TABLE
  ADDWF PCL ,1   ;查表,PORTC一個(gè)燈左移
  RETLW  01H
  RETLW  02H
  RETLW  04H
  RETLW  08H
  RETLW  10H
  RETLW  20H
  RETLW  40H
  RETLW  80H
;*******************************************************
TO9346
  MOVWF F1        ;將W的值送F1暫存
  BSF  PORTB ,CS          ;寫入起始位1
  BSF  PORTB ,DI
  BSF  PORTB ,CLK
  CALL DELAY
  BCF  PORTB ,CLK
  CALL DELAY
  MOVFW F1
  ADDWF PCL ,1
  GOTO  SREAD    ;讀
  GOTO  SWRITE   ;寫
  GOTO  SEWEN    ;寫使能
  GOTO  SEWDS    ;寫禁止
;*****************************************************
MAIN
  MOVLW  00H
  MOVWF  PORTC            ;LED先全部熄滅
  MOVLW  20H
  MOVWF  PORTB            ;除DO外,其它通信口全送0

  BSF STATUS,RP0          ;定義RA口,RC口全部為輸出
  MOVLW 20H
  MOVWF TRISB             ;RB口5腳為入,其它全為出
  CLRW
  MOVWF TRISC             ;RC口全為輸出.
  MOVWF OPTION_REG        ;開啟RB口內(nèi)部弱上拉
  BCF STATUS,RP0
;*************************************
LOOP
  CLRF    21H             ;取碼指針
  CLRF    ADR46          ;93C46的地址00H
  MOVLW   04H
  MOVWF   22H             ;4組8個(gè)碼
START
  MOVLW   EWEN            ;寫入使能
  CALL    TO9346
  MOVFW   21H             ;載入取碼指針
  CALL    TABLE           ;至TABLE 取碼
  MOVWF   F5              ;存入"寫入寄存器"
  INCF    21H ,1          ;取下一個(gè)碼
  MOVFW   21H
  CALL    TABLE           ;至TABLE 取碼
  MOVWF   F4
  MOVLW   WRITE          
  CALL    TO9346          ;寫入數(shù)據(jù)
  MOVLW   EWDS
  CALL    TO9346          ;寫禁止
  INCF    21H  ,1         ;取下一個(gè)碼
  INCF    ADR46 ,1        ;取下一個(gè)地址
  CALL    DELAY1
  DECFSZ  22H ,1          ;直到寫完四個(gè)地址
  GOTO    START
  MOVLW   30H             ;存入877A的RAM首地址
  MOVWF   FSR
  CLRF    ADR46           ;93C46的地址00
  MOVLW   04H
  MOVWF   22H             ;讀93C46的四個(gè)地址,8個(gè)碼
;*****************
A1
  MOVLW   READ
  CALL    TO9346          ;讀地址中的數(shù)據(jù)
  MOVFW   F5
  MOVWF   INDF            ;讀出的數(shù)據(jù)存入877A的RAM
  INCF    FSR ,1
  MOVFW   F4
  MOVWF   INDF
  INCF    ADR46 ,1         ;讀下一個(gè)地址
  INCF    FSR ,1
  DECFSZ  22H ,1          ;直到讀完四個(gè)地址
  GOTO    A1
A2
  MOVLW   08H
  MOVWF   22H
  MOVLW   30H             ;RAM 30h-37H 共8個(gè)碼
  MOVWF   FSR
OUTPUT
  MOVFW   INDF
  MOVWF   PORTC           ;輸出結(jié)果到PORTC
  CALL    DELAY1  
  INCF    FSR ,1
  DECFSZ  22H ,1
  GOTO    OUTPUT
  GOTO    A2
;***************************
SREAD
  MOVLW  80H
  ADDWF  ADR46 ,0        ;6位地址加上兩位操作碼,10XXXXXX  讀指令
  CALL   SDT46           ;寫入操作碼與地址
  CALL   RDT46           ;讀高位數(shù)據(jù)
  MOVWF  F5              ;存入F5
  CALL   RDT46           ;讀低位地址             
  MOVWF  F4              ;存入F4
  GOTO   EX9346
;**************************
SWRITE
  MOVLW  40H
  ADDWF  ADR46 ,0       ;6位地址加上兩位操作碼01XXXXXX  寫指令
  CALL   SDT46          ;寫入操作碼及地址
  MOVFW  F5             ;載入數(shù)據(jù)
  CALL   SDT46          ;寫入數(shù)據(jù)
  MOVFW  F4             ;載入數(shù)據(jù)
  CALL   SDT46          ;寫入數(shù)據(jù)
  GOTO   EX9346
;******************************
SEWEN
  MOVLW  30H          ;寫入操作碼0011XXXX  寫使能指令
  CALL   SDT46
  GOTO   EX9346
;******************************
SEWDS
  CLRW            ;寫入0000XXXX寫禁止指令
  CALL   SDT46
;******************************
EX9346
  BCF   PORTB ,CS    ;結(jié)束時(shí)清CS為0
  RETURN
;******************************
SDT46:
  MOVWF  F2          ;將要寫的數(shù)據(jù)送F2
  MOVLW  08H         ;寫入8位數(shù)據(jù)
  MOVWF  F3
SD1:
  RLF    F2 ,1
  BSF    PORTB ,DI
  BTFSS  STATUS ,C
  BCF    PORTB ,DI
  BSF    PORTB ,CLK
  CALL   DELAY
  BCF    PORTB ,CLK
  CALL   DELAY
  DECFSZ  F3 ,1
  GOTO    SD1
  RETURN
;******************************
RDT46
  MOVLW  08H         ;讀出8位數(shù)據(jù)
  MOVWF  F3
RD1
  BSF  PORTB ,CLK
  CALL DELAY
  BCF  PORTB ,CLK
  CALL DELAY
  BSF  STATUS ,C
  BTFSS  PORTB ,DO
  BCF  STATUS ,C
  RLF  F2 ,1
  DECFSZ  F3 ,1
  GOTO  RD1
  MOVFW F2      ;讀得的數(shù)據(jù)送W
  RETURN
;********************************
DELAY
  MOVLW  1FH     ;CLK時(shí)序廷時(shí)
  MOVWF  F7
  DECFSZ F7 ,1
  GOTO $-1
  RETURN
;*******************************
DELAY1              ;廷時(shí)
  MOVLW  .20
  MOVWF  F4
D1
  MOVLW  .40
  MOVWF  F5
D2
  MOVLW  .248
  MOVWF  F6
  DECFSZ F6 ,1
  GOTO  $-1
  DECFSZ F5 ,1
  GOTO   D2
  DECFSZ F4 ,1
  GOTO   D1
  RETURN
;********************************************
       end                   ;源程序結(jié)束
;*****************************************************
  • 上一篇: pic16f877a對(duì)24c01的讀寫程序
  • 下一篇: 877A軟件模擬I2C通信讀寫24C02
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1