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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2063|回復: 2
打印 上一主題 下一主題
收起左側

單片機串行通信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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:583466 發表于 2019-12-12 21:28 | 只看該作者
贊一個 很好用
回復

使用道具 舉報

板凳
ID:583466 發表于 2019-12-12 21:29 | 只看該作者
贊一個 很好用
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产区免费视频 | 国内精品99 | 欧美一级在线 | 91资源在线 | 中文字幕日韩在线观看 | 久久伦理中文字幕 | 亚洲人成人一区二区在线观看 | 一区二区三区四区国产 | 九九热免费视频在线观看 | 欧美日韩一区二区三区在线观看 | 成人免费精品视频 | 九九亚洲 | 久久亚洲一区 | 亚洲a一区 | 日本午夜在线视频 | 午夜欧美a级理论片915影院 | 可以免费看的毛片 | 久久成人免费 | 免费a大片| 精品麻豆剧传媒av国产九九九 | 亚洲黄色av | 亚州视频在线 | 欧美精品一区在线发布 | 国产精品久久久久久婷婷天堂 | 国产免费a | 风间由美一区二区三区在线观看 | 日本天天色| 超碰在线观看97 | 国产精品免费一区二区三区四区 | 色视频网站在线观看 | 粉嫩国产精品一区二区在线观看 | 国产美女特级嫩嫩嫩bbb片 | 亚洲免费在线 | 色影视| 久草久草久草 | 最新毛片网站 | 99精品欧美一区二区蜜桃免费 | 亚洲一区二区三区免费在线 | 91国产视频在线观看 | 国产精品福利在线观看 | 草久久久 |