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

📄 hello.sdi

📁 proteus仿真实例大全
💻 SDI
字号:
,,,; Scrivo "Hello World!" sul display
,,,                PROCESSOR       16F84
,,,                RADIX           DEC
,,,                INCLUDE         "p16f84.inc"
,,,
,,,                ERRORLEVEL      -302
,,,
,,,PIN11           EQU     4       ; PIN11 LCD --> RB4
,,,PIN12           EQU     5       ; PIN12 LCD --> RB5
,,,PIN13           EQU     6       ; PIN13 LCD --> RB6
,,,PIN14           EQU     7       ; PIN14 LCD --> RB7
,,,
,,,RS              EQU     3       ; RS LCD --> RB3
,,,EN              EQU     2       ; RS LCD --> RB2
,,,
0000000C,,,                ORG     0CH
,,,
0000000C,,lsb,lsb             RES     1
0000000D,,msb,msb             RES     1
0000000E,,tmp,tmp             RES     1
0000000F,,tmp1,tmp1            RES     1
,,,
00000000,,,                ORG     00H
,,,
00000000,0000,,                nop
,,,
00000001,1683,,                bsf     STATUS,RP0      ;Banco 1
,,,
00000002,3000,,                movlw   0x00
00000003,0086,,                movwf   TRISB           ;PORTB TUTTA IN OUTPUT
,,,
00000004,1283,,                bcf     STATUS,RP0      ;Banco 0
,,,
00000005,2039,,                call    init
,,,
00000006,3006,,                movlw   06H
00000007,2055,,                call    cp              ;Riga 0 posizione 6
,,,
00000008,3050,,                movlw   'P'
00000009,2067,,                call    sd
0000000A,3052,,                movlw   'R'
0000000B,2067,,                call    sd
0000000C,304F,,                movlw   'O'
0000000D,2067,,                call    sd
0000000E,3054,,                movlw   'T'
0000000F,2067,,                call    sd
00000010,3045,,                movlw   'E'
00000011,2067,,                call    sd
00000012,3055,,                movlw   'U'
00000013,2067,,                call    sd
00000014,3053,,                movlw   'S'
00000015,2067,,                call    sd
,,,
00000016,3015,,                movlw   15H             ;Riga 1 posizione 5
00000017,2055,,                call    cp
,,,
00000018,3032,,                movlw   '2'
00000019,2067,,                call    sd
0000001A,3034,,                movlw   '4'
0000001B,2067,,                call    sd
0000001C,3058,,                movlw   'X'
0000001D,2067,,                call    sd
0000001E,3032,,                movlw   '2'
0000001F,2067,,                call    sd
00000020,304C,,                movlw   'L'
00000021,2067,,                call    sd
00000022,3043,,                movlw   'C'
00000023,2067,,                call    sd
00000024,3044,,                movlw   'D'
00000025,2067,,                call    sd
,,,
00000026,3020,,                movlw   ' '
00000027,2067,,                call    sd
,,,
00000028,3056,,                movlw   'V'
00000029,2067,,                call    sd
0000002A,3053,,                movlw   'S'
0000002B,2067,,                call    sd
0000002C,304D,,                movlw   'M'
0000002D,2067,,                call    sd
0000002E,3020,,                movlw   ' '
0000002F,2067,,                call    sd
00000030,3054,,                movlw   'T'
00000031,2067,,                call    sd
00000032,3045,,                movlw   'E'
00000033,2067,,                call    sd
00000034,3053,,                movlw   'S'
00000035,2067,,                call    sd
00000036,3054,,                movlw   'T'
00000037,2067,,                call    sd
00000038,2838,loop,loop            goto    loop
,,,
,,,                INCLUDE "liblcd4.asm"
,,,; COLLEGAMENTI:
,,,;
,,,; LCD DB7 (14)          -->     PIC RB7 (13)
,,,; LCD DB6 (13)          -->     PIC RB6 (12)
,,,; LCD DB5 (12)          -->     PIC RB5 (11)
,,,; LCD DB4 (11)          -->     PIC RB4 (10)
,,,; LCD EN  (6)           -->     PIC RB2 (8)
,,,; LCD RS  (4)           -->     PIC RB3 (9)
,,,;
,,,; INTESTAZIONE:
,,,;
,,,; PROCESSOR     16F84
,,,; RADIX         DEC
,,,; INCLUDE       "p16f84.inc"
,,,;
,,,; PIN11         EQU     4
,,,; PIN12         EQU     5
,,,; PIN13         EQU     6
,,,; PIN14         EQU     7
,,,; EN            EQU     2
,,,; RS            EQU     3
,,,;
,,,;               ORG     0CH
,,,;
,,,; lsb           RES     1
,,,; msb           RES     1
,,,; tmp           RES     1
,,,; tmp1          RES     1
,,,;
,,,;               ORG     00H
,,,;
,,,; bsf           STATUS,RP0      ;BANCO 1
,,,;
,,,; movlw         0x00
,,,; movwf         TRISB
,,,;
,,,; bcf           STATUS,RP0      ;BANCO 0
,,,;
,,,; ...
,,,
,,,
,,,; ********************************************************
,,,; init
,,,; Da usare all'inizio del programma per inizializzare l'LCD
,,,; Registri usati:
,,,; \
,,,; Subroutine richiamate:
,,,; rit
,,,; enable
,,,; sc
,,,; ********************************************************
,,,
00000039,301E,init,init    movlw   30
0000003A,2083,,        call    rit             ; Ritardo 30 ms
,,,
0000003B,1186,,        bcf     PORTB,RS        ; RS = 0 --> Dati
,,,
0000003C,1606,,        bsf     PORTB,PIN11
0000003D,1686,,        bsf     PORTB,PIN12
0000003E,1306,,        bcf     PORTB,PIN13
0000003F,1386,,        bcf     PORTB,PIN14     ; PORTB --> 0011XXXX
,,,
00000040,1506,,        bsf     PORTB,EN
00000041,3005,,        movlw   5
00000042,2083,,        call    rit             ; Ritardo 5 ms
00000043,1106,,        bcf     PORTB,EN
00000044,3001,,        movlw   1
00000045,2083,,        call    rit             ; Ritardo 1 ms
,,,
00000046,207B,,        call    enable
,,,
00000047,207B,,        call    enable
,,,
00000048,1206,,        bcf     PORTB,PIN11
00000049,1686,,        bsf     PORTB,PIN12
0000004A,1306,,        bcf     PORTB,PIN13
0000004B,1386,,        bcf     PORTB,PIN14     ; PORTB --> 0010XXXX
,,,
0000004C,207B,,        call    enable
,,,
0000004D,3028,,        movlw   0x28            ; 4-bit
0000004E,206A,,        call    sc
,,,
0000004F,3006,,        movlw   0x06
00000050,206A,,        call    sc
,,,
00000051,300C,,        movlw   0x0C
00000052,206A,,        call    sc
,,,
00000053,2060,,        call    cl
,,,
00000054,0008,,        return
,,,
,,,; ********************************************************
,,,; cp
,,,; Cursor Position - Mette il cursore in una certa posizione
,,,; Registri usati:
,,,; W     -->     D7-D4 righe,    D3,D0 colonne
,,,; tmp
,,,; tmp1
,,,; Subroutine richiamate:
,,,; sc
,,,; ********************************************************
00000055,008E,cp,cp      movwf   tmp
,,,
00000056,3080,,        movlw   0x80
00000057,008F,,        movwf   tmp1            ; Metti 10000000 in tmp1
,,,
00000058,080E,,        movf    tmp,W           ; Metti tmp in W
00000059,390F,,        andlw   0x0F            ; W --> 0000DDDD
0000005A,048F,,        iorwf   tmp1,F          ; tmp1 --> 1000DDDD
,,,
0000005B,1A0E,,        btfsc   tmp,4           ; Se il bit 4 di tmp = 0 salta
0000005C,170F,,        bsf     tmp1,6          ; altrimenti tmp1 diventa 1100DDDD
,,,
0000005D,080F,,        movf    tmp1,W          ; Metti tmp1 in W
0000005E,206A,,        call    sc              ; Manda il comando 1X00DDDD
,,,
0000005F,0008,,        return
,,,
,,,; ********************************************************
,,,; cl
,,,; Clear - Pulisce il display e mette il cursore all'inizio
,,,; Registri usati:
,,,; \
,,,; Subroutine richiamate:
,,,; sc
,,,; rit
,,,; ********************************************************
,,,
00000060,3001,cl,cl      movlw   0x01
00000061,206A,,        call    sc      ; CLEAR
,,,
00000062,3002,,        movlw   2
00000063,2083,,        call    rit     ; Ritardo 2 ms
,,,
00000064,3080,,        movlw   80H
00000065,206A,,        call    sc      ; Posizione Iniziale
,,,
00000066,0008,,        return
,,,
,,,; ********************************************************
,,,; sd
,,,; Send data - Invia un dato al display
,,,; Registri usati:
,,,; W     -->     dato da inviare
,,,; Subroutine richiamate:
,,,; sb
,,,; ********************************************************
,,,
00000067,1586,sd,sd      bsf     PORTB,RS
00000068,206D,,        call    sb
00000069,0008,,        return
,,,
,,,
,,,; ********************************************************
,,,; sc
,,,; Send Command - Invia un comando al display
,,,; Registri usati:
,,,; W     -->     Comando da inviare
,,,; Subroutine richiamate:
,,,; sb
,,,; ********************************************************
,,,
0000006A,1186,sc,sc      bcf     PORTB,RS
0000006B,206D,,        call    sb
0000006C,0008,,        return
,,,
,,,; ********************************************************
,,,; sb
,,,; Send byte - Invia un byte sull'msb di PORTB
,,,; Registri usati:
,,,; tmp
,,,; Subroutine richiamate:
,,,; enable
,,,; ********************************************************
,,,
0000006D,008E,sb,sb      movwf   tmp
0000006E,300F,,        movlw   B'00001111'
0000006F,0586,,        andwf   PORTB,F         ;Metto a 0 i 4 bit MSB di PORTB
00000070,080E,,        movf    tmp,W
00000071,39F0,,        andlw   B'11110000'     ;Metto a 0 i 4 bit LSB del byte da inviare in W
00000072,0486,,        iorwf   PORTB,F         ;OR fra PORTB (0000XXXX) e W (DDDD0000)
00000073,207B,,        call    enable          ;Impulso di Enable
00000074,300F,,        movlw   B'00001111'
00000075,0586,,        andwf   PORTB,F         ;Metto a 0 i 4 bit MSB di PORTB
00000076,0E0E,,        swapf   tmp,W           ;Metto tmp1 in W con LSB invertito con MSB
00000077,39F0,,        andlw   B'11110000'     ;Metto a 0 i 4 bit LSB del byte da inviare in W
00000078,0486,,        iorwf   PORTB,F         ;OR fra PORTB (0000XXXX) e W (DDDD0000)
00000079,207B,,        call    enable          ;Impulso di Enable
,,,
0000007A,0008,,        return
,,,
,,,; ********************************************************
,,,; enable
,,,; Manda un impulso di ENABLE della durata di 1ms
,,,; Registri usati:
,,,; \
,,,; Subroutine richiamate:
,,,; rit
,,,; ********************************************************
,,,
0000007B,1283,enable,enable  bcf     STATUS,RP0      ;banco 0
0000007C,1506,,        bsf     PORTB,EN        ;metto a 1 enable
0000007D,3001,,        movlw   1               ;metto 1 in w
0000007E,2083,,        call    rit             ;ritardo
0000007F,1106,,        bcf     PORTB,EN        ;rimetto a 0 enable
00000080,3001,,        movlw   1
00000081,2083,,        call    rit
,,,
00000082,0008,,        return
,,,
,,,; ********************************************************
,,,; rit
,,,; Ciclo di ritardo programmabile
,,,; Registri usati:
,,,; W     -->     Numero di ms (per CLK = 4MHz)
,,,; msb   -->     (uso interno)
,,,; lsb   -->     (uso interno)
,,,; Subroutine richiamate:
,,,; \
,,,; ********************************************************
,,,
00000083,008D,rit,rit     movwf   msb
00000084,018C,,        clrf    lsb
00000085,,rit_loop,rit_loop
00000085,0000,,        nop
00000086,0B8C,,        decfsz  lsb,F
00000087,2885,,        goto    rit_loop
00000088,0000,,        nop
00000089,0B8D,,        decfsz  msb,F
0000008A,2885,,        goto    rit_loop
,,,
0000008B,0008,,        return
,,,
,,,        end

⌨️ 快捷键说明

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