?? 1.txt
字號:
;功能說明:
;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)斷電再復(fù)電,數(shù)據(jù)碼不會消失.
;4.本電路所使用93C46為ATMEL或MICROCHIP的,或不是該廠的,則燒寫時(shí)間會有差異
;必須調(diào)整本程序的DELAY時(shí)間
;本實(shí)戰(zhàn)的目的是讓大家進(jìn)上步熟悉SPI通信的時(shí)序,熟悉93C46的讀寫,會用軟件模擬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)過程中不要按動(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)載請注明出處,并不能去掉或改變文件中的說明文字。
;程序文件名“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é)束
;*****************************************************
; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:
; 1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點(diǎn)需要注意,一是注釋前面的
; 分號”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲到事先建立的一個(gè)專用子目錄下.
; 2.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB
; 并進(jìn)入MPLAB的桌面.
; 3.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將
; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中.
; 4.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目
; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -