⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.asm.txt

📁 本程序用于测试LED显示/键盘芯片SD7218的功能
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;===============================================================================
;  SD7218M VER1.0
;    本程序用于测试LED显示/键盘芯片SD7218的功能
;    程序功能如下:
;
;       注: 单片机是AT89C51,外晶振为12Mhz,在兴威帆公司的SD7218评估板上运行
;       Last update:2003/05/09
;       本程序仅供参考,如有问题请联系:陈工?0755-83246178,83220794,fax:83225561
;       13922865036   chendw@whwave.com.cn  http://www.whwave.com.cn
;===============================================================================
;define the general register
;LED寄存器
        DIG1    EQU     20H             ;LED第一位缓冲器
        DIG2    EQU     21H             ;
        DIG3    EQU     22H             ;
        DIG4    EQU     23H             ;
        DIG5    EQU     24H             ;
        DIG6    EQU     25H             ;
        DIG7    EQU     26H             ;
        DIG8    EQU     27H
        FLAG    EQU     28H             ;通用标志寄存器
                                        ;BIT0=1, ACK ERR
                                        ;BIT0=0 ,ACK OK
        YEAR    EQU     30H             ;年
        MONTH   EQU     31H             ;月
        DAY     EQU     32H             ;日
        WEEK    EQU     33H             ;星期
        HOUR    EQU     34H             ;小时
        MINUTE  EQU     35H             ;分钟
        SECOND  EQU     36H             ;秒
;单片机与实时时钟间通信寄存器
        TIMETEMP        EQU     2EH     ;时间数据缓存器
        TIMETX          EQU     43H     ;时间数据发送寄存器
        TIMERX          EQU     44H     ;时间数据接收寄存器
;单片机与IIC通信寄存器
        IICTEMP         EQU     2FH     ;IIC标志寄存器
        SLAVE_ADD       EQU     40H     ;SD7218地址寄存器
        DATAI1          EQU     41H
        DATAI2          EQU     42H
        TXBUF           EQU     47H     ;IIC数据发送寄存器
        RXBUF           EQU     48H     ;IIC数据接收寄存器
        KEYBUF          EQU     49H     ;键盘数据缓冲器


;---------------------------------------------------------------------------
;define port bit
;各通信口位代号
        SDA     EQU     P2.3            ;IIC的SDA口线
        SCL     EQU     P2.4            ;IIC的SCL口线
        KEY     EQU     P2.5            ;键盘中断信号线
        T_SDA   EQU     P1.1            ;sd2000的SDA口线
        T_SCL   EQU     P1.0            ;sd2000的SCL口线
;===========================================================================
;			*** IIC命令定义 ***
;===========================================================================

	COMMAND_RESET				EQU	68H
	COMMAND_TEST	 			EQU	6AH
	COMMAND_SHIFT_LEFT	              	EQU	61H
	COMMAND_SHIFT_RIGHT	  	        EQU	62H
	COMMAND_SHIFT_ROUND_LEFT         	EQU	63H
	COMMAND_SHIFT_ROUND_RIGHT	        EQU	64H
	COMMAND_UPDATE_DISP_DECODE              EQU	40H
	COMMAND_UPDATE_DISP		        EQU	50H
	COMMAND_FLASH_CONTROL	         	EQU	78H
	COMMAND_HIDE_CONTROL		        EQU	79H
	COMMAND_SEGMENT_ON	  	        EQU	08H
	COMMAND_SEGMENT_OFF 	        	EQU	09H
	COMMAND_READ_KEY_VALUE	                EQU	10H
	COMMAND_RW_RAM_VALUE		        EQU	80H
        COMMAND_LED_HEXS_WR                     EQU     40H
;===========================================================================
;			*** 常数定义 ***
;===========================================================================
        SLAVE1_RD                               EQU     57H
        SLAVE1_WR                               EQU     56H
        SLAVE2_RD                               EQU     51H
        SLAVE2_WR                               EQU     50H
;===========================================================================

        ORG     0000H                   ;RESET
        LJMP    START

;---------------------------------------------------------------------------

        ORG     0100H
START:
        CLR     A                       ;开始初始化各寄存器
        MOV     IE,A                    ;关中断
        MOV     SP,#60H                 ;定义堆栈
        CLR     FLAG                    ;清除标志位
        LCALL   INIT_LEDBUF             ;初始化LED数据缓冲器
LED_TIME:
        MOV     SLAVE_ADD,#SLAVE2_WR
        LCALL   WRITE_LED8              ;写8个16进制数至sd7218(命令2:多字节下载数据且译码)
WAIT_KEY:
        LCALL   READ_TIME
        LCALL   BCD_LED
        NOP
        SETB    KEY
        NOP
        JB      KEY,LED_TIME            ;等待SD7218的键盘输入信号

;-----------------------------------------------------------------
GET_KEY:

        MOV     SLAVE_ADD,#SLAVE1_RD
        LCALL   READ_KEY                ;读SD7218内的键值
        MOV     A,KEYBUF
        CJNE    A,#31H,SHIFT_ROUND_LEFT_KEY
        MOV     SLAVE_ADD,#SLAVE1_WR
        MOV     DATAI1,#COMMAND_SHIFT_ROUND_RIGHT
        LCALL   WRITE_BYTE
SHIFT_ROUND_LEFT_KEY:
        MOV     A,KEYBUF
        CJNE    A,#32H,WAIT_KEY_RELEASE
        MOV     SLAVE_ADD,#SLAVE1_WR
        MOV     DATAI1,#COMMAND_SHIFT_ROUND_LEFT
        LCALL   WRITE_BYTE
WAIT_KEY_RELEASE:
        JNB     KEY,WAIT_KEY_RELEASE
BREAKPOINT1:    NOP                     ;设断点
	JMP	WAIT_KEY



;==================读键值子程序===========================================
;功能:                                                                  |
;入口:NONE                                                              |
;出口:          						         |
;影响资源:       							 |
;==========================================================================
READ_KEY:
	LCALL	IICSTART
        JB      FLAG.1,ERR_IICSTOP      ;如SDA线被箝位为低电平则退出
        MOV     A,SLAVE_ADD
	MOV	TXBUF,A                 ;送SD7218地址
	LCALL	SENDH_L
        JB      FLAG.0,ERR_IICSTOP      ;ACK信号不正常则退出.
        MOV     TXBUF,#COMMAND_READ_KEY_VALUE
        LCALL   SENDH_L                 ;送读键命令
RD_KEY1:
	LCALL	RXH_L
	MOV	A,RXBUF
        MOV     KEYBUF,A
RD_KEY2:
        CALL    NOACK
        LCALL   IICSTOP
RD_KEY_RET:
        RET

ERR_IICSTOP:
        LCALL   IICSTOP
        RET

;======================写8个LED8数据程序====================================
;功能:        							           |
;入口:                  						   |
;出口:NONE                                                                |
;影响资源:        						           |
;===========================================================================
WRITE_LED8:
	LCALL	IICSTART
        JNB     FLAG.1,LED8_WRITE_1
        LJMP    ERR_IICSTOP             ;SDA线被箝位为低电平则退出
LED8_WRITE_1:
        MOV     A,SLAVE_ADD
	MOV	TXBUF,A                 ;送SD7218地址
	LCALL	SENDH_L
        JNB     FLAG.0,LED8_WRITE_2
        LJMP    ERR_IICSTOP             ;ACK信号不正常则退出?
LED8_WRITE_2:
        MOV     TXBUF,#COMMAND_LED_HEXS_WR
        LCALL   SENDH_L                 ;送多字节下载数据且译码命令
        MOV     R0,#DIG1
	MOV	R1,#08H
LED8_WRITE_3:
        MOV	A,@R0
	MOV	TXBUF,A
	LCALL	SENDH_L
	INC	R0
	DJNZ	R1,LED8_WRITE_3
	LCALL	IICSTOP
	RET

;======================写单个BYTE数据程序=================================
;功能:      							         |
;入口:                  						 |
;出口:NONE                                                              |
;影响资源:        					            	 |
;=========================================================================
WRITE_BYTE:
	LCALL	IICSTART
        JNB     FLAG.1,BYTE_WRITE_1
        LJMP    ERR_IICSTOP             ;SDA线被箝位为低电平则退出
BYTE_WRITE_1:
        MOV     A,SLAVE_ADD
	MOV	TXBUF,A                 ;送SD7218地址
	LCALL	SENDH_L
        JNB     FLAG.0,BYTE_WRITE_2
        LJMP    ERR_IICSTOP             ;ACK信号不正常则退出?
BYTE_WRITE_2:
        MOV     A,DATAI1
        MOV     TXBUF,A
        LCALL   SENDH_L                 ;送单字节命令
	LCALL	IICSTOP
	RET
;============================ACK===========================================
;功能:延时         入口:NONE             出口:NONE                     |
;影响资源:                                                               |
;==========================================================================
ACK:    CLR      IICTEMP.1
        LCALL    BITOUT
        RET

;============================ACK===========================================
;功能:延时         入口:NONE             出口:NONE                     |
;影响资源:                                                               |
;==========================================================================
NOACK:  SETB     IICTEMP.1
        LCALL    BITOUT
        RET

;===============================保存错误代码===============================
;功能:保存MCU与IIC接口通信时的错误状态                                   |
;入口:IICTEMP.0=ACK位值?                                                |
;出口:FLAG.0 =错误代码                                                   |
;==========================================================================
ACK_ERR:
        JNB     IICTEMP.0,ACK_ERR_RET  ;检查ACK信号是否正常
        SETB    FLAG.0                  ;置ACK出错标志位
ACK_ERR_RET:
        RET
;===============================启用IIC总线================================
;功能:开启实时时钟的IIC总线
;入口:NONE       出口:NONE
;影响资源:NONE
;==========================================================================
IICSTART:
        CLR     FLAG.1
	SETB	SDA
	SETB	SCL
	LCALL	DELAY
        JB      SDA,IIC_SDAHI
        SETB    FLAG.1
IIC_SDAHI:
	CLR	SDA
        LCALL   DELAY
	CLR	SCL
        LCALL    DELAY
        RET
;===============================关闭IIC总线================================
;功能:关闭实时时钟IIC总线
;入口:NONE       出口:NONE
;影响资源:NONE
;==========================================================================
IICSTOP:CLR	SDA
	SETB	SCL
	LCALL	DELAY
	SETB	SDA
	LCALL	DELAY
	RET
;============================发送一个字节,由高位到低位发送================
;功能:从MCU发送一个字节给实时时钟,由高位到低位发送                        |
;入口:发送数据放在TXBUF          出口:NONE                              |
;影响资源:A,R2,TXBUF                                                   |
;==========================================================================
SENDH_L:MOV	A,TXBUF
	MOV	R2,#08H
        CLR     FLAG.0
SENDH_L1:
        MOV	C,ACC.7
        MOV	IICTEMP.1,C
	LCALL	BITOUT
	RL	A
	DJNZ	R2,SENDH_L1
        LCALL   BITIN
        LCALL   ACK_ERR
        RET


;=================================接收一个字节=============================
;功能:MCU从IIC总线接收一个字节,MSB在前,LSB在后                           |
;入口:NONE          出口:接收数据放在RXBUF中                            |
;影响资源:A,R2,TIMEBIT,RXBUF                                          |
;==========================================================================
RXH_L:	MOV	R2,#08H
RXH_L1: LCALL	BITIN
        MOV	C,IICTEMP.0
        MOV	ACC.7,C
	RLC	A
	DJNZ	R2,RXH_L1
        MOV     RXBUF ,A
        RET
;=================================接收一个字节=============================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -