📄 calc.sdi
字号:
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 + -