欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機串行通信Proteus仿真 匯編語言源程序 [打印本頁]

作者: 65797816    時間: 2019-12-12 15:58
標題: 單片機串行通信Proteus仿真 匯編語言源程序
A機代碼:;端口引腳定義區LCD_RS                BIT                P1.0                 ;1602數據命令選擇端口
LCD_RW                BIT                P1.1                 ;1602讀寫選擇端口
LCD_EN                BIT                P1.2                 ;1602使能端口
LCD_DATA        EQU                P0                         ;1602數據端口

;變量聲明區
ALL_FLAG        EQU                20H                         ;標志位
LCD_FLAG        EQU                ALL_FLAG.7        ;1602讀忙標志位
LCD_DAT                EQU                30H                         ;1602數據命令字        
DELAYED                EQU                31H                         ;延時字
G EQU 50H         
S EQU 51H
G_R EQU 59H         
S_R EQU 58H
DDATA_R  EQU        57H
DDATA                EQU                56H                         ;延時字
org 0000H
LJMP start
org 0003H        ;外部中斷0 中斷入口
LJMP EXT0
ORG 0023H
LJMP UARTInterrupt
org 0030H
start:
                 MOV SP,#60H
                LCALL LCD_INIT
                LCALL Init_Exit
                LCALL InitUART
LOOP:
                MOV LCD_DAT,#80H
                ACALL LCD_W_CMD
                MOV LCD_DAT,#73H
                ACALL LCD_W_DATA                  
                MOV LCD_DAT,#65H
                ACALL LCD_W_DATA                  
                MOV LCD_DAT,#6eH
                ACALL LCD_W_DATA                  
                MOV LCD_DAT,#64H
                ACALL LCD_W_DATA               
                MOV LCD_DAT,#3AH
                ACALL LCD_W_DATA
                MOV LCD_DAT,S
                ACALL LCD_W_DATA               
                MOV LCD_DAT,G
                ACALL LCD_W_DATA


                LCALL ASCII
                LCALL KEY
                AJMP LOOP


Init_Exit:
      MOV IP ,#00010100B                ;配置優先級
      MOV IE,#10010101B                        ;中斷允許
      MOV TCON,#01000101B                ;配置觸發條件
          RET
EXT0:
           POP ACC
      POP PSW
          LCALL SendOneByte
          CALL WaitSendFinish
          PUSH ACC
      PUSH PSW
      RETI

InitUART:
    MOV TMOD,#20H
    MOV SCON,#40H
    MOV TH1,#0FDH
    MOV TL1,TH1
    MOV PCON,#80H
    SETB EA
    SETB ES
    SETB TR1
        SETB REN
    RET

UARTInterrupt:
    JB RI,IsUART_Receive
    CLR TI
    RETI
IsUART_Receive:
    CLR RI
    PUSH ACC
    MOV A,SBUF
        MOV DDATA_R,A
    POP ACC
    RETI

SendOneByte:
    CLR ES
    CLR TI
        MOV A,DDATA
         MOV C,    P
    MOV TB8, C              ;校驗位送到TB8
    MOV SBUF, A
WaitSendFinish:
    JB TI,WaitSendFinish
    CLR TI
    SETB ES
    RET

LCD_R_DATA:
                        MOV                LCD_DATA,#0FFH
LCD_BUSY:        CLR                LCD_RS
                        SETB        LCD_RW
                        NOP
                        SETB        LCD_EN
                        NOP
                        MOV                Acc,LCD_DATA
                        MOV                C,Acc.7
                        MOV                LCD_FLAG,C
                        CLR                LCD_EN
                        NOP
                        JB                LCD_FLAG,LCD_BUSY        
                        RET                        


LCD_W_DATA:
                        LCALL        LCD_R_DATA
                        SETB        LCD_RS
                        CLR                LCD_RW
                        NOP                        
                        MOV                LCD_DATA,LCD_DAT
                        SETB        LCD_EN
                        NOP
                        CLR                LCD_EN
                        RET


LCD_W_CMD:
                        LCALL        LCD_R_DATA
                        CLR                LCD_RS
                        CLR                LCD_RW
                        NOP               
                        MOV                LCD_DATA,LCD_DAT
                        SETB        LCD_EN
                        NOP
                        CLR                LCD_EN
                        RET

        
LCD_CMD:
                        CLR                LCD_RS
                        CLR                LCD_RW
                        NOP               
                        MOV                LCD_DATA,LCD_DAT
                        SETB        LCD_EN
                        NOP
                        CLR                LCD_EN
                        RET

LCD_INIT:
                        MOV                DELAYED,#30
                        LCALL        DELAY_MS
                        MOV                LCD_DAT,#38H
                        LCALL        LCD_CMD
                        MOV                DELAYED,#10
                        LCALL        DELAY_MS                    
                        MOV                LCD_DAT,#38H
                        LCALL        LCD_CMD
                        MOV                DELAYED,#10
                        LCALL        DELAY_MS
                        MOV                LCD_DAT,#38H
                        LCALL        LCD_CMD
                        MOV                DELAYED,#10
                        LCALL        DELAY_MS
                        MOV                LCD_DAT,#038H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#08H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#01H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#06H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#0CH
                        LCALL        LCD_W_CMD
                        RET

KEY:
                        ACALL KEY0_1   ;調用KEY0_1,判斷是否有鍵按下
                        JB F0,$-2   ;無鍵按下,轉ACALL KEY0_1,繼續掃描
                        MOV A,R1   ;R1為取碼指針
                        MOV DDATA,R1
                        RET

KEY0_1:    ;按鍵檢測子程序
                        SETB F0   ;設F0=1
                        MOV R3,#0F7H  ;行掃描指針初值(P2.3=0)
                        MOV R1,#00H   ;取碼指針初值
L2:
                        MOV A,R3   ;載入掃描指針
                        MOV P2,A   ;輸出至P2,開始掃描為0的一行
                        NOP
                        MOV A,P2   ;讀入P2
                        SETB C   
                        MOV R5,#4   ;檢測P2.7~P2.4,共4 列
L3:    ;檢測4列
                        RLC A   ;左移一位(P2.7~P2.4)
                        JNC KEY1   ;檢測到C=0,表示被按下
                        INC R1   ;無鍵按下則取碼指針加1
                        DJNZ R5,L3   ;4列檢測完畢?
                        MOV A,R3   ;載入掃描指針
                        SETB C
                        RRC A       ;掃描為0的下一行,
                        MOV R3,A   ;存回R3掃描指針寄存器
                        JC L2   ;C=0,行掃描完畢

                        MOV LCD_DAT,#0C0H ;換行
                        ACALL LCD_W_CMD
                        MOV LCD_DAT,#72H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#65H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#63H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#65H
                        ACALL LCD_W_DATA               
                        MOV LCD_DAT,#69H
                        ACALL LCD_W_DATA
                        MOV LCD_DAT,#76H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#65H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#64H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#3AH
                        ACALL LCD_W_DATA        
                        MOV LCD_DAT,S_R
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,G_R
                        ACALL LCD_W_DATA        
                        LCALL  ASCII2
                        
                        RET

KEY1:
                        CLR F0   ;F0清0 ,表示按鍵按下
                        RET   
ASCII:
                        MOV A,R1 ;顯示秒
                        MOV B,#10
                        DIV AB
                        ADD A, #48
                        MOV S,A
                        MOV A,B
                        ADD A, #48
                        MOV G,A
                        RET
ASCII2:
                        MOV A,DDATA_R
                        MOV B,#10
                        DIV AB
                        ADD A, #48
                        MOV S_R,A
                        MOV A,B
                        ADD A, #48
                        MOV G_R,A
                        RET

DELAY_MS:        
                        MOV                R7,DELAYED
D19:                        MOV                R6,#0F8H
D20:                        DJNZ        R6,D20        
                        DJNZ        R7,D19
                        
                        RET

        
DELAY_US:
                        MOV                R7,A        
DU1:               
                        DJNZ        R7,DU1
                        RET



end
B機代碼:;端口引腳定義區
LCD_RS                BIT                P1.0                 ;1602數據命令選擇端口
LCD_RW                BIT                P1.1                 ;1602讀寫選擇端口
LCD_EN                BIT                P1.2                 ;1602使能端口
LCD_DATA        EQU                P0                         ;1602數據端口

;變量聲明區
ALL_FLAG        EQU                20H                         ;標志位
LCD_FLAG        EQU                ALL_FLAG.7        ;1602讀忙標志位
LCD_DAT                EQU                30H                         ;1602數據命令字        
DELAYED                EQU                31H                         ;延時字
G EQU 50H         
S EQU 51H
G_R EQU 59H         
S_R EQU 58H
DDATA_R  EQU        57H
DDATA                EQU                56H                         ;延時字
org 0000H
LJMP start
org 0003H        ;外部中斷0 中斷入口
LJMP EXT0
ORG 0023H
LJMP UARTInterrupt
org 0030H
start:
                 MOV SP,#60H
                LCALL LCD_INIT
                LCALL Init_Exit
                LCALL InitUART
LOOP:
                MOV LCD_DAT,#80H
                ACALL LCD_W_CMD
                MOV LCD_DAT,#73H
                ACALL LCD_W_DATA                  
                MOV LCD_DAT,#65H
                ACALL LCD_W_DATA                  
                MOV LCD_DAT,#6eH
                ACALL LCD_W_DATA                  
                MOV LCD_DAT,#64H
                ACALL LCD_W_DATA               
                MOV LCD_DAT,#3AH
                ACALL LCD_W_DATA
                MOV LCD_DAT,S
                ACALL LCD_W_DATA               
                MOV LCD_DAT,G
                ACALL LCD_W_DATA


                LCALL ASCII
                LCALL KEY
                AJMP LOOP


Init_Exit:
      MOV IP ,#00010100B                ;配置優先級
      MOV IE,#10010101B                        ;中斷允許
      MOV TCON,#01000101B                ;配置觸發條件
          RET
EXT0:
           POP ACC
      POP PSW
          LCALL SendOneByte
          CALL WaitSendFinish
          PUSH ACC
      PUSH PSW
      RETI

InitUART:
    MOV TMOD,#20H
    MOV SCON,#40H
    MOV TH1,#0FDH
    MOV TL1,TH1
    MOV PCON,#80H
    SETB EA
    SETB ES
    SETB TR1
        SETB REN
    RET

UARTInterrupt:
    JB RI,IsUART_Receive
    CLR TI
    RETI
IsUART_Receive:
    CLR RI
    PUSH ACC
    MOV A,SBUF
        MOV DDATA_R,A
    POP ACC
    RETI

SendOneByte:
    CLR ES
    CLR TI
        MOV A,DDATA
         MOV C,    P
    MOV TB8, C              ;校驗位送到TB8
    MOV SBUF, A
WaitSendFinish:
    JB TI,WaitSendFinish
    CLR TI
    SETB ES
    RET

LCD_R_DATA:
                        MOV                LCD_DATA,#0FFH
LCD_BUSY:        CLR                LCD_RS
                        SETB        LCD_RW
                        NOP
                        SETB        LCD_EN
                        NOP
                        MOV                Acc,LCD_DATA
                        MOV                C,Acc.7
                        MOV                LCD_FLAG,C
                        CLR                LCD_EN
                        NOP
                        JB                LCD_FLAG,LCD_BUSY        
                        RET                        


LCD_W_DATA:
                        LCALL        LCD_R_DATA
                        SETB        LCD_RS
                        CLR                LCD_RW
                        NOP                        
                        MOV                LCD_DATA,LCD_DAT
                        SETB        LCD_EN
                        NOP
                        CLR                LCD_EN
                        RET


LCD_W_CMD:
                        LCALL        LCD_R_DATA
                        CLR                LCD_RS
                        CLR                LCD_RW
                        NOP               
                        MOV                LCD_DATA,LCD_DAT
                        SETB        LCD_EN
                        NOP
                        CLR                LCD_EN
                        RET

        
LCD_CMD:
                        CLR                LCD_RS
                        CLR                LCD_RW
                        NOP               
                        MOV                LCD_DATA,LCD_DAT
                        SETB        LCD_EN
                        NOP
                        CLR                LCD_EN
                        RET

LCD_INIT:
                        MOV                DELAYED,#30
                        LCALL        DELAY_MS
                        MOV                LCD_DAT,#38H
                        LCALL        LCD_CMD
                        MOV                DELAYED,#10
                        LCALL        DELAY_MS                    
                        MOV                LCD_DAT,#38H
                        LCALL        LCD_CMD
                        MOV                DELAYED,#10
                        LCALL        DELAY_MS
                        MOV                LCD_DAT,#38H
                        LCALL        LCD_CMD
                        MOV                DELAYED,#10
                        LCALL        DELAY_MS
                        MOV                LCD_DAT,#038H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#08H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#01H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#06H
                        LCALL        LCD_W_CMD
                        MOV                LCD_DAT,#0CH
                        LCALL        LCD_W_CMD
                        RET

KEY:
                        ACALL KEY0_1   ;調用KEY0_1,判斷是否有鍵按下
                        JB F0,$-2   ;無鍵按下,轉ACALL KEY0_1,繼續掃描
                        MOV A,R1   ;R1為取碼指針
                        MOV DDATA,R1
                        RET

KEY0_1:    ;按鍵檢測子程序
                        SETB F0   ;設F0=1
                        MOV R3,#0F7H  ;行掃描指針初值(P2.3=0)
                        MOV R1,#00H   ;取碼指針初值
L2:
                        MOV A,R3   ;載入掃描指針
                        MOV P2,A   ;輸出至P2,開始掃描為0的一行
                        NOP
                        MOV A,P2   ;讀入P2
                        SETB C   
                        MOV R5,#4   ;檢測P2.7~P2.4,共4 列
L3:    ;檢測4列
                        RLC A   ;左移一位(P2.7~P2.4)
                        JNC KEY1   ;檢測到C=0,表示被按下
                        INC R1   ;無鍵按下則取碼指針加1
                        DJNZ R5,L3   ;4列檢測完畢?
                        MOV A,R3   ;載入掃描指針
                        SETB C
                        RRC A       ;掃描為0的下一行,
                        MOV R3,A   ;存回R3掃描指針寄存器
                        JC L2   ;C=0,行掃描完畢

                        MOV LCD_DAT,#0C0H ;換行
                        ACALL LCD_W_CMD
                        MOV LCD_DAT,#72H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#65H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#63H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#65H
                        ACALL LCD_W_DATA               
                        MOV LCD_DAT,#69H
                        ACALL LCD_W_DATA
                        MOV LCD_DAT,#76H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#65H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#64H
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,#3AH
                        ACALL LCD_W_DATA        
                        MOV LCD_DAT,S_R
                        ACALL LCD_W_DATA                  
                        MOV LCD_DAT,G_R
                        ACALL LCD_W_DATA        
                        LCALL  ASCII2
                        
                        RET

KEY1:
                        CLR F0   ;F0清0 ,表示按鍵按下
                        RET   
ASCII:
                        MOV A,R1 ;顯示秒
                        MOV B,#10
                        DIV AB
                        ADD A, #48
                        MOV S,A
                        MOV A,B
                        ADD A, #48
                        MOV G,A
                        RET
ASCII2:
                        MOV A,DDATA_R
                        MOV B,#10
                        DIV AB
                        ADD A, #48
                        MOV S_R,A
                        MOV A,B
                        ADD A, #48
                        MOV G_R,A
                        RET

DELAY_MS:        
                        MOV                R7,DELAYED
D19:                        MOV                R6,#0F8H
D20:                        DJNZ        R6,D20        
                        DJNZ        R7,D19
                        
                        RET

        
DELAY_US:
                        MOV                R7,A        
DU1:               
                        DJNZ        R7,DU1
                        RET



end


M~%F_L]LR@]%O7](JZP5$S8.png (129.12 KB, 下載次數: 70)

M~%F_L]LR@]%O7](JZP5$S8.png

雙機通信.zip

29.86 KB, 下載次數: 9, 下載積分: 黑幣 -5


作者: lch123123    時間: 2019-12-12 21:28
贊一個 很好用
作者: lch123123    時間: 2019-12-12 21:29
贊一個 很好用




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1