📄 saa1064t.asm
字号:
;使用器件实例 SAA1064T
;定义LPC932的I2C相关寄存器的定义
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
;定义LPC932的部分特殊寄存器
TRIM DATA 96H
DIVM DATA 95H ;CPU分频设置寄存器
P1M1 DATA 91H
P1M2 DATA 92H
;为软件包定义变量
ACK BIT 10H ;应答标志位
SLA DATA 50H ;器件从地址
SUBA DATA 51H ;器件子地址
NUMBYTE DATA 52H ;读/写的字节数
;使用前定义常量:
SDA EQU P1.3
SCL EQU P1.2
MTD EQU 30H ;发送数据缓冲区首址 (缓冲区30H-3FH)
MRD EQU 40H ;接收数据缓冲区首址 (缓冲区40-4FH)
LEDCON BIT P1.6
;定义器件地址
SAA1064T EQU 70H
PCF8574 EQU 40H
;######################################################################
ORG 0000H
AJMP MAIN
ORG 0080H
;程序功能:
; 对SAA1064进行设置--动态显示,电流等级3,接着显示good字样
MAIN: ;注:由于使用内部7.373MHz振荡器时,软件包使用的I2C速度为123K,但SAA1064只能
;支持100K的速度,所以要进行时钟的分频,以降低总线速度。
MOV DIVM,#2
MOV R7,#0
DJNZ R7,$
;由于上电复位时所用IO口设置为高阻态,所以要进行IO设置
MOV P1M1,#2CH
MOV P1M2,#0CH
CPL LEDCON
MAIN_L1:
MOV R1,#MTD
MOV @R1,#47H ;设置SAA1064工作模式
INC R1
MOV @R1,#6FH ;数字位1显示'g'
INC R1
MOV @R1,#5CH ;数字位2显示'o'
INC R1
MOV @R1,#5CH ;数字位3显示'o'
INC R1
MOV @R1,#5EH ;数字位4显示'd'
MOV R5,#40 ;长延时,使显示"Good"
DISP_LED:
MOV SUBA,#00H
MOV SLA,#SAA1064T
MOV NUMBYTE,#05H
LCALL IWRNBYTE ;调用I2C软件包子程序
MAIN_L2:
MOV R7,#0
MAIN_L3:
MOV R6,#0
DJNZ R6,$
DJNZ R7,MAIN_L3
DJNZ R5,MAIN_L2
MOV SLA,#PCF8574
ACALL IRDBYTE
JB ACK,MAIN_L4
CPL LEDCON
MAIN_L4:
MOV R1,#MTD
MOV @R1,#47H ;设置SAA1064工作模式
INC R1
MOV @R1,#40H ;数字位1显示'-'
INC R1
MOV @R1,#40H ;数字位2显示'-'
INC R1
MOV R7,A
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
MOV R5,#2
SJMP DISP_LED
;共阴字模表
TAB_IO: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,73h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$INCLUDE (HI2C_ASM.INC) ;引入LPC932硬件I2C软件包
END
;#####################################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -