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

📄 outputchar.asm

📁 完整的PIC学习程序示例 软件功能: RT1602C驱动 UART串口输出
💻 ASM
字号:
;/**************************************************************************
;*                                                                         *
;*         Copyright (c) 2006 by JINRUN Technology Co., Ltd.               *
;*  Title  :    FPPA TM demo board---PIC PARTY
;*  Content:    AD,LCM Drive,Key input,LED flash,etc.,   
;*  MCU    :    PIC16F877A(PIC),PDK80C08(PDK)[FPPA TM]
;*  LCD    :    RT1602C
;*  OSC    :    8MHz(ext. HT) 
;*  WDT    :    OFF                                      
;*  Author :    Raker.Yang                                                 *
;*  FPPA TM 简介:FPPA TM是世界首创的多核心单晶片,所有RAM和ROM却能够共享
;*                目前支持8个核心(8路独立PC,STACK,ACC等)
;*                既然有了独立多核心,跑多任务程序也就更简单了。
;*                更重要的是,它可以非常方便的扩展MCU外围,如,PWM,IIC,UART等。
;*  如果你对FPPA TM技术感兴趣,欢迎访问笔者博客 http://gongkong.gkbk.com
;*  或加入作者QQ:595142970, QQ群25644462
;*  同时欢迎各路商家前来进行方案合作!
;*
;*  声明:本资料仅供个人学习PIC或FPPA TM软件设计参考,任何人都可以转载此资料。
;*        但任何单位或个人都不能将此资料作为商业用品。本资料可能存在一些缺陷,
;*        如果你将本资料用于产品,所引起的一切后果,均由使用者承担
;*                                                                        *
;**************************************************************************/
;	 	   
;-------COMPANY LOGO DISPLAY------------------
COMPANY_LOGO_DISP:
        MOVLW     0x83
        CALL      COMAND_WR  ;定义起始地址
        
        MOVLW     0x00
        MOVWF  	  TEMP0
COMPANY_LOGO_DISP_LOOP:
        MOVF      TEMP0, W
        PAGESEL   TABLE_COMPANY_LOGO
        CALL      TABLE_COMPANY_LOGO
        PAGESEL   $
        MOVWF     TEMP1
        SUBLW     0x20
        BTFSC     STATUS, Z
        GOTO      COMP_LOGO_DISP_END
        MOVF      TEMP1,W
        CALL      DATA_WR
        INCF      TEMP0
        GOTO      COMPANY_LOGO_DISP_LOOP        
COMP_LOGO_DISP_END
        return
;--------COMPANY LOGO DISPLAY END-------------
;
;--------PROJECT LOGO DISPLAY ----------------
PROJECT_LOGO_DISP:
        MOVLW     0xc2
        CALL      COMAND_WR  ;定义起始地址
        MOVLW     0x00
        MOVWF     TEMP0
PROJECT_LOGO_DISP_LOOP:
	MOVF      TEMP0, W
	PAGESEL   TABLE_PROJECT_LOGO
	CALL      TABLE_PROJECT_LOGO
	PAGESEL   $
	MOVWF     TEMP1
	SUBLW     0x20      ;'',空格符
	BTFSC     STATUS, Z
	GOTO      PROJECT_LOGO_DISP_END
	MOVF      TEMP1,W
	CALL      DATA_WR
	INCF      TEMP0
	GOTO      PROJECT_LOGO_DISP_LOOP
PROJECT_LOGO_DISP_END
	return	
;--------PROJECT LOGO DISPLAY END -------------

;--------LCD INITIALIZTION CHARACTER --------
TABLE_COMPANY_LOGO:
	ADDWF  PCL	
	DT "FPPA-TM " 
TABLE_PROJECT_LOGO:
	ADDWF  PCL	
	DT "UART-EXTRA "  
;--------LCD INITIALIZTION CHARACTER END------
;
;--------Title display---------------------------------
;Name		:TITLE_DISP
;Input		:WREG(TABLE SELECT,MAX =1)
;Output		:display on screen ";***FPPA TM DEMO BOARD***
;Temp Reg	:TEMP0,TEMP1,TEMP2(select table register)
;Function	:
;-----------------------------------------------
TITLE_DISP:
	MOVWF   TEMP2
	CLRF    TEMP0
	CLRF    TEMP1
	CALL    ENTER_INPUT
TITLE_DISP_LOOP:
        MOVLW   0x00
        XORWF   TEMP2, W
        BTFSC   STATUS, Z
        GOTO    SELECT_TABLE0
        MOVLW   0x01
        XORWF   TEMP2, W
        BTFSC   STATUS, Z
        GOTO    SELECT_TABLE1
        GOTO    TITLE_DISP_RET
SELECT_TABLE0:        
	MOVF    TEMP0, W	
;	PAGESEL TITLE_TABLE
	CALL    TITLE_TABLE
;	PAGESEL $
        GOTO    TABLE_COM
SELECT_TABLE1:
	MOVF    TEMP0, W
        CALL    TEST_VAL_TABLE
TABLE_COM:                	
	MOVWF   TEMP1
	XORLW   '+'
	BTFSC   STATUS, Z
	GOTO    TITLE_DISP_RET  
	BTFSS   PIR1, TXIF
	GOTO    $-1
	MOVF    TEMP1, W
	MOVWF   TXREG
	MOVLW   0x0c    
	CALL    DELAYTIME    ;delay about 2ms	
	INCF    TEMP0
	GOTO    TITLE_DISP_LOOP	
TITLE_DISP_RET:
	MOVLW   0x0c    
	CALL    DELAYTIME    ;delay about 2ms
        CALL    ENTER_INPUT            
        RETURN
TITLE_TABLE:
	ADDWF   PCL
	DT ";*********FPPA TM DEMO BOARD***************+" 
TEST_VAL_TABLE:
	ADDWF   PCL
	DT ";TEST VOLTAGE =+"	
;-------------TITLE DISPLAY END-------------------------
;	
#if 0
;
;---------GET DISPLAY DATA-----------------
; Name		:GET_DISP_DATA
; Input		:void
; Output	:DISP_DATA
; Temp REG	:void
; Return bank	:bank0
; Function	:Get display data
;-----------------------------
GET_DISP_DATA:
        MOVF     TEMP4, W      ;TEMP4,TEMP5 valid
        ANDLW    0x0f
        MOVWF    DISP_DATA + 1
        SWAPF    TEMP4, W
        ANDLW    0x0f
        MOVWF    DISP_DATA + 0
        MOVF     TEMP5, W
        ANDLW    0x0f
        MOVWF    DISP_DATA + 3
        SWAPF    TEMP5, W
        ANDLW    0x0f
        MOVWF    DISP_DATA + 2
        return
;--------------------------------------
;
;--------OUTPUTDATA_P1-----------------------------------------
;Pistion	:01(start point)
;Input		:none
;Output		:display charactor
;Temp reg	:TEMP0
;Return bank    :0
;Function	:display Port1 data from start point
;display content:"P1=0xXX" 
;--------------------------------------------------------------
OUTPUTDATA_P1:
	MOVLW    0x81
	CALL     COMAND_WR
	MOVLW    'P'
	CALL     DATA_WR
	MOVLW    '1'
	CALL     DATA_WR
	MOVLW    '='
	CALL     DATA_WR
	MOVLW    '0'
	CALL     DATA_WR
	MOVLW    'x'
	CALL     DATA_WR
        MOVF     DISP_DATA + 0, W
        CALL     DATA_WR
        MOVF     DISP_DATA + 1, W
        CALL     DATA_WR
        RETURN
;-------THE END OF OUTPUTDATA_P1------------------------------                     	
;--------LCD_CLR_LINE1 EDN-------------------------------------         
;
;--------OUTPUTDATA_P1-----------------------------------------
;Pistion	:01(start point)
;Input		:none
;Output		:display charactor
;Temp reg	:TEMP0
;Return bank    :0
;Function	:display Port1 data from start point
;display content:"P1=0xXX" 
;--------------------------------------------------------------
OUTPUTDATA_P1:
	MOVLW    0x81
	CALL     COMAND_WR
	MOVLW    'P'
	CALL     DATA_WR
	MOVLW    '1'
	CALL     DATA_WR
	MOVLW    '='
	CALL     DATA_WR
	MOVLW    '0'
	CALL     DATA_WR
	MOVLW    'x'
	CALL     DATA_WR
	MOVF     DISP_DATA + 0, W
        CALL     DATA_WR
        MOVF     DISP_DATA + 1, W
        CALL     DATA_WR
        RETURN
;-------THE END OF OUTPUTDATA_P1------------------------------ 
;
#endif	
;-------ONE NIDDLE HEX CHARACTOR CONVERT------------------------
;Name		:HEX_OUTPUT
;Input		:W(one niddle hex )
;Output		:W(acsii charactor)
;Temp REG	:TEMP0
;Function	:ONE BYTE HEX CHARACTOR
;------------------------------------------------------
HEX_OUTPUT:
	MOVWF   TEMP0
	SUBLW   0x09
	BTFSS   STATUS, C
	GOTO    SENT_CHARACTOR
	MOVF    TEMP0, W
	ADDLW   0x30
	GOTO    SENT_DISPDATA
SENT_CHARACTOR:
	MOVF    TEMP0, W
	ADDLW   0x37
SENT_DISPDATA:		
	RETURN
;-------THE END OF ONE NIDDLE HEX CHARACTOR CONVERT-----	
;
;-------LCD_CLR_LINE1----------------------------------------
; Name		:LCD_CLR_LINE1 
; Input		:void
; Output	:
; Temp REG	:TEMP14
; Return bank	:bank0
; Function	:Clear all charactor in first line on LCD 
;-----------------------------  
LCD_CLR_LINE1:
	CLRF     TEMP14
	MOVLW    0x80
	CALL     COMAND_WR
CLR_LINE1_LOOP:
        MOVLW    ' '
        CALL     DATA_WR
        INCF     TEMP14
        MOVF     TEMP14, W
        XORLW    0x10
        BTFSS    STATUS, Z
        GOTO     CLR_LINE1_LOOP
        RETURN
;--------LCD_CLR_LINE1 EDN------------------------------------- 
;
;-------LCD_CLR_LINE2----------------------------------------
; Name		:LCD_CLR_LINE1 
; Input		:void
; Output	:
; Temp REG	:TEMP14
; Return bank	:bank0
; Function	:Clear all charactor in first line on LCD 
;-----------------------------  
LCD_CLR_LINE2:
	CLRF     TEMP14
	MOVLW    0xc0
	CALL     COMAND_WR
CLR_LINE2_LOOP:
        MOVLW    ' '
        CALL     DATA_WR
        INCF     TEMP14
        MOVF     TEMP14, W
        XORLW    0x10
        BTFSS    STATUS, Z
        GOTO     CLR_LINE2_LOOP
        RETURN
;--------LCD_CLR_LINE1 EDN-------------------------------------
;
;--------LCD_DRIVE---------------------------------------------
;Name		:LCD_DRIVE
;Input		:
;Output		:
;Temp REG	:
;Function	:根据不同的状态模式,输出LCD显示信息 
;-------------------------------------------------------
LCD_DRIVE:
	BCF     TIMER_FLAG, LCD_DRIVE_FLAG
	BTFSS   LCD_DRV_REQ, G_LCD_DRV_REQ
	GOTO    LCD_DRIVE_RET
        BTFSS   SYS_STATUS, UART_SENT_EN
        GOTO	CHECK_RECEIVE_REQ
	BTFSC   LCD_DRV_REQ, S_LCD_DRV_REQ
	GOTO    SENT_DATA_LCD_DRV
CHECK_RECEIVE_REQ:	
	BTFSC   LCD_DRV_REQ, R_LCD_DRV_REQ
	GOTO    RECEIVE_DATA_LCD_DRV
	BCF     LCD_DRV_REQ, G_LCD_DRV_REQ
LCD_DRIVE_RET:
	RETURN
SENT_DATA_LCD_DRV:
;"  SEND MODE     "
;" TX=0xXX to PX  "
        BCF     LCD_DRV_REQ, S_LCD_DRV_REQ 
;	CALL    LCD_CLR
	MOVLW   0x80
	CALL    COMAND_WR
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   'S'
	CALL    DATA_WR
	MOVLW   'E'
	CALL    DATA_WR
	MOVLW   'N'
	CALL    DATA_WR
	MOVLW   'D'
	CALL    DATA_WR
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   'M'
	CALL    DATA_WR
	MOVLW   'O'
	CALL    DATA_WR
	MOVLW   'D'
	CALL    DATA_WR
	MOVLW   'E'
	CALL    DATA_WR
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR			
	;
	MOVLW   0xC0
	CALL    COMAND_WR
	MOVLW   ' '
	CALL    DATA_WR		
	MOVLW   'T'
	CALL    DATA_WR
	MOVLW   'X'
	CALL    DATA_WR
	MOVLW   '='
	CALL    DATA_WR
	MOVLW   '0'
	CALL    DATA_WR
	MOVLW   'x'
	CALL    DATA_WR
	MOVF    DISP_DATAS + 0, W
	CALL    DATA_WR
	MOVF    DISP_DATAS + 1, W
	CALL    DATA_WR
	MOVLW   ' '
	CALL    DATA_WR
	MOVLW   't'
	CALL    DATA_WR
	MOVLW   'O'
	CALL    DATA_WR
	MOVLW   ' '
	CALL    DATA_WR
	MOVLW   'P'
	CALL    DATA_WR
	MOVF    MODE_REG, W
	ANDLW   0x0F
	ADDLW   0x01
	CALL    HEX_OUTPUT
	CALL    DATA_WR
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR			
	GOTO    LCD_DRIVE_RET		
;-------
RECEIVE_DATA_LCD_DRV:
;"R1=0xXX         "
;"R2=0xXX R3=0xXX "
	BCF    LCD_DRV_REQ, R_LCD_DRV_REQ
;	CALL   LCD_CLR
        MOVLW  0x80
        CALL   COMAND_WR
        MOVLW  'R'
        CALL    DATA_WR
        MOVLW  '1'
        CALL    DATA_WR
        MOVLW  '='
        CALL    DATA_WR
        MOVLW  '0'
        CALL    DATA_WR
        MOVLW  'x'
        CALL    DATA_WR
        SWAPF   RX_DATA1, W        
        ANDLW   0x0F
        CALL    HEX_OUTPUT
        CALL    DATA_WR
        MOVF    RX_DATA1, W
        ANDLW   0x0F
        CALL    HEX_OUTPUT
        CALL    DATA_WR
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR	
	MOVLW   ' '
	CALL    DATA_WR			        
;
        MOVLW  0xC0
        CALL   COMAND_WR
        MOVLW  'R'
        CALL    DATA_WR
        MOVLW  '2'
        CALL    DATA_WR
        MOVLW  '='
        CALL    DATA_WR
        MOVLW  '0'
        CALL    DATA_WR
        MOVLW  'x'
        CALL    DATA_WR
        SWAPF   RX_DATA2, W        
        ANDLW   0x0F
        CALL    HEX_OUTPUT
        CALL    DATA_WR
        MOVF    RX_DATA2, W
        ANDLW   0x0F
        CALL    HEX_OUTPUT
        CALL    DATA_WR
        MOVLW   ' '
        CALL    DATA_WR
 ;

        MOVLW  'R'
        CALL    DATA_WR
        MOVLW  '3'
        CALL    DATA_WR
        MOVLW  '='
        CALL    DATA_WR
        MOVLW  '0'
        CALL    DATA_WR
        MOVLW  'x'
        CALL    DATA_WR
        SWAPF   RX_DATA3, W        
        ANDLW   0x0F
        CALL    HEX_OUTPUT
        CALL    DATA_WR
        MOVF    RX_DATA3, W
        ANDLW   0x0F
        CALL    HEX_OUTPUT
        CALL    DATA_WR 
        MOVLW   ' '
        CALL    DATA_WR
        GOTO    LCD_DRIVE_RET       
        	
 	
	
	              
		
	
	       

⌨️ 快捷键说明

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