找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2144|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

求解這一部分的單片機(jī)匯編代碼注釋

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 90 黑幣 回復(fù)本帖可獲得 18 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:731979 發(fā)表于 2020-7-10 20:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
代碼里的這部分的意思我不太清除,想請(qǐng)大佬指教一下,謝了
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity

----------------------------------------------------------------------------
NAME        MABIAO                         ;定義1602相關(guān)管腳
COUNT_IN        EQU P3.2                ; 計(jì)數(shù)脈沖輸入端P3.2
en                         EQU  P2.6           ;使能端P2.6                                                                       
rs                         EQU P2.7                                                                                                

delayMABIAO                                            SEGMENT CODE                                          ;段名
initMABIAO                                      SEGMENT CODE                         ;中斷初始化
write_1602comMABIAO                    SEGMENT CODE
write_1602datMABIAO             SEGMENT CODE                         ;液晶寫入數(shù)據(jù)函數(shù)
lcd_initMABIAO                                  SEGMENT CODE                            ;液晶初始化
displayMABIAO                                   SEGMENT CODE                         ;LCD顯示速度函數(shù)
mainMABIAO                                      SEGMENT CODE
EXINT0MABIAO                                    SEGMENT CODE
PRtime0MABIAO                                     SEGMENT CODE
DTtime0MABIAO                                     SEGMENT DATA OVERLAYABLE
COMABIAO                                           SEGMENT CODE
BIMABIAO                                           SEGMENT BIT
DTMABIAO                                           SEGMENT DATA
      
        EXTRN        CODE (?C?ULDIV)                ;無符號(hào)長(zhǎng)型除法程序                                                ;
        EXTRN        CODE (?C?ULCMP)                ;無符號(hào)長(zhǎng)型比較程序                                                               
        EXTRN        CODE (?C_STARTUP)
        EXTRN        CODE (?C?LMUL)          ;長(zhǎng)型乘法程序
        EXTRN        CODE (?C?UIDIV)          ;無符號(hào)整型除法程序
        PUBLIC        Velocity
        PUBLIC        Mileage
        PUBLIC        count
        PUBLIC        flag
        PUBLIC        tab2
        PUBLIC        tab1
        PUBLIC        time0
        PUBLIC        EXINT0
        PUBLIC        main
        PUBLIC        display
        PUBLIC        lcd_init
        PUBLIC        _write_1602dat
        PUBLIC        _write_1602com
        PUBLIC        init
        PUBLIC        _delay


        RSEG  DTtime0MABIAO               
?time0?BYTE:
L0:           DS           1                        ;段地址

        RSEG  BIMABIAO
flag:           DBIT           1                            ;為flag預(yù)留1 BIT的空間
        RSEG  DTMABIAO                                  ;count定義2 byte存儲(chǔ)空間
count:           DS           2                         ;Mileage定義4 Byte存儲(chǔ)空間
Mileage:           DS           4                        ;Velocity定義4 Byte存儲(chǔ)空間
Velocity:   DS           4
        RSEG  delayMABIAO
L?0036:
        USING        0
        MOV          P0,R7
        MOV          R7,#01H
        MOV          R6,#00H
        LCALL        _delay
        SETB         en
_delay:                                                ;延時(shí)函數(shù)
        USING        0

        CLR          A
        MOV          R5,A
        MOV          R4,A
?C0001:
        CLR          C
        MOV          A,R5
        SUBB         A,R7
        MOV          A,R4
        SUBB         A,R6
        JNC          ?C0007
        CLR          A
        MOV          R3,A
        MOV          R2,A
?C0004:
        INC          R3
        CJNE         R3,#00H,?C0029
        INC          R2
?C0029:
        MOV          A,R3
        XRL          A,#06EH
        ORL          A,R2
        JNZ          ?C0004
?C0003:
        INC          R5
        CJNE         R5,#00H,?C0030
        INC          R4
?C0030:
        SJMP         ?C0001
?C0007:
        RET         
        RSEG  initMABIAO
init:                                                                ;中斷初始化程序

        SETB         IT0                                                ;INT0負(fù)跳變觸發(fā)      
        MOV          TMOD,#01H                                ;定時(shí)器工作于方式1
        MOV          TH0,#03CH                                ;50ms定時(shí)初值
        MOV          TL0,#0B0H                                ;
        SETB         EA                                                ;CPU開中斷總允許
        SETB         ET0                                                ;開定時(shí)中斷
        SETB         EX0                                                ;開外部INTO中斷
        SETB         TR0                                                ;啟動(dòng)定時(shí)
        RET         
        RSEG  write_1602comMABIAO
_write_1602com:                                                ;液晶寫入指令函數(shù)與寫入數(shù)據(jù)模塊
        USING        0

        CLR          rs;數(shù)據(jù)/指令選擇置為指令

        LCALL        L?0036;送入數(shù)據(jù)

        CLR          en                        ;en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令

        RET         

        RSEG  write_1602datMABIAO
L?0034:
        USING        0
        CLR          A
        MOV          R1,A
        MOV          R0,A
L?0035:
        LCALL        ?C?ULDIV                         ;無符號(hào)長(zhǎng)型除法程序;
        MOV          A,R7
        ADD          A,#030H
        MOV          R7,A
_write_1602dat:                                        ;液晶寫入數(shù)據(jù)函數(shù)
        USING        0

        SETB         rs

        LCALL        L?0036

        CLR          en

        RET         

        RSEG  lcd_initMABIAO
lcd_init:                                                ;液晶初始化函數(shù)
        USING        0
        MOV          R7,#038H                        ;設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
        LCALL        _write_1602com                       
        MOV          R7,#0CH                                ;開顯示不顯示光標(biāo)
        LCALL        _write_1602com
        MOV          R7,#06H                                ;整屏不移動(dòng),光標(biāo)自動(dòng)右移
        LCALL        _write_1602com
        MOV          R7,#01H                                ;清顯示
        LCALL        _write_1602com
        MOV          R7,#080H                        ;顯示固定符號(hào)從第一行第1個(gè)位置之后開始顯示
        LCALL        _write_1602com
        CLR          A
        MOV          R1,A
?C0011:

        MOV          A,R1
        MOV          DPTR,#tab1                        ;向液晶屏寫固定符號(hào)部分
        MOVC         A,@A+DPTR
        MOV          R7,A
        LCALL        _write_1602dat
        INC          R1
        CJNE         R1,#010H,?C0011
?C0012:

        MOV          R7,#0C0H
        LCALL        _write_1602com

        CLR          A
        MOV          R1,A
?C0014:

        MOV          A,R1                                ;顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示
        MOV          DPTR,#tab2
        MOVC         A,@A+DPTR
        MOV          R7,A
        LCALL        _write_1602dat

        INC          R1
        CJNE         R1,#010H,?C0014

?C0017:
        RET         

        RSEG  displayMABIAO
display:                                        ;LCD顯示速度函數(shù)
        //                        1km/h=100m/0.1h                   360s
                //                        10km/h=100m/0.01h          36s
                //                        100km/h=100m/0.001h  3.6s
        USING        0

        MOV          R7,#089H
        LCALL        _write_1602com

        CLR          A
        MOV          R3,#064H
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity
        LCALL        ?C?ULDIV                   ;無符號(hào)長(zhǎng)型除法程序
        CLR          A
        MOV          R3,A
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        CLR          C
        LCALL        ?C?ULCMP                  ; 無符號(hào)長(zhǎng)型比較程序
        JNZ          ?C0018

        MOV          R7,#020H
        SJMP         ?C0032
?C0018:

        CLR          A
        MOV          R3,#064H
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity
        LCALL        ?C?ULDIV
        MOV          A,R7
        ADD          A,#030H
        MOV          R7,A
?C0032:
        LCALL        _write_1602dat                                ;調(diào)用液晶寫入數(shù)據(jù)函數(shù)
?C0019:

        CLR          A
        MOV          R3,#064H
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity
        LCALL        ?C?ULDIV
        MOV          R4,AR0
        MOV          R5,AR1
        MOV          R6,AR2
        MOV          R7,AR3
        CLR          A
        MOV          R3,#0AH
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        LCALL        ?C?ULDIV
        PUSH         AR4
        PUSH         AR5
        PUSH         AR6
        PUSH         AR7
        CLR          A
        MOV          R3,#064H
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity
        LCALL        ?C?ULDIV
        POP          AR3
        POP          AR2
        POP          AR1
        POP          AR0
        MOV          A,R7
        ADD          A,R3
        MOV          R7,A
        MOV          A,R6
        ADDC         A,R2
        MOV          R6,A
        MOV          A,R5
        ADDC         A,R1
        MOV          R5,A
        MOV          A,R4
        ADDC         A,R0
        MOV          R4,A
        CLR          A
        MOV          R3,A
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        CLR          C
        LCALL        ?C?ULCMP
        JNZ          ?C0020

        MOV          R7,#020H
        SJMP         ?C0033
?C0020:

        CLR          A
        MOV          R3,#064H
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity
        LCALL        ?C?ULDIV
        MOV          R4,AR0
        MOV          R5,AR1
        MOV          R6,AR2
        MOV          R7,AR3
        CLR          A
        MOV          R3,#0AH
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        LCALL        ?C?ULDIV
        MOV          A,R7
        ADD          A,#030H                ;數(shù)字+30得到該數(shù)字的LCD1602顯示碼
        MOV          R7,A
?C0033:
        LCALL        _write_1602dat
?C0021:

        CLR          A
        MOV          R3,#0AH
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity
        LCALL        ?C?ULDIV
        MOV          A,R3
        ADD          A,#030H
        MOV          R7,A
        LCALL        _write_1602dat

        MOV          R7,#0C8H
        LCALL        _write_1602com

        MOV          R3,#040H
        MOV          R2,#042H
        MOV          R1,#0FH
        MOV          R0,#00H
        MOV          R7,Mileage+03H
        MOV          R6,Mileage+02H
        MOV          R5,Mileage+01H
        MOV          R4,Mileage
        LCALL        L?0035

        MOV          R3,#040H
        MOV          R2,#042H
        MOV          R1,#0FH
        MOV          R0,#00H
        MOV          R7,Mileage+03H
        MOV          R6,Mileage+02H
        MOV          R5,Mileage+01H
        MOV          R4,Mileage
        LCALL        ?C?ULDIV
        MOV          R4,AR0
        MOV          R5,AR1
        MOV          R6,AR2
        MOV          R7,AR3
        MOV          R3,#0A0H
        MOV          R2,#086H
        MOV          R1,#01H
        MOV          R0,#00H
        LCALL        L?0035

        MOV          R7,#0CBH
        LCALL        _write_1602com

        MOV          R3,#0A0H
        MOV          R2,#086H
        MOV          R1,#01H
        MOV          R0,#00H
        MOV          R7,Mileage+03H
        MOV          R6,Mileage+02H
        MOV          R5,Mileage+01H
        MOV          R4,Mileage
        LCALL        ?C?ULDIV
        MOV          R4,AR0
        MOV          R5,AR1
        MOV          R6,AR2
        MOV          R7,AR3
        MOV          R3,#010H
        MOV          R2,#027H
        LCALL        L?0034

        CLR          A
        MOV          R3,#010H
        MOV          R2,#027H
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Mileage+03H
        MOV          R6,Mileage+02H
        MOV          R5,Mileage+01H
        MOV          R4,Mileage
        LCALL        ?C?ULDIV
        MOV          R4,AR0
        MOV          R5,AR1
        MOV          R6,AR2
        MOV          R7,AR3
        MOV          R3,#0E8H
        MOV          R2,#03H
        LCALL        L?0034

        CLR          A
        MOV          R3,#0E8H
        MOV          R2,#03H
        MOV          R1,A
        MOV          R0,A
        MOV          R7,Mileage+03H
        MOV          R6,Mileage+02H
        MOV          R5,Mileage+01H
        MOV          R4,Mileage
        LCALL        ?C?ULDIV
        MOV          R4,AR0
        MOV          R5,AR1
        MOV          R6,AR2
        MOV          R7,AR3
        CLR          A
        MOV          R3,#064H
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        LCALL        ?C?ULDIV
        MOV          A,R7
        ADD          A,#030H
        MOV          R7,A
        LJMP         _write_1602dat


        RSEG  mainMABIAO
main:                                                ;主函數(shù)
        USING        0

        LCALL        init

        LCALL        lcd_init          ;調(diào)用液晶初始化函數(shù)
?C0023:

        LCALL        display

        SJMP         ?C0023


CSEG        AT        00003H                  ;外部中斷0入口地址
        LJMP        EXINT0


        RSEG  EXINT0MABIAO
        USING        0
EXINT0:                                        ;外部中斷函數(shù)
        PUSH         ACC

        INC          count+01H         
        MOV          A,count+01H
        JNZ          ?C0031
        INC          count                   ;計(jì)數(shù)脈沖值+1
?C0031:

        POP          ACC                        ;出棧
        RETI                            ;外部中斷0返回


CSEG        AT        0000BH
        LJMP        time0


        RSEG  PRtime0MABIAO
        USING        0
time0:                                ;定時(shí)器中斷函數(shù)
        PUSH         ACC
        PUSH         B                ;入棧保護(hù)
        PUSH         DPH
        PUSH         DPL
        PUSH         PSW
        MOV          PSW,#00H
        PUSH         AR0
        PUSH         AR1
        PUSH         AR2
        PUSH         AR3
        PUSH         AR4
        PUSH         AR5
        PUSH         AR6
        PUSH         AR7
        USING        0
        MOV          TH0,#03CH           ;重裝50ms定時(shí)初值
        MOV          TL0,#0B0H
        INC          L0                            ;每中斷一次(L0)+1
        MOV          A,L0                         ; (L0)->A
        CLR          C
        SUBB         A,#0AH                         ;寄存器A中內(nèi)容與10比較
        JC           ?C0028                         ;不相等則轉(zhuǎn)移至?C0028
        MOV          L0,#00H                           ;相等則清零
        CLR          A                                  ;//Mileage=Mileage+Velocity*500/36;里程m=速度km/h*1000*5/3.6
        MOV          R7,#0F4H
        MOV          R6,#01H
        MOV          R5,A
        MOV          R4,A
        MOV          R3,Velocity+03H
        MOV          R2,Velocity+02H
        MOV          R1,Velocity+01H
        MOV          R0,Velocity
        LCALL        ?C?LMUL
        CLR          A
        MOV          R3,#024H
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        LCALL        ?C?ULDIV
        MOV          A,Mileage+03H
        ADD          A,R7
        MOV          Mileage+03H,A
        MOV          A,Mileage+02H
        ADDC         A,R6
        MOV          Mileage+02H,A
        MOV          A,Mileage+01H
        ADDC         A,R5
        MOV          Mileage+01H,A
        MOV          A,Mileage
        ADDC         A,R4
        MOV          Mileage,A
        MOV          R6,count            ; Velocity=count/5;//將100ms內(nèi)的脈沖數(shù)/5
        MOV          R7,count+01H
        MOV          R4,#00H
        MOV          R5,#05H
        LCALL        ?C?UIDIV                ;除法子程序
        CLR          A
        MOV          Velocity+03H,R7
        MOV          Velocity+02H,R6
        MOV          Velocity+01H,A
        MOV          Velocity,A
        MOV          count,A
        MOV          count+01H,A
?C0028:                           ;出棧
        POP          AR7
        POP          AR6
        POP          AR5
        POP          AR4
        POP          AR3
        POP          AR2
        POP          AR1
        POP          AR0
        POP          PSW
        POP          DPL
        POP          DPH
        POP          B
        POP          ACC
        RETI                    ;T0中斷返回
        RSEG  COMABIAO
tab1:                                                ;定義字符串
        DB  ' ' ,' ' ,'S' ,'p' ,'e' ,'e' ,'d' ,':' ,' ' ,' '
        DB  ' ' ,' ' ,' ' ,' ' ,'k' ,'m' ,'/' ,'h' ,000H
tab2:
        DB  'M' ,'i' ,'l' ,'e' ,'a' ,'g' ,'e' ,':' ,' ' ,' '
        DB  '.' ,' ' ,' ' ,' ' ,'k' ,'m' ,000H
        END
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:235200 發(fā)表于 2020-7-10 23:04 | 只看該作者
本帖最后由 csmyldl 于 2020-7-10 23:05 編輯

        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity
這一段的意思是:首先搞清楚我們要進(jìn)行除法運(yùn)算的數(shù)存儲(chǔ)在哪里
在程序中定義了Velocity:   DS           4   即此地存放有1個(gè)4字節(jié)的數(shù)據(jù),這4個(gè)字節(jié)的地址分別是:Velocity,Velocity+1,Velocity+2,Velocity+3,這4個(gè)字節(jié)的數(shù)據(jù)要取出搬至通用寄存器中才能進(jìn)行運(yùn)算,如果第一字節(jié)搬到R4,就使用 MOV          R4,Velocity,第2個(gè)字節(jié)搬至R5,就使用MOV          R5,Velocity+01H,依次類推
回復(fù)

使用道具 舉報(bào)

板凳
ID:800037 發(fā)表于 2020-7-10 23:30 | 只看該作者
Velocity定義4 Byte存儲(chǔ)空間,四條MOV就是將Velocity地址存儲(chǔ)的四個(gè)字節(jié)分別讀進(jìn)寄存器R4 R5 R6 R7
回復(fù)

使用道具 舉報(bào)

地板
ID:801878 發(fā)表于 2020-7-13 19:20 | 只看該作者
錯(cuò)了 Velocity地址存儲(chǔ)的四個(gè)字節(jié)分別讀進(jìn)寄存器R4 R5 R6 R7
回復(fù)

使用道具 舉報(bào)

5#
ID:801878 發(fā)表于 2020-7-13 19:20 | 只看該作者
不對(duì) Velocity地址存儲(chǔ)的四個(gè)字節(jié)分別讀進(jìn)寄存器R4 R5 R6 R7
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表