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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2138|回復: 4
收起左側

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

[復制鏈接]
回帖獎勵 90 黑幣 回復本帖可獲得 18 黑幣獎勵! 每人限 1 次
ID:731979 發(fā)表于 2020-7-10 20:49 | 顯示全部樓層 |閱讀模式
代碼里的這部分的意思我不太清除,想請大佬指教一下,謝了
        MOV          R7,Velocity+03H
        MOV          R6,Velocity+02H
        MOV          R5,Velocity+01H
        MOV          R4,Velocity

----------------------------------------------------------------------------
NAME        MABIAO                         ;定義1602相關管腳
COUNT_IN        EQU P3.2                ; 計數(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)                ;無符號長型除法程序                                                ;
        EXTRN        CODE (?C?ULCMP)                ;無符號長型比較程序                                                               
        EXTRN        CODE (?C_STARTUP)
        EXTRN        CODE (?C?LMUL)          ;長型乘法程序
        EXTRN        CODE (?C?UIDIV)          ;無符號整型除法程序
        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預留1 BIT的空間
        RSEG  DTMABIAO                                  ;count定義2 byte存儲空間
count:           DS           2                         ;Mileage定義4 Byte存儲空間
Mileage:           DS           4                        ;Velocity定義4 Byte存儲空間
Velocity:   DS           4
        RSEG  delayMABIAO
L?0036:
        USING        0
        MOV          P0,R7
        MOV          R7,#01H
        MOV          R6,#00H
        LCALL        _delay
        SETB         en
_delay:                                                ;延時函數(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ā)      
        MOV          TMOD,#01H                                ;定時器工作于方式1
        MOV          TH0,#03CH                                ;50ms定時初值
        MOV          TL0,#0B0H                                ;
        SETB         EA                                                ;CPU開中斷總允許
        SETB         ET0                                                ;開定時中斷
        SETB         EX0                                                ;開外部INTO中斷
        SETB         TR0                                                ;啟動定時
        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                         ;無符號長型除法程序;
        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                        ;設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)
        LCALL        _write_1602com                       
        MOV          R7,#0CH                                ;開顯示不顯示光標
        LCALL        _write_1602com
        MOV          R7,#06H                                ;整屏不移動,光標自動右移
        LCALL        _write_1602com
        MOV          R7,#01H                                ;清顯示
        LCALL        _write_1602com
        MOV          R7,#080H                        ;顯示固定符號從第一行第1個位置之后開始顯示
        LCALL        _write_1602com
        CLR          A
        MOV          R1,A
?C0011:

        MOV          A,R1
        MOV          DPTR,#tab1                        ;向液晶屏寫固定符號部分
        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                                ;顯示固定符號寫入位置,從第2個位置后開始顯示
        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                   ;無符號長型除法程序
        CLR          A
        MOV          R3,A
        MOV          R2,A
        MOV          R1,A
        MOV          R0,A
        CLR          C
        LCALL        ?C?ULCMP                  ; 無符號長型比較程序
        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                   ;計數(shù)脈沖值+1
?C0031:

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


CSEG        AT        0000BH
        LJMP        time0


        RSEG  PRtime0MABIAO
        USING        0
time0:                                ;定時器中斷函數(shù)
        PUSH         ACC
        PUSH         B                ;入棧保護
        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定時初值
        MOV          TL0,#0B0H
        INC          L0                            ;每中斷一次(L0)+1
        MOV          A,L0                         ; (L0)->A
        CLR          C
        SUBB         A,#0AH                         ;寄存器A中內(nèi)容與10比較
        JC           ?C0028                         ;不相等則轉移至?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
回復

使用道具 舉報

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

使用道具 舉報

ID:800037 發(fā)表于 2020-7-10 23:30 | 顯示全部樓層
Velocity定義4 Byte存儲空間,四條MOV就是將Velocity地址存儲的四個字節(jié)分別讀進寄存器R4 R5 R6 R7
回復

使用道具 舉報

ID:801878 發(fā)表于 2020-7-13 19:20 | 顯示全部樓層
錯了 Velocity地址存儲的四個字節(jié)分別讀進寄存器R4 R5 R6 R7
回復

使用道具 舉報

ID:801878 發(fā)表于 2020-7-13 19:20 | 顯示全部樓層
不對 Velocity地址存儲的四個字節(jié)分別讀進寄存器R4 R5 R6 R7
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情久久久 | 成人在线精品视频 | 中文字幕亚洲一区二区三区 | 国产成人福利在线观看 | 亚洲第一av | 久久久91精品国产一区二区三区 | 国产精品不卡 | 成人免费三级电影 | 日本免费小视频 | 特一级毛片 | 91精品国产麻豆 | 国产二区在线播放 | 国内av在线| 99reav| 亚洲女人天堂成人av在线 | 九九av| 国产高清视频一区二区 | 久久综合九九 | 久久9精品| www.日韩欧美 | 超碰最新在线 | 国产精品久久久久无码av | 精品一区二区三区91 | 成人av播放 | 国产欧美日韩久久久 | 久久精品久久久久久 | 国产成人综合网 | a免费视频| 久久久精品网 | 中文字幕日韩一区 | 老司机深夜福利网站 | 久久精品国产久精国产 | 日干夜操 | 欧美1区2区| 伊人亚洲 | 无毛av| 9999国产精品欧美久久久久久 | 亚州av| 在线观看国产91 | 99久久精品免费看国产免费软件 | 久久国产精品一区二区三区 |