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

📄 diagnose_whl.asm

📁 这个可是我用了三个月的结晶
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	MOVLW HIGH TABLE10
	MOVWF PCLATH
	MOVF TEMP,W			;用来计查表量的值
	CALL TABLE10
	MOVWF TEMP_STACK
	CLRF PCLATH
	MOVLW HIGH INIT_PORT
	MOVWF PCLATH
	MOVF TEMP_STACK,W
	CALL WRITE2
	INCF TEMP,F
	DECFSZ COUNT,F
	GOTO DISP_DISP2_LOOP1
	BTFSC FLAG,0		;来判断是否已经完成了一个字
	GOTO DISP_DISP2_END
	INCF PAGEADD,F
	MOVLW .16		
	SUBWF CLMADD,F		;其默认值是多少!
	BSF FLAG,0			;置FLAG0为1
	GOTO DISP_DISP2_LOOP
DISP_DISP2_END
	BCF FLAG,0	
	DECF PAGEADD,F	 ;返回上一页
	DECFSZ TOTAL,F
	GOTO DISP_DISP2_LOOP
	NOP
	NOP
	NOP
	RETURN
;*********************************************************
	RETURN
;************************************************
INIT_PORT
	BCF STATUS,RP1
	BCF STATUS,RP0
	CLRF PORTD		;清除所有的控制口
	CLRF PORTA
	CLRF PORTB
	CLRF PORTC
	CLRF PORTE
	BSF STATUS,RP0	;select bank1
	MOVLW 0X00
	MOVWF TRISD		;initial portd,RE0,RB0,RB1,RA3 as output port!
	BCF TRISC,RW		;;E-RE2,CS1-RB0,CS2-RA3,R/W-RE0,D/I-RE1
	BCF TRISC,DI
	BCF TRISC,E
	BCF TRISB,CS1
	BCF TRISB,CS2
	BCF TRISB,4
	BCF TRISA,1
	BCF TRISA,2
	BCF TRISB,0		;为中断口进入提供条件
	MOVLW 0x87
	MOVWF ADCON1	;config the porta and porte as digital port
	bcf STATUS,RP0	;返回BANK0
	BSF PORTB,CS1
	BSF PORTB,4		;置高为,不复位
	BCF PORTA,1		;关闭数据入口
	BCF PORTA,2		;
;***************************
	CALL DISPOFF1	;E1边初始化
	CALL DISPOFF2	;E2边初始化
	call delay40ms
	call delay40ms
	call delay40ms
	CALL CLEAR1
	CALL CLEAR2
	MOVLW 0XC0
	CALL SEND1		;初始化从0行开始
	CALL SEND2		;初始化从0行开始
	CALL DISPON1
	CALL DISPON2
	call delay40ms	;添加delay40ms消LCD
	call delay40ms
	MOVLW 0XC0
	CALL SEND1		;初始化从0行开始
	CALL SEND2		;初始化从0行开始
;	CALL DISP_INIT	;显示采集显示
	CALL DISP_DISP
	call delay40ms
	call delay40ms
	RETURN
;*****************DISON1***************************************
DISPON1
	MOVLW DISP_ON ;将控制命令放在W中
	CALL SEND1		;送出控制命令
	CALL LCDSTA1	;判断是否空闲
	BANKSEL TRISD
	MOVLW 0XFF 
	MOVWF TRISD
	BANKSEL PORTB
	BSF PORTB,CS1	;CS1=1
	BCF PORTB,CS2	;CS2=0
	BSF PORTC,RW	;R/W=1
	BCF PORTC,DI	;DI=0
	BSF PORTC,E		;E=1,当RW=1,DI=0,在E=1的作用下,状态分别输出到数据总线(DB7~DB0)的相应位
	MOVF PORTD,W	;读入液晶的状态时,需要判断其是否为忙
	MOVWF LCDFLAG	;读入状态并查询
	BTFSC LCDFLAG,5	;判是否关闭ON/OFF=R/W
	GOTO DISPON1	;如果没有关闭则继续关
	RETURN
;*****************DISON2************************************************
DISPON2
	MOVLW DISP_ON ;将控制命令放在W中
	CALL SEND2		;送出控制命令
	CALL LCDSTA2	;判断是否空闲
	BANKSEL TRISD
	MOVLW 0XFF 
	MOVWF TRISD
	BANKSEL PORTB
	BCF PORTB,CS1	;CS1=0
	BSF PORTB,CS2	;CS2=1
	BSF PORTC,RW	;R/W=1
	BCF PORTC,DI	;DI=0
	BSF PORTC,E		;E=1,当RW=1,DI=0,在E=1的作用下,状态分别输出到数据总线(DB7~DB0)的相应位
	MOVF PORTD,W	;读入液晶的状态时,需要判断其是否为忙
	MOVWF LCDFLAG	;读入状态并查询
	BTFSC LCDFLAG,5	;判是否关闭ON/OFF=R/W
	GOTO DISPON2		;如果没有关闭则继续关
	RETURN
;******************DISOFF1*******************************
DISPOFF1
	MOVLW DISP_OFF ;将控制命令放在W中FOR REVISE$$$$
	CALL SEND1		;送出控制命令
	CALL LCDSTA1	;判断是否空闲
	BANKSEL TRISD
	MOVLW 0XFF 
	MOVWF TRISD
	BANKSEL PORTB
	BSF PORTB,CS1	;CS1=1
	BCF PORTB,CS2	;CS2=0
	BSF PORTC,RW	;R/W=1
	BCF PORTC,DI	;DI=0  读数据
	BSF PORTC,E		;E=1,当RW=1,DI=0,在E=1的作用下,状态分别输出到数据总线(DB7~DB0)的相应位
	MOVF PORTD,W	;读入液晶的状态时,需要判断其是否为OFF STATUS
	MOVWF LCDFLAG	;读入状态并查询
	BTFSS LCDFLAG,5	;判是否关闭OFF=1 ON=0
	GOTO DISPOFF1	;如果没有关闭则继续关
	RETURN
;*****************DISOFF2***************************************
DISPOFF2
	MOVLW DISP_OFF ;将控制命令放在W中
	CALL SEND2		;送出控制命令
	CALL LCDSTA2	;判断是否空闲
	BANKSEL TRISD
	MOVLW 0XFF 
	MOVWF TRISD		;置PORTD为输入状态
	BANKSEL PORTB
	BCF PORTB,CS1	;CS1=1
	BSF PORTB,CS2	;CS2=0
	BSF PORTC,RW	;R/W=1
	BCF PORTC,DI	;DI=0 读数据
	BSF PORTC,E		;E=1,当RW=0,DI=0,在E=1的作用下,状态分别输出到数据总线(DB7~DB0)的相应位
	MOVF PORTD,W	;读入液晶的状态时,需要判断其是否为忙
	MOVWF LCDFLAG	;读入状态并查询
	BTFSS LCDFLAG,5	;判是否关闭ON/OFF=R/W
	GOTO DISPOFF2	;如果没有关闭则继续关
	RETURN
;*********************************
CLEAR1				;清屏
	MOVLW 0XB8 		;设置页地址
	MOVWF PAGEADD
	MOVLW 0X08	;
	MOVWF PAGENUM 	;设置总页数
CLR11
	MOVF PAGEADD,W
	CALL SEND1
	MOVLW 0X40		;设置总列数
	MOVWF CLMSUM	;64列
	MOVLW 0X40
	MOVWF CLMADD	;设置起始列
CLR12
	CALL LCDSTA1
	MOVLW 0X00		;写入00H
	CALL WRITE1
	CLRZ
	DECFSZ CLMSUM,F	;本页未清完	
	GOTO CLR12			;返回继续
	INCF PAGEADD,F		;页号增1
	CLRZ
	DECFSZ PAGENUM,F	;8页未清完
	GOTO CLR11			;返回继续
	RETURN
;*********************************
CLEAR2				;清屏
	MOVLW 0XB8 		;设置页地址
	MOVWF PAGEADD
	MOVLW 0X08	;
	MOVWF PAGENUM 	;设置总页数
CLR21
	MOVF PAGEADD,W
	CALL SEND2
	MOVLW 0X40		;设置总列数
	MOVWF CLMSUM	;64列
	MOVLW 0X40
	MOVWF CLMADD	;设置起始列
CLR22
	CALL LCDSTA1
	MOVLW 0X00		;写入00H
	CALL WRITE2
	CLRZ
	DECFSZ CLMSUM,1		;本页未清完	
	GOTO CLR22			;返回继续
	INCF PAGEADD,1		;页号增1                                                          
	CLRZ
	DECFSZ PAGENUM,1	;8页未清完
	GOTO CLR21			;返回继续
	RETURN
;***********************************
SEND2
	MOVWF INTSCODE		;指令暂存INTSCODE
	CALL LCDSTA2
	BANKSEL TRISD		;select bank1
	CLRF TRISD			;set PORTD AS output PORT
	BANKSEL PORTB		;选择BANK0
	BSF PORTC,E     	;E=1
	BCF PORTB,CS1		;CH1=0
	BSF PORTB,CS2		;CH2=1
	BCF PORTC,RW		;R/W=0
	BCF PORTC,DI		;D/I=0 write status register for control
	MOVF INTSCODE,W
	MOVWF PORTD
	BCF PORTC,E			;E=0     在E的下降沿锁存数据
	NOP					;当D/I=0时,在E信号下降沿的作用下,指令码写入IR.
	BSF PORTC,RW		;R/W=1
	RETURN
;*********SEND INSTRUCTION SUB-ROUTINE TO LCD(SAVE CODE IN W REGISTER)
SEND1
	MOVWF INTSCODE		;指令暂存INTSCODE
	CALL LCDSTA1		;to judge the state "busy"???
	BANKSEL TRISD
	CLRF TRISD			;set PORTD AS output PORT

	BANKSEL PORTB		;select bank0
	BSF PORTB,CS1		;CH1=1
	BCF PORTB,CS2		;CH2=0
	BCF PORTC,RW		;R/W=0
	BCF PORTC,DI		;D/I=0 write status register for control
	BSF PORTC,E     	;E=1
	MOVF INTSCODE,W
	MOVWF PORTD
	BCF PORTC,E			;E=0     在E的下降沿锁存数据
	NOP					;当D/I=0时,在E信号下降沿的作用下,指令码写入IR.
	BSF PORTC,RW		;R/W=1
	RETURN
;*********************************************
WRITE1
	MOVWF SBDATA	;将数据暂存SBDATA
	MOVF CLMADD,W	;设置列地址
	CALL SEND1		;写入列地址
	CALL LCDSTA1	;查询液晶是否为忙
	BANKSEL TRISD
	CLRF TRISD		;设置PORTD为输出
	BANKSEL PORTB
	BSF PORTC,E		;E=1,in high level to send data
	BSF PORTC,DI	;RW=0,DI=1	
	BCF PORTC,RW
	BSF PORTB,CS1
	BCF PORTB,CS2
	MOVF SBDATA,W
	MOVWF PORTD
;	BSF PORTB,E		;什么时候为下降沿啊????
	NOP
	BCF PORTC,E		;E=0在下降沿的时候触发写入数据	
;	BSF PORTA,5
	INCF CLMADD,1	;REVISE
;	NOP
	BSF PORTC,RW	
	RETURN
;***********************8
WRITE2
	MOVWF SBDATA	;将数据暂存SBDATA
	MOVF CLMADD,W	;设置列地址
	CALL SEND2		;写入列地址
	CALL LCDSTA2	;查询液晶是否为忙
	BANKSEL TRISD
	CLRF TRISD		;设置PORTD为输出
	BANKSEL PORTB
;	BSF PORTB,E		;E=1,in high level to send data
	BSF PORTC,DI	;RW=0,DI=1	
	BCF PORTC,RW
	BCF PORTB,CS1
	BSF PORTB,CS2
	MOVF SBDATA,W
	MOVWF PORTD
	BSF PORTC,E		;什么时候为下降沿啊????
	NOP
	BCF PORTC,E		;E=0在下降沿的时候触发写入数据	
;	BSF PORTA,5	
	INCF CLMADD,F	;REVISE
;	NOP
	BSF PORTC,RW
	RETURN
;****************************************8
LCDSTA1
	BANKSEL TRISD
	MOVLW 0XFF		;set portd as input state
	MOVWF TRISD
	BANKSEL PORTB	;E-RE2,CS1-RB0,CS2-RA3,R/W-RE0,D/I-RE1
	BSF PORTB,CS1
	BCF PORTB,CS2
	BSF PORTC,RW	;在E信号为“H”的作用下R/W=1,D/I=0情况下读取值
;	BSF PORTB,E		;修改;2005,5,16:19
	BCF PORTC,DI	;读显示数据DI=0
	BSF PORTC,E		;修改;2005,5,16:12
BUSY1
	MOVF PORTD,W
	MOVWF LCDFLAG
	BCF PORTC,E		;修改;2005,5,16:12
	BTFSC LCDFLAG,7	;判断是否处于“BUSY”状态
	GOTO BUSY1		
	RETURN  
;*************************************  
LCDSTA2
	BANKSEL TRISD
	MOVLW 0XFF		;set portd as input state
	MOVWF TRISD
	BANKSEL PORTB	;E-RE2,CS1-RB0,CS2-RA3,R/W-RE0,D/I-RE1
	BCF PORTB,CS1
	BSF PORTB,CS2
	BSF PORTC,RW	;在E信号为“H”的作用下R/W=1,D/I=1情况下读取值
;	BSF PORTB,E
	BCF PORTC,DI	;读显示数据DI=0
	BSF PORTC,E		;修改;2005,5,16:12
BUSY2
	MOVF PORTD,W
	MOVWF LCDFLAG
	BSF PORTC,E		;修改;2005,5,16:12
	BTFSC LCDFLAG,7	;判断是否处于“BUSY”状态
	GOTO BUSY2
	RETURN 
delay40ms
	movlw 0x30
	movwf LOOP1_STACK
loop1	
	movlw 0xF9
	movwf LOOP2_STACK
loop2
	nop
	nop
	decfsz LOOP2_STACK,F
	goto loop2
	decfsz LOOP1_STACK,F
	goto loop1
	return                                                                                                           
;*******************************************************
	ORG 0X1800
TABLE1   ;共256列8个字
	ADDWF PCL,1
;***************CS1,PAGE1********************
 RETLW 0X10 
 RETLW 0X92
 RETLW 0X54
 RETLW 0X38
 RETLW 0XFF
 RETLW 0X38
 RETLW 0X54
 RETLW 0X52
 RETLW 0X80
 RETLW 0XF0
 RETLW 0X1F
 RETLW 0X12
 RETLW 0X10
 RETLW 0XF0
 RETLW 0X10
 RETLW 0X00; "数"的上部分
 RETLW 0X08
 RETLW 0X08
 RETLW 0X08
 RETLW 0XFF
 RETLW 0X88
 RETLW 0X40
 RETLW 0XFE
 RETLW 0X92
 RETLW 0X92
 RETLW 0X92
 RETLW 0XF2
 RETLW 0X92
 RETLW 0X92
 RETLW 0X9E
 RETLW 0X80
 RETLW 0X00; "据"的上部分
 RETLW 0X00
 RETLW 0X02
 RETLW 0X02
 RETLW 0XC2
 RETLW 0X02
 RETLW 0X02
 RETLW 0X02
 RETLW 0X02
 RETLW 0XFE
 RETLW 0X82
 RETLW 0X82
 RETLW 0X82
 RETLW 0X82
 RETLW 0X82
 RETLW 0X02
 RETLW 0X00; "正"的上部分
 RETLW 0X00
 RETLW 0X04
 RETLW 0X04
 RETLW 0XC4
 RETLW 0X64
 RETLW 0X9C
 RETLW 0X87
 RETLW 0X84
 RETLW 0X84
 RETLW 0XE4
 RETLW 0X84
 RETLW 0X84
 RETLW 0X84
 RETLW 0X84
 RETLW 0X04
 RETLW 0X00; "在",的上部分
 RETLW 0X42
 RETLW 0X42
 RETLW 0X2A
 RETLW 0X2E
 RETLW 0X13
 RETLW 0X1A
 RETLW 0X26
 RETLW 0X02
 RETLW 0X40
 RETLW 0X20
 RETLW 0X13
 RETLW 0X0C
 RETLW 0X33
 RETLW 0X60
 RETLW 0X20
 RETLW 0X00 ;"数"的下部分
 RETLW 0X02
 RETLW 0X42
 RETLW 0X81
 RETLW 0X7F
 RETLW 0X40
 RETLW 0X30
 RETLW 0X0F
 RETLW 0XFC;
 RETLW 0X44
 RETLW 0X44
 RETLW 0X47
 RETLW 0X44
 RETLW 0X44
 RETLW 0XFC
 RETLW 0X00
 RETLW 0X00;"据"的下部分
 RETLW 0X20
 RETLW 0X20
 RETLW 0X20
 RETLW 0X3F
 RETLW 0X20
 RETLW 0X20
 RETLW 0X20
 RETLW 0X20
 RETLW 0X3F
 RETLW 0X20
 RETLW 0X20
 RETLW 0X20
 RETLW 0X20
 RETLW 0X20
 RETLW 0X20
 RETLW 0X00;"正"的下部分 
	RETLW 0X04
	RETLW 0X02
	RETLW 0X01
	RETLW 0X7F
	RETLW 0X00
	RETLW 0X20
	RETLW 0X20
	RETLW 0X20
	RETLW 0X20
	RETLW 0X3F
	RETLW 0X20
	RETLW 0X20
	RETLW 0X20
	RETLW 0X20
	RETLW 0X20
	RETLW 0X00;";"在",的下部分
 RETLW 0X40
 RETLW 0X42
 RETLW 0X4C
 RETLW 0XC4
 RETLW 0X00
 RETLW 0X22
 RETLW 0XAA
 RETLW 0XAA;
 RETLW 0XAA
 RETLW 0XBF
 RETLW 0XAA
 RETLW 0XAA
 RETLW 0XAA
 RETLW 0X22
 RETLW 0X20
 RETLW 0X00; "请",的上部分
 RETLW 0X00
 RETLW 0X12
 RETLW 0X92
 RETLW 0X72
 RETLW 0XFF
 RETLW 0X51
 RETLW 0X81
 RETLW 0XF2
 RETLW 0X9C
 RETLW 0X90
 RETLW 0X9F
 RETLW 0X90
 RETLW 0X98
 RETLW 0XF4
 RETLW 0X02
 RETLW 0X00; ;"稍"的上部分
;*************************CS1 PAGE3********************
 RETLW 0X40
 RETLW 0X20
 RETLW 0XF8
 RETLW 0X07
 RETLW 0XF2
 RETLW 0X08
 RETLW 0X0A
 RETLW 0XFA
 RETLW 0X4A
 RETLW 0XCA
 RETLW 0X4A
 RETLW 0X4E
 RETLW 0X4A
 RETLW 0X48
 RETLW 0X08
 RETLW 0X00; "候",的上部分
;腾粗出一个字的空间
 RETLW 0X00
 RETLW 0X00
 RETLW 0X00
 RETLW 0X7F
 RETLW 0X20
 RETLW 0X10
 RETLW 0XFF
 RETLW 0X0A;
 RETLW 0X0A
 RETLW 0X0A
 RETLW 0X4A
 RETLW 0X8A
 RETLW 0X7F
 RETLW 0X00
 RETLW 0X00
 RETLW 0X00;"请",的下部分
 RETLW 0X08
 RETLW 0X06
 RETLW 0X01
 RETLW 0X00
 RETLW 0XFF
 RETLW 0X00
 RETLW 0X00
 R

⌨️ 快捷键说明

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