⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calc.sdi

📁 代码保护功能处于持续发展中。Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏Microchip 代码保护功能的行为均可视 为违反了《数字器件千年版权法案(Digital Mille
💻 SDI
📖 第 1 页 / 共 2 页
字号:
0000008B,1087,,        BCF     PORTC,1
0000008C,2030,,        CALL    onems
,,,
0000008D,1A07,,        BTFSC   PORTC,4         ; button 4?
0000008E,2894,,        GOTO    b5              ; no
0000008F,3034,,        MOVLW   '4'             ; yes
00000090,00B0,,        MOVWF   Char
00000091,3004,,        MOVLW   04
00000092,00C0,,        MOVWF   Kval
00000093,0008,,        RETURN
,,,
00000094,1A87,b5,b5      BTFSC   PORTC,5         ; button 5?
00000095,289B,,        GOTO    b6              ; no
00000096,3035,,        MOVLW   '5'             ; yes
00000097,00B0,,        MOVWF   Char
00000098,3005,,        MOVLW   05
00000099,00C0,,        MOVWF   Kval
0000009A,0008,,        RETURN
,,,
0000009B,1B07,b6,b6      BTFSC   PORTC,6         ; button 6?
0000009C,28A2,,        GOTO    bm              ; no
0000009D,3036,,        MOVLW   '6'             ; yes
0000009E,00B0,,        MOVWF   Char
0000009F,3006,,        MOVLW   06
000000A0,00C0,,        MOVWF   Kval
000000A1,0008,,        RETURN
,,,
000000A2,1B87,bm,bm      BTFSC   PORTC,7         ; button x?
000000A3,28A8,,        GOTO    rowc            ; no
000000A4,3078,,        MOVLW   'x'             ; yes
000000A5,00B0,,        MOVWF   Char
000000A6,00B4,,        MOVWF   Oper
000000A7,0008,,        RETURN
,,,
000000A8,1487,rowc,rowc    BSF     PORTC,1         ; select row C
000000A9,1107,,        BCF     PORTC,2
000000AA,2030,,        CALL    onems
,,,
000000AB,1A07,,        BTFSC   PORTC,4         ; button 1?
000000AC,28B2,,        GOTO    b2              ; no
000000AD,3031,,        MOVLW   '1'             ; yes
000000AE,00B0,,        MOVWF   Char
000000AF,3001,,        MOVLW   01
000000B0,00C0,,        MOVWF   Kval
000000B1,0008,,        RETURN
,,,
000000B2,1A87,b2,b2      BTFSC   PORTC,5         ; button 2?
000000B3,28B9,,        GOTO    b3              ; no
000000B4,3032,,        MOVLW   '2'             ; yes
000000B5,00B0,,        MOVWF   Char
000000B6,3002,,        MOVLW   02
000000B7,00C0,,        MOVWF   Kval
000000B8,0008,,        RETURN
,,,
000000B9,1B07,b3,b3      BTFSC   PORTC,6         ; button 3?
000000BA,28C0,,        GOTO    bs              ; no
000000BB,3033,,        MOVLW   '3'             ; yes
000000BC,00B0,,        MOVWF   Char
000000BD,3003,,        MOVLW   03
000000BE,00C0,,        MOVWF   Kval
000000BF,0008,,        RETURN
,,,
000000C0,1B87,bs,bs      BTFSC   PORTC,7         ; button -?
000000C1,28C6,,        GOTO    rowd            ; no
000000C2,302D,,        MOVLW   '-'             ; yes
000000C3,00B0,,        MOVWF   Char
000000C4,00B4,,        MOVWF   Oper
000000C5,0008,,        RETURN
,,,
000000C6,1507,rowd,rowd    BSF     PORTC,2         ; select row D
000000C7,1187,,        BCF     PORTC,3
000000C8,2030,,        CALL    onems
,,,
000000C9,1A07,,        BTFSC   PORTC,4         ; button C?
000000CA,28CF,,        GOTO    b0              ; no
000000CB,3063,,        MOVLW   'c'             ; yes
000000CC,00B0,,        MOVWF   Char
000000CD,00B4,,        MOVWF   Oper
000000CE,0008,,        RETURN
,,,
000000CF,1A87,b0,b0      BTFSC   PORTC,5         ; button 0?
000000D0,28D6,,        GOTO    be              ; no
000000D1,3030,,        MOVLW   '0'             ; yes
000000D2,00B0,,        MOVWF   Char
000000D3,3000,,        MOVLW   00
000000D4,00C0,,        MOVWF   Kval
000000D5,0008,,        RETURN
,,,
000000D6,1B07,be,be      BTFSC   PORTC,6         ; button =?
000000D7,28DB,,        GOTO    bp              ; no
000000D8,303D,,        MOVLW   '='             ; yes
000000D9,00B0,,        MOVWF   Char
000000DA,0008,,        RETURN
,,,
000000DB,1B87,bp,bp      BTFSC   PORTC,7         ; button +?
000000DC,28E1,,        GOTO    done            ; no
000000DD,302B,,        MOVLW   '+'             ; yes
000000DE,00B0,,        MOVWF   Char
000000DF,00B4,,        MOVWF   Oper
000000E0,0008,,        RETURN
,,,
000000E1,1587,done,done    BSF     PORTC,3         ; clear last row
000000E2,01B0,,        CLRF    Char            ; character code = 0
000000E3,0008,,        RETURN
,,,
,,,
,,,; Write display ...........................................
,,,
000000E4,0837,disout,disout  MOVF    Kcode,W         ; Load the code
000000E5,14F4,,        BSF     Select,RS       ; Select data mode
000000E6,2040,,        CALL    send            ; and send code
000000E7,0008,,        RETURN
,,,
,,,; Process operations ......................................
,,,
000000E8,0834,calc,calc    MOVF    Oper,W          ; check for add
000000E9,00B5,,        MOVWF   Temp            ; load input op code
000000EA,302B,,        MOVLW   '+'             ; load plus code
000000EB,02B5,,        SUBWF   Temp            ; compare
000000EC,1903,,        BTFSC   STATUS,Z        ; and check if same
000000ED,2901,,        GOTO    add             ; yes, jump to op
,,,
000000EE,0834,,        MOVF    Oper,W          ; check for subtract
000000EF,00B5,,        MOVWF   Temp
000000F0,302D,,        MOVLW   '-'
000000F1,02B5,,        SUBWF   Temp
000000F2,1903,,        BTFSC   STATUS,Z
000000F3,2905,,        GOTO    sub
,,,
000000F4,0834,,        MOVF    Oper,W          ; check for multiply
000000F5,00B5,,        MOVWF   Temp
000000F6,3078,,        MOVLW   'x'
000000F7,02B5,,        SUBWF   Temp
000000F8,1903,,        BTFSC   STATUS,Z
000000F9,2912,,        GOTO    mul
,,,
000000FA,0834,,        MOVF    Oper,W          ; check for divide
000000FB,00B5,,        MOVWF   Temp
000000FC,302F,,        MOVLW   '/'
000000FD,02B5,,        SUBWF   Temp
000000FE,1903,,        BTFSC   STATUS,Z
000000FF,2918,,        GOTO    div
00000100,2813,,        GOTO    scan            ; rescan if key invalid
,,,
,,,
,,,; Calclate results from 2 input numbers ...................
,,,
00000101,0831,add,add     MOVF    Num1,W          ; get first number
00000102,0732,,        ADDWF   Num2,W          ; add second
00000103,00B3,,        MOVWF   Result          ; and store result
00000104,292F,,        GOTO    outres          ; display result
,,,
,,,
00000105,1403,sub,sub     BSF     STATUS,C        ; Negative detect flag
00000106,0832,,        MOVF    Num2,W          ; get first number
00000107,0231,,        SUBWF   Num1,W          ; subtract second
00000108,00B3,,        MOVWF   Result          ; and store result
,,,
00000109,1C03,,        BTFSS   STATUS,C        ; answer negative?
0000010A,290C,,        GOTO    minus           ; yes, minus result
0000010B,292F,,        GOTO    outres          ; display result
,,,
0000010C,302D,minus,minus   MOVLW   '-'             ; load minus sign
0000010D,14F4,,        BSF     Select,RS       ; Select data mode
0000010E,2040,,        CALL    send            ; and send symbol
,,,
0000010F,09B3,,        COMF    Result          ; invert all bits
00000110,0AB3,,        INCF    Result          ; add 1
00000111,292F,,        GOTO    outres          ; display result
,,,
,,,
00000112,0831,mul,mul     MOVF    Num1,W          ; get first number
00000113,01B3,,        CLRF    Result          ; total to Z
00000114,07B3,add1,add1    ADDWF   Result          ; add to total
00000115,0BB2,,        DECFSZ  Num2            ; num2 times and
00000116,2914,,        GOTO    add1            ; repeat if not done
00000117,292F,,        GOTO    outres          ; done, display result
,,,
,,,
00000118,01B3,div,div     CLRF    Result          ; total to Z
00000119,0832,,        MOVF    Num2,W          ; get divisor
0000011A,1003,,        BCF     STATUS,C        ; set C flag
0000011B,0AB3,sub1,sub1    INCF    Result          ; count loop start
0000011C,02B1,,        SUBWF   Num1            ; subtract
0000011D,1D03,,        BTFSS   STATUS,Z        ; exact answer?
0000011E,2920,,        GOTO    neg             ; no
0000011F,292F,,        GOTO    outres          ; yes, display answer
00000120,1803,neg,neg     BTFSC   STATUS,C        ; gone negative?
00000121,291B,,        GOTO    sub1            ; no - repeat
00000122,03B3,,        DECF    Result          ; correct the result
00000123,0832,,        MOVF    Num2,W          ; get divisor
00000124,07B1,,        ADDWF   Num1            ; calc remainder
,,,
00000125,0833,,        MOVF    Result,W        ; load result
00000126,3E30,,        ADDLW   030             ; convert to ASCII
00000127,14F4,,        BSF     Select,RS       ; Select data mode
00000128,2040,,        CALL    send            ; and send result
,,,
00000129,3072,,        MOVLW   'r'             ; indicate remainder
0000012A,2040,,        CALL    send
0000012B,0831,,        MOVF    Num1,W
0000012C,3E30,,        ADDLW   030             ; convert to ASCII
0000012D,2040,,        CALL    send
0000012E,2813,,        GOTO    scan
,,,
,,,
,,,; Convert binary to BCD ...................................
,,,
0000012F,0833,outres,outres  MOVF    Result,W        ; load result
00000130,00B9,,        MOVWF   Lsd             ; into low digit store
00000131,01B8,,        CLRF    Msd             ; high digit = 0
00000132,1403,,        BSF     STATUS,C        ; set C flag
00000133,300A,,        MOVLW   D'10'           ; load 10
,,,
00000134,02B9,again,again   SUBWF   Lsd             ; sub 10 from result
00000135,0AB8,,        INCF    Msd             ; inc high digit
00000136,1803,,        BTFSC   STATUS,C        ; check if negative
00000137,2934,,        GOTO    again           ; no, keep going
00000138,07B9,,        ADDWF   Lsd             ; yes, add 10 back
00000139,03B8,,        DECF    Msd             ; inc high digit
,,,
,,,
,,,; display 2 digit BCD result ..............................
,,,
0000013A,0838,,        MOVF    Msd,W           ; load high digit result
0000013B,1903,,        BTFSC   STATUS,Z        ; check if Z
0000013C,2940,,        GOTO    lowd            ; yes, dont display Msd
,,,
0000013D,3E30,,        ADDLW   030             ; convert to ASCII
0000013E,14F4,,        BSF     Select,RS       ; Select data mode
0000013F,2040,,        CALL    send            ; and send Msd
,,,
00000140,0839,lowd,lowd    MOVF    Lsd,W           ; load low digit result
00000141,3E30,,        ADDLW   030             ; convert to ASCII
00000142,14F4,,        BSF     Select,RS       ; Select data mode
00000143,2040,,        CALL    send            ; and send Msd
,,,
00000144,2813,,        GOTO    scan            ; scan for clear key
,,,
,,,
,,,; Restart ................................................
,,,
00000145,3001,clear,clear   MOVLW   01              ; code to clear display
00000146,10F4,,        BCF     Select,RS       ; Select data mode
00000147,2040,,        CALL    send            ; and send code
00000148,01B6,,        CLRF    Kcount          ; reset count of keys
00000149,2813,,        GOTO    scan            ; and rescan keypad
,,,
,,,
,,,        END     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -