到昨天为止,用了一个星期写了一个汇编程序,是这个学期课程设计的作业。这大概是我接触到的最长的一个汇编了吧,感觉真 BT。
目的很简单,就是有八个按钮,分别控制千、百、十、个位的+-(比如按百位的 + 数字就加 100),带进位,在 4 个 7 晶体管上显示相应的 4 位数字,初始值为 0000。
ORG 8000H LJMP MAINORG 8003H LJMP PKEYIORG 8100HMAIN: MOV R1,#7BH MOV R6,#4HSTART: MOV @R1,#0 DEC R1 DJNZ R6,START LCALL INI79 LCALL RDIRPROGN: JNB 00H,PROGN CLR 00H MOV R0,#40H MOV A,@R0 CJNEA,#00,NEXT1 LCALL PROGN0NEXT1: CJNE A,#02,NEXT2 LCALL PROGN1NEXT2: CJNE A,#03,NEXT3 LCALL PROGN2NEXT3: CJNE A,#04,NEXT4 LCALL PROGN3NEXT4: CJNE A,#05,NEXT5 LCALL PROGN4NEXT5: CJNE A,#06,NEXT6 LCALL PROGN5NEXT6: CJNE A,#07,NEXT7 LCALL PROGN6NEXT7: CJNE A,#08,PROGN LCALL PROGN7 LCALL 8900H LJMP PROGNORG 8400HPROGN0: MOV R1,#7BH MOV A,@R1 CJNE A,#9H,ADD0 MOV @R1,#00H LJMP EXIT0ADD0: INC @R1EXIT0: LCALL 8900H RETORG 8450HPROGN1: MOV R1,#7BH MOV A,@R1 CJNE A,#0H,SUB0 LJMP EXIT1SUB0: DEC @R1EXIT1: LCALL 8900H RETORG 8500HPROGN2: MOV R1,#7AH MOV A,@R1 CJNE A,#9H,ADD1 MOV @R1,#0H LCALL PROGN0 LJMP EXIT2ADD1: INC @R1EXIT2: LCALL 8900H RETORG 8550HPROGN3: MOV R1,#7AH MOV A,@R1 CJNE A,#0H,SUB1 MOV @R1,#9H LCALL PROGN1 LJMP EXIT3SUB1: DEC @R1EXIT3: LCALL 8900H RETORG 8600HPROGN4: MOV R1,#79H MOV A,@R1 CJNE A,#9H,ADD2 MOV @R1,#0H LCALL PROGN2 LJMP EXIT4ADD2: INC @R1EXIT4: LCALL 8900H RETORG 8650HPROGN5: MOV R1,#79H MOV A,@R1 CJNE A,#9H,SUB2 MOV @R1,#9H LCALL PROGN3 LJMP EXIT5SUB2: DEC @R1EXIT5: LCALL 8900H RETORG 8700HPROGN6: MOV R1,#78H MOV A,@R1 CJNE A,#9H,ADD3 MOV @R1,#0H LCALL PROGN4 LJMP EXIT6ADD3: INC @R1EXIT6: LCALL 8900H RETORG 8750HPROGN7: MOV R1,#78H MOV A,@R1 CJNE A,#0H,SUB3 MOV @R1,#9H LCALL PROGN5 LJMP EXIT7SUB3: DEC @R1EXIT7: LCALL 8900H RETORG 8800HINI79: MOV DPTR,#0DFFFH MOV A,#0DCH MOVX @DPTR,AWNDU: MOVX A,@DPTR JB ACC.7,WNDU MOV A,#0 MOVX @DPTR,A MOV A,#34 MOVX @DPTR,A MOV IE,#81H RETORG 8900HRDIR: MOV DPTR,#0DFFFH MOV A, #90H MOVX @DPTR,A MOV R0,#7BH MOV R7,#4 MOV DPTR,#0DEFFHRDL0: MOV A,@R0 ADD A,#6 MOVC A,@A+PC CPL A MOVX @DPTR,A DEC R0 DJNZ R7,RDL0 RETSEG: DB 3FH,6,5BH,4FH, DB 66H,6DH, DB 7DH,7,7FH,6FH, DB 77H,7CH DB 39H,5EH,79H,71H, DB 73H,3EH, DB 31H,6FH,1CH,23H,40H,3, DB 18H,38H,0ORG 8A00HPKEYI: PUSH PSW PUSH DPL PUSH DPH PUSH ACC PUSH B SETB PSW.3 MOV DPTR,#0DFFFH MOVX A,@DPTR ANL A,#0FH JZ PKYR MOV A,#40H MOVX @DPTR,A MOV DPTR,#0DEFFH MOVX A,@DPTR MOV R2,A ANL A,#18H RR A RR A RR A MOV B,#2 MUL AB XCH A,R2 ANL A,#3 ADD A,R2 MOV R0,#40H MOV @R0,A SETB 0PKYR: POP B POP ACC POP DPH POP DHL POP PSW RET1