• <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    技術(shù)熱線: 4007-888-234
    設(shè)計開發(fā)

    專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

    開發(fā)工具

    提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

    技術(shù)支持

    從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

    新品推廣

    提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

    新聞中心

    提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

    實戰(zhàn)十一:87X軟件模擬SPI方式讀寫93C46

    更新時間: 2019-03-25
    閱讀量:1107

    87X軟件模擬SPI方式讀寫93C46
    ;1.做一個燈的左移,將左移的8個碼建于TABLE中.
    ;2.從TABLE中取出數(shù)據(jù)并以16位的方式存入93C46中,地址00H-03H.
    ;3.將93C46的00H-03H地址中的數(shù)據(jù)碼取出并存入877A的RAM(30H)-(37H),并輸出至877A的RC口.
    ;當(dāng)斷電再復(fù)電,數(shù)據(jù)碼不會消失.
    ;4.本電路所使用93C46為ATMEL或MICROCHIP的,或不是該廠的,則燒寫時間會有差異
    ;必須調(diào)整本程序的DELAY時間
    ;本實戰(zhàn)的目的是讓大家進(jìn)上步熟悉SPI通信的時序,熟悉93C46的讀寫,會用軟件模擬SPI通信
    ;硬件接法:
    ;1.93C46的CS接877A的RB1口;CLK接877A的RB2口;DI接877A的RB4口;DO接877A的RB5口;93C46的ORG端接VCC,使93C46工作于16位方式
    ;2.實驗本實驗須將MCD-DEMO實驗板上的24CXX系列芯片先取下,在實驗過程中不要按動同樣接在RB口的按鍵,以免影響通信時序.
    ;3.實驗板上拔碼開關(guān)S1要置ON,其它拔碼開關(guān)都可以關(guān)閉。
    ;程序文件名&ldquo;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一個燈左移
      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個碼
    START
      MOVLW   EWEN            ;寫入使能
      CALL    TO9346
      MOVFW   21H             ;載入取碼指針
      CALL    TABLE           ;至TABLE 取碼
      MOVWF   F5              ;存入"寫入寄存器"
      INCF    21H ,1          ;取下一個碼
      MOVFW   21H
      CALL    TABLE           ;至TABLE 取碼
      MOVWF   F4
      MOVLW   WRITE          
      CALL    TO9346          ;寫入數(shù)據(jù)
      MOVLW   EWDS
      CALL    TO9346          ;寫禁止
      INCF    21H  ,1         ;取下一個碼
      INCF    ADR46 ,1        ;取下一個地址
      CALL    DELAY1
      DECFSZ  22H ,1          ;直到寫完四個地址
      GOTO    START
      MOVLW   30H             ;存入877A的RAM首地址
      MOVWF   FSR
      CLRF    ADR46           ;93C46的地址00
      MOVLW   04H
      MOVWF   22H             ;讀93C46的四個地址,8個碼
    ;*****************
    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         ;讀下一個地址
      INCF    FSR ,1
      DECFSZ  22H ,1          ;直到讀完四個地址
      GOTO    A1
    A2
      MOVLW   08H
      MOVWF   22H
      MOVLW   30H             ;RAM 30h-37H 共8個碼
      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é)束時清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時序廷時
      MOVWF  F7
      DECFSZ F7 ,1
      GOTO $-1
      RETURN
    ;*******************************
    DELAY1              ;廷時
      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é)束
    ;*****************************************************
    ;    進(jìn)入該實戰(zhàn)演練的工序流程如下:
    ;    1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的&rdquo;記事本&rdquo;
    ;   這個為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點需要注意,一是注釋前面的
    ;   分號&rdquo;;&rdquo;必須用西文半角輸入;二是必須用&rdquo;.asm&rdquo;擴展名存儲到事先建立的一個專用子目錄下.
    ;    2.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動MPLAB
    ;   并進(jìn)入MPLAB的桌面.
    ;    3.創(chuàng)建項目:選用菜單File>New或Project>New Project,在事先建立的一個專用子目錄下創(chuàng)建一個新項目,將
    ;   用記事本創(chuàng)建的源文件加入到該項目中.
    ;    4.建立項目中的目標(biāo)文件:選擇菜單Project >Build All(項目>建立所有文件),MPLAB將自動調(diào)用MPASM將項目
    ;   文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).


    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频
  • <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>