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

📄 16c54.asm

📁 ATMEL AVR 单片机开发套件和大量C和ASM代码工程
💻 ASM
字号:
;************************************************
;*              http://www.sl.com.cn            *                
;*              SL279测试/演示程序              *
;* 此程序为PIC16C54单片机与SL279的接口演示程序  *
;*               程序作者:詹卫前               *
;*  SL279 晶振频率12MHZ   PIC16C54晶振频率4MHZ  *
;************************************************
		TITLE           "SL279 测试"
		LIST            P=16C54
		INCLUDE         P16C5X.INC

BIT_COUNT       SET     0x07
DATA_OUT        SET     0x08
DATA_IN         SET     0x09
TEN             SET     0x0A
TIMER           SET     0X0B
TIMER1          SET     0X0C

CS              EQU     0               ;CS连接于16C54的RA0
CLK             EQU     1               ;CLK连接于16C54的RA1
DAT             EQU     2               ;DAT连接于16C54的RA2
KEY             EQU     3               ;KEY连接于16C54的RA3

		ORG     0X1FF
		GOTO    START
		
		ORG     0
		
;***************************************
; 延时子程序
;***************************************
LONG_DELAY      MOVLW   D'29'           ;设定延时时间为约90uS
		MOVWF   TIMER
DELAY_LOOP      DECFSZ  TIMER,1
		GOTO    DELAY_LOOP
		RETLW   0

SHORT_DELAY     MOVLW   D'2'            ;设定延时时间约为10uS
		MOVWF   TIMER
SHORT_LP        DECFSZ  TIMER,1
		GOTO    SHORT_LP
		RETLW   0

;***************************************
; 发送1个字节到SL279,高位在前
;***************************************
SEND            MOVWF   DATA_OUT        ;待发送数据送入DATA_OUT
		MOVLW   D'8'
		MOVWF   BIT_COUNT       ;设定位计数器=8
		BCF     PORTA,CS        ;设CS为低电平
		CALL    LONG_DELAY      ;长延时
SEND_LOOP       BCF     STATUS,C
		RLF     DATA_OUT,1        ;输出1位
		BCF     PORTA,DAT
		BTFSC   STATUS,C
		BSF     PORTA,DAT
		BSF     PORTA,CLK       ;设CLK为高电平
		CALL    SHORT_DELAY     ;短延时
		BCF     PORTA,CLK       ;设CLK为低电平
		CALL    SHORT_DELAY
		DECFSZ  BIT_COUNT,1       ;检查是否8位均发送完毕
		GOTO    SEND_LOOP       ;未发送完,发送下一位
		BCF     PORTA,DAT
		RETLW   0

;**************************************
; 从SL279接收1个字节,高位在前
;**************************************
RECEIVE         MOVLW   D'8'
		MOVWF   BIT_COUNT       ;设定位计数器=8
		MOVLW   B'11111100'     ;设RA2(DATA)口为输入状态
		TRIS    PORTA
		CALL    LONG_DELAY      ;长延时
RECEIVE_LOOP    BSF     PORTA,CLK       ;置CLK为高电平
		CALL    SHORT_DELAY     ;短延时
		BSF     STATUS,C
		BTFSS   PORTA,DAT
		BCF     STATUS,C
		RLF     DATA_IN,1         ;读取1位数据
		BCF     PORTA,CLK       ;设CLK为低电平
		CALL    SHORT_DELAY
		DECFSZ  BIT_COUNT,1       ;检查是否已接收8位数据
		GOTO    RECEIVE_LOOP
		MOVLW   B'11111000'
		TRIS    PORTA           ;重设RA2(DATA)为输出态
		RETLW   0
		
		
;*******************************************                
; 初始化
;*******************************************
START           MOVLW   B'11111000'     ;I/O口初始化
		TRIS    PORTA
		MOVLW   B'11111001'
		MOVWF   PORTA
		MOVLW   0X30            ;延时约30MS
		MOVWF   TIMER
START_DELAY     MOVLW   0XFF
		MOVWF   TIMER1
START_DELAY1    DECFSZ  TIMER1,1
		GOTO    START_DELAY1
		DECFSZ  TIMER,1
		GOTO    START_DELAY
                MOVLW	B'10111111'	;TEST
                BCF	PORTA,CS
		CALL	SEND
		BSF	PORTA,CS
                MOVLW	0X20
		MOVWF   TEN
LP		MOVLW   0XFF            ;延时约3S
		MOVWF   TIMER
STARTDELAY      MOVLW   0XFF
		MOVWF   TIMER1
STARTDELAY1     DECFSZ  TIMER1,1
		GOTO    STARTDELAY1
		DECFSZ  TIMER,1
		GOTO    STARTDELAY
                DECFSZ	TEN,1
		GOTO 	LP	
		MOVLW   B'10100100'     ;发复位(清除)指令
		BCF     PORTA,CS
		CALL    SEND
		BSF     PORTA,CS        ;恢复CS为高电平
                MOVLW	0X88		
                BCF	PORTA,CS
		CALL	SEND
		MOVLW	0XFE
 		CALL 	SEND
		BSF	PORTA,CS
                MOVLW	0X90		;SNED "_"
                BCF	PORTA,CS
		CALL	SEND
		MOVLW	0X08
 		CALL 	SEND
		BSF	PORTA,CS
;*******************************************
; 主程序
;*******************************************
MAIN            BTFSC   PORTA,KEY       ;检查是否有键按下
		GOTO    MAIN
		MOVLW   B'00010101'     ;有键按下,发读键盘指令
		CALL    SEND            ;发送指令
		CALL    RECEIVE         ;从SL279读入键码
		BSF     PORTA,CS        ;设CS为高电平
;*****************************************
;           发送按键的BCD码到SL279
;*****************************************
OVER            MOVLW   B'10100001'     ;发送2次左移指令,使当前显示内容
		CALL    SEND            ;左移,留出空位供显示新数据
                BSF	PORTA,CS
		MOVLW   B'10100001'
		CALL    SEND
 		BSF	PORTA,CS
		MOVLW   0XC8            ;下载数据且译码(方式1)指令(第0位)
		CALL    SEND
		MOVFW   DATA_IN         
		CALL    SEND
		BSF	PORTA,CS
                MOVLW 	0XF0
		ANDWF	DATA_IN,1
		SWAPF	DATA_IN,1
		MOVLW   0XC9     	;下载数据且译码(方式1)指令(第1位)
		CALL    SEND
		MOVFW   DATA_IN         
		CALL    SEND
		BSF     PORTA,CS        ;置CS=1
WAIT            BTFSS   PORTA,KEY       ;等待按键放开
		GOTO    WAIT
		GOTO    MAIN
		
		END

⌨️ 快捷键说明

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