?? mspi.asm.bak
字號:
; SPI主機
; 使用LPC932的SPI總線和從機進行通訊。
; 向從機發(fā)送讀數(shù)據(jù)命令(讀從機RAM的內(nèi)容),然后讀出數(shù)據(jù)并顯示輸出。
; 定義LPC932的部分特殊寄存器
TRIM DATA 96H
DIVM DATA 95H ; CPU分頻設(shè)置寄存器
P1M1 DATA 91H
P1M2 DATA 92H
P2M1 DATA 0A4H
P2M2 DATA 0A5H
SPCTL DATA 0E2H ; SPI設(shè)置寄存器
SPSTAT DATA 0E1H ; SPI狀態(tài)寄存器
SPDAT DATA 0E3H ; SPI數(shù)據(jù)寄存器
CS_SLA BIT P2.4 ; 從機片選
LEDCON BIT P1.6
; 定義LPC932的I2C相關(guān)寄存器的定義
I2ADR DATA 0DBH
I2DAT DATA 0DAH
I2CON DATA 0D8H
I2STAT DATA 0D9H
I2SCLH DATA 0DDH
I2SCLL DATA 0DCH
STA BIT I2CON.5
SI BIT I2CON.3
;為平臺定義變量
ACK BIT 10H ; 應(yīng)答標志位
SLA DATA 50H ; 器件從地址
SUBA DATA 51H ; 器件子地址
NUMBYTE DATA 52H ; 讀/寫的字節(jié)數(shù)
; 使用前定義常量:
SDA EQU P1.3
SCL EQU P1.2
MTD EQU 30H ; 發(fā)送數(shù)據(jù)緩沖區(qū)首址 (緩沖區(qū)30H-3FH)
MRD EQU 30H ; 接收數(shù)據(jù)緩沖區(qū)首址 (緩沖區(qū)30H-3FH)
; 定義器件地址
SAA1064T EQU 70H
PCF8574 EQU 40H
;######################################################################
ORG 0000H
AJMP MAIN
ORG 0080H
; 程序功能:
; 對SAA1064進行設(shè)置--動態(tài)顯示,電流等級3,接著顯示good字樣
MAIN: MOV DIVM,#2
MOV R7,#0
DJNZ R7,$
; 由于上電復位時所用IO口設(shè)置為高阻態(tài),所以要進行IO設(shè)置
MOV P1M1,#2CH
MOV P1M2,#0CH
MOV P2M1,#00H
MOV P2M2,#00H
CPL LEDCON
MOV A,#MSTRMODE ; 初化硬件SPI接口
ACALL SETSPI
MAIN_L1:
MOV R1,#MTD
MOV @R1,#47H ; 設(shè)置SAA1064工作模式
INC R1
MOV @R1,#6FH ; 數(shù)字位1顯示'g'
INC R1
MOV @R1,#5CH ; 數(shù)字位2顯示'o'
INC R1
MOV @R1,#5CH ; 數(shù)字位3顯示'o'
INC R1
MOV @R1,#5EH ; 數(shù)字位4顯示'd'
MOV R5,#40 ; 長延時,使顯示"Good"
DISP_LED:
MOV SUBA,#00H
MOV SLA,#SAA1064T
MOV NUMBYTE,#05H
LCALL IWRNBYTE ; 調(diào)用I2C軟件包子程序
MAIN_L2:
MOV R7,#0 ; 軟件延時
MAIN_L3:
MOV R6,#0
DJNZ R6,$
DJNZ R7,MAIN_L3
DJNZ R5,MAIN_L2
MOV SLA,#PCF8574 ; 讀取拔碼開關(guān)的值
ACALL IRDBYTE
JB ACK,MAIN_L4
CPL LEDCON
MAIN_L4:
CLR CS_SLA
MOV R7,A ; 保存要讀取的地址
ACALL MSEND_DAT ; 發(fā)送要讀取的地址給從機,并取出上一次要讀出的數(shù)據(jù)
SETB CS_SLA ; SS=1,使從機能夠發(fā)送數(shù)據(jù)(從機寫數(shù)據(jù)入SPDAT)。
MOV R6,A
MOV R1,#MTD ; 顯示緩沖區(qū)設(shè)置
MOV @R1,#47H ;設(shè)置SAA1064工作模式
INC R1
MOV A,R7 ; 第1、2顯示位,顯示操作地址
MOV DPTR,#TAB_IO
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
INC R1
MOV A,R7
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
INC R1
MOV A,R6 ; 第3、4顯示位,顯示所讀出的數(shù)據(jù)
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
INC R1
MOV A,R6
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
MOV R5,#10
SJMP DISP_LED
; 共陰字模表
TAB_IO: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,73h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$INCLUDE (LPC932SPI.INC)
$INCLUDE (HI2C_ASM.INC) ; 引入LPC932硬件I2C軟件包
END
;#####################################################################
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -