久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 單片機(jī)串行通信Proteus仿真 匯編語(yǔ)言源程序 [打印本頁(yè)]

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

;變量聲明區(qū)
ALL_FLAG        EQU                20H                         ;標(biāo)志位
LCD_FLAG        EQU                ALL_FLAG.7        ;1602讀忙標(biāo)志位
LCD_DAT                EQU                30H                         ;1602數(shù)據(jù)命令字        
DELAYED                EQU                31H                         ;延時(shí)字
G EQU 50H         
S EQU 51H
G_R EQU 59H         
S_R EQU 58H
DDATA_R  EQU        57H
DDATA                EQU                56H                         ;延時(shí)字
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                ;配置優(yōu)先級(jí)
      MOV IE,#10010101B                        ;中斷允許
      MOV TCON,#01000101B                ;配置觸發(fā)條件
          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              ;校驗(yàn)位送到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   ;調(diào)用KEY0_1,判斷是否有鍵按下
                        JB F0,$-2   ;無(wú)鍵按下,轉(zhuǎn)ACALL KEY0_1,繼續(xù)掃描
                        MOV A,R1   ;R1為取碼指針
                        MOV DDATA,R1
                        RET

KEY0_1:    ;按鍵檢測(cè)子程序
                        SETB F0   ;設(shè)F0=1
                        MOV R3,#0F7H  ;行掃描指針初值(P2.3=0)
                        MOV R1,#00H   ;取碼指針初值
L2:
                        MOV A,R3   ;載入掃描指針
                        MOV P2,A   ;輸出至P2,開(kāi)始掃描為0的一行
                        NOP
                        MOV A,P2   ;讀入P2
                        SETB C   
                        MOV R5,#4   ;檢測(cè)P2.7~P2.4,共4 列
L3:    ;檢測(cè)4列
                        RLC A   ;左移一位(P2.7~P2.4)
                        JNC KEY1   ;檢測(cè)到C=0,表示被按下
                        INC R1   ;無(wú)鍵按下則取碼指針加1
                        DJNZ R5,L3   ;4列檢測(cè)完畢?
                        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機(jī)代碼:;端口引腳定義區(qū)
LCD_RS                BIT                P1.0                 ;1602數(shù)據(jù)命令選擇端口
LCD_RW                BIT                P1.1                 ;1602讀寫選擇端口
LCD_EN                BIT                P1.2                 ;1602使能端口
LCD_DATA        EQU                P0                         ;1602數(shù)據(jù)端口

;變量聲明區(qū)
ALL_FLAG        EQU                20H                         ;標(biāo)志位
LCD_FLAG        EQU                ALL_FLAG.7        ;1602讀忙標(biāo)志位
LCD_DAT                EQU                30H                         ;1602數(shù)據(jù)命令字        
DELAYED                EQU                31H                         ;延時(shí)字
G EQU 50H         
S EQU 51H
G_R EQU 59H         
S_R EQU 58H
DDATA_R  EQU        57H
DDATA                EQU                56H                         ;延時(shí)字
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                ;配置優(yōu)先級(jí)
      MOV IE,#10010101B                        ;中斷允許
      MOV TCON,#01000101B                ;配置觸發(fā)條件
          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              ;校驗(yàn)位送到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   ;調(diào)用KEY0_1,判斷是否有鍵按下
                        JB F0,$-2   ;無(wú)鍵按下,轉(zhuǎn)ACALL KEY0_1,繼續(xù)掃描
                        MOV A,R1   ;R1為取碼指針
                        MOV DDATA,R1
                        RET

KEY0_1:    ;按鍵檢測(cè)子程序
                        SETB F0   ;設(shè)F0=1
                        MOV R3,#0F7H  ;行掃描指針初值(P2.3=0)
                        MOV R1,#00H   ;取碼指針初值
L2:
                        MOV A,R3   ;載入掃描指針
                        MOV P2,A   ;輸出至P2,開(kāi)始掃描為0的一行
                        NOP
                        MOV A,P2   ;讀入P2
                        SETB C   
                        MOV R5,#4   ;檢測(cè)P2.7~P2.4,共4 列
L3:    ;檢測(cè)4列
                        RLC A   ;左移一位(P2.7~P2.4)
                        JNC KEY1   ;檢測(cè)到C=0,表示被按下
                        INC R1   ;無(wú)鍵按下則取碼指針加1
                        DJNZ R5,L3   ;4列檢測(cè)完畢?
                        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, 下載次數(shù): 70)

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

雙機(jī)通信.zip

29.86 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5


作者: lch123123    時(shí)間: 2019-12-12 21:28
贊一個(gè) 很好用
作者: lch123123    時(shí)間: 2019-12-12 21:29
贊一個(gè) 很好用




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人久久一区 | 日韩一区二区三区在线 | 中文在线视频 | 欧美狠狠操 | 欧美日韩一区二区在线 | 国产成人99久久亚洲综合精品 | 在线中文字幕第一页 | 日韩a v在线免费观看 | 欧美性成人 | 欧美一区二区久久 | 天堂一区二区三区 | 国产日韩欧美91 | 欧美理论片在线观看 | 免费看国产精品视频 | 国产无人区一区二区三区 | 国产成人麻豆免费观看 | 久久久91 | 欧美精品二区三区 | 久久久久久综合 | 欧美啪啪网站 | 国产高清免费视频 | 国产精品日韩欧美一区二区 | 国产永久免费 | 久久综合一区 | 超碰在线网站 | 中文字幕高清av | 91综合网 | 精品一区二区三区不卡 | 一区二区三区在线播放 | 欧美精品tv | 国产亚洲精品综合一区 | 国产亚洲一区在线 | 2019中文字幕视频 | 99精品久久久久久 | 美女久久视频 | 国产综合av | 伊人狠狠 | 国产资源视频 | 亚洲精品久久久久中文字幕二区 | 91精品国产综合久久婷婷香蕉 | 欧美一级全黄 |