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

📄 rs232lcd.sdi

📁 proteus 仿真实例
💻 SDI
字号:
,,,; Simple PIC 16F877X Program to drive Serial LCDs.
,,,; Assumes 1MHZ CPU clock, 2400 baud rate for the LCD.
,,,
,,,           LIST    p=16F874
,,,           #include "P16F874.INC"
,,,
,,,           ; Counter variables for delay
,,,           cblock 0x20
,,,               char,cmd,lc1,lc2;
,,,           endc
,,,
,,,           ; Vector for normal start up.
,,,           org     0
0000,2805,,           goto    start
,,,
,,,           org     4
0004,2869,,           goto    inthlr
,,,
,,,; Main program starts here:
0005,0103,start,start      clrw                    ; Clear W.
0006,0085,,           movwf   PORTA           ; Ensure PORTA is zero before we enable it.
0007,0086,,           movwf   PORTB           ; Ensure PORTB is zero before we enable it.
,,,
,,,           ; Set up ports:
0008,1283,,           bcf     STATUS,RP0      ; Select Bank 0
0009,1798,,           bsf     RCSTA,SPEN      ; Enable USART.
000A,1618,,           bsf     RCSTA,CREN      ; Enable Receeive
000B,1683,,           bsf     STATUS,RP0      ; Select Bank 1
000C,0103,,           clrw                    ; Set W to mask for all outputs.
000D,0085,,           movwf   TRISA           ; Set TRISA register as outputs.
000E,0086,,           movwf   TRISB           ; Set TRISB register as outputs.
000F,3019,,           movlw   0x19            ; BRG value for 2400 baud @ 1MHz
0010,0099,,           movwf   SPBRG           ; Write it to register.
0011,30A4,,           movlw   0xA4            ; CSRC/TXEN (Internal clock, 8 bit mode, Async operation, High Speed)
0012,0098,,           movwf   TXSTA           ; Write to TX control register.
,,,
0013,3080,,           movlw   80
0014,2060,,           call    delay
,,,
0015,304D,,           movlw   'M'             ; Value to transmit.
0016,2058,,           call    putc
0017,3069,,           movlw   'i'             ; Value to transmit.
0018,2058,,           call    putc
0019,306C,,           movlw   'l'             ; Value to transmit.
001A,2058,,           call    putc
001B,3066,,           movlw   'f'             ; Value to transmit.
001C,2058,,           call    putc
001D,306F,,           movlw  'o'              ; Value to transmit.
001E,2058,,           call    putc
001F,3072,,           movlw  'r'              ; Value to transmit.
0020,2058,,           call    putc
0021,3064,,           movlw  'd'              ; Value to transmit.
0022,2058,,           call    putc
0023,3020,,           movlw  ' '              ; Value to transmit.
0024,2058,,           call    putc
0025,304C,,           movlw  'L'              ; Value to transmit.
0026,2058,,           call    putc
0027,3043,,           movlw  'C'              ; Value to transmit.
0028,2058,,           call    putc
0029,3044,,           movlw  'D'              ; Value to transmit.
002A,2058,,           call    putc
002B,3020,,           movlw  ' '              ; Value to transmit.
002C,2058,,           call    putc
002D,3044,,           movlw  'D'              ; Value to transmit.
002E,2058,,           call    putc
002F,3065,,           movlw  'e'              ; Value to transmit.
0030,2058,,           call    putc
0031,306D,,           movlw  'm'              ; Value to transmit.
0032,2058,,           call    putc
0033,306F,,           movlw  'o'              ; Value to transmit.
0034,2058,,           call    putc
,,,
0035,30C0,,           movlw  0xC0             ; Move cursor to row two
0036,204D,,           call   wrcmd
,,,
0037,300D,,           movlw  0x0D             ; Show the cursor
0038,204D,,           call   wrcmd
,,,
0039,2052,loop,loop       call  getc
003A,00A0,,           movwf char
003B,3C0D,,           sublw 0d
003C,1903,,           btfsc STATUS,Z
003D,2845,,           goto  cls
003E,0820,,           movf  char,w
003F,3C08,,           sublw 08
0040,1903,,           btfsc STATUS,Z
0041,2848,,           goto  bspace
0042,0820,,           movf  char,W
0043,2058,,           call  putc             ; Send the character straight thru
0044,2839,,           goto  loop
,,,
0045,3001,cls,cls        movlw  0x01            ; Send command prefix
0046,204D,,           call wrcmd
0047,2839,,           goto loop
,,,
0048,3010,bspace,bspace     movlw 0x10             ; Send command prefix
0049,204D,,           call wrcmd
004A,2839,,           goto loop
,,,
004B,0064,hang,hang       clrwdt                 ; Clear WDT in case it is enabled.
004C,284B,,           goto hang
,,,
,,,;Subroutine to sent a command
004D,00A1,wrcmd,wrcmd      movwf cmd              ; Store the command
004E,30FE,,           movlw 0xFE             ; Write the command prefix
004F,2058,,           call putc
0050,0821,,           movf cmd,W             ; Write the command code
0051,2858,,           goto putc
,,,
,,,;Subroutine to wait and receive a byte
,,,;Returns character in W
,,,;
0052,1283,getc,getc       bcf     STATUS,RP0      ; Select Bank 0.
0053,1E8C,getc1,getc1      btfss   PIR1,RCIF       ; Skip if RC int flag set
0054,2853,,           goto    getc1           ; Try again
0055,081A,,           movf    RCREG,W         ; Read the character
0056,128C,,           bcf     PIR1,RCIF       ; Clear the interrupt flag
0057,0008,,           return
,,,
,,,;Subroutine to transmit a byte and wait
,,,;W = Character
,,,;
0058,1283,putc,putc       bcf     STATUS,RP0      ; Select Bank 0.
0059,0099,,           movwf   TXREG           ; Write it!
005A,1683,,           bsf     STATUS,RP0      ; Select Bank 1
005B,0818,,           movf    TXSTA,W         ; Peek transmit status
005C,1C98,putc1,putc1      btfss   TXSTA,1         ; Skip if TXbuffer empty
005D,285C,,           goto    putc1           ; Try again
005E,1283,,           bcf     STATUS,RP0      ; Select Bank 0.
005F,0008,,           return
,,,
,,,;Delay Routine
,,,;W = delay time
,,,;
0060,00A3,delay,delay      movwf   lc2
0061,30FF,,_sw2       movlw   0xFF
0062,00A2,,           movwf   lc1
0063,0000,,_sw3       nop
0064,0BA2,,           decfsz  lc1,f
0065,2863,,           goto    _sw3
0066,0BA3,,           decfsz  lc2,f
0067,2861,,           goto    _sw2
0068,0008,,           return
,,,
,,,
,,,
0069,0009,inthlr,inthlr     retfie
,,,
,,,           END

⌨️ 快捷键说明

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