這是段直流電機閉環調速的程序,求大神幫忙啊!跪謝!!!
ORG 0000H SJMP DISPLAY ORG 0003H LJMP BUTTON ; 外部0中斷入口地址 ORG 000BH LJMP DINGSHI ; 定時中斷T0入口地址 RS EQU P3.0 RW EQU P3.1 E EQU P3.4 ORG 0030H ; 此次直流電機的設計以LCD字符夜晶的 ; 顯示程序為主程序 DISPLAY: SETB EA ; 打開中斷總開關 SETB EX0 ; 打開外部中斷0開關 SETB IT0 ; 打開外部中斷0下降沿觸發 MOV TMOD,#01H ; 設置定時工作方式 MOV TL0,#0FFH ; 設置定時初值 MOV TH0,#0FFH SETB ET0 ; 打開定時中斷T0開關 CLR P0.5 CLR P0.6 CLR P0.7 SETB TR0 ; 定時器T0開始定時 MOV DPTR,#TAB ; 夜晶顯示的字符首地址 MOV R0,#00H ; 脈寬的初值 MOV R1,#16 ; "SET SPEED PLEASE"的字符個數 MOV R3,#00H MOV R4,#00H LP9: LCALL CHUSHI LP2: ACALL BUSY MOV A,#00H MOVC A,@A+DPTR MOV P1,A ACALL DATAS INC DPTR DJNZ R1,LP2 LP3: CJNE R3,#00H,LP4 CJNE R4,#00H,LP4 SJMP LP3 LP4: MOV R7,#00H ; 中斷的標志 MOV R5,#09H ; CURRENT : 的字符個數 ACALL BUSY MOV P1,#0C0H ACALL ENABLE MOV DPTR,#MMTAB ACALL BUSY LP5: MOV A,#00H MOVC A,@A+DPTR MOV P1,A INC DPTR ACALL DATAS ACALL BUSY DJNZ R5,LP5 MOV DPTR,#STAB MOV A,R2 MOV P1,A ACALL DATAS ACALL BUSY MOV A,R3 ; 顯示速度的十位 MOVC A,@A+DPTR MOV P1,A ACALL DATAS ACALL BUSY MOV A,R4 ; 顯示速度的個位 MOVC A,@A+DPTR MOV P1,A ACALL DATAS ; 使夜晶始終顯示當前電機的速度 LP8: CJNE R7,#00H,LP7 ; 速度不變時等待 LJMP LP8 ; 速度變時重新讀入速度 LP7: SJMP LP4 CHUSHI: ; 使夜晶顯示的一些初始設置 ACALL BUSY MOV P1,#00000001B ; 清屏并光標復位 ACALL ENABLE ACALL BUSY MOV P1,#00111000B ; 設置顯示模式:8位2行5×7點陣 ACALL ENABLE ACALL BUSY MOV P1,#00001111B ; 顯示器開、光標開、光標允許閃爍 ACALL ENABLE ACALL BUSY MOV P1,#00000110B ; 文字不動,光標自動右移 ACALL ENABLE ACALL BUSY MOV P1,#80H ; 寫入顯示起始地址 ACALL ENABLE RET ENABLE: ; 寫入控制命令的子程序 SETB E CLR RS CLR RW CLR E RET DATAS: ; 寫入數據子程序 SETB E SETB RS CLR RW CLR E RET BUSY: ; 準備寫入數據 CLR E MOV P1,#0FFH CLR RS SETB RW SETB E JB P1.7,BUSY RET ORG 2000H DINGSHI: ; 定時中斷服務程序 CPL P0.7 JNB P0.7,Z1 ; 周期一定 MOV A,#0FFH SUBB A,R0 MOV TH0,A SETB TR0 RETI Z1: MOV TH0,R0 ; 脈寬 SETB TR0 RETI BUTTON: ; 從控制鍵盤中讀取操作命令 PUSH ACC CLR EX0 CLR EA INC R7 ; MOV A,#0FFH MOV P2,A MOV A,P2 JNB ACC.0,AA0 JNB ACC.1,KK0 JNB ACC.2,ZZ JNB ACC.3,FF JNB ACC.4,WW0 AJMP QQ AA0: CJNE R0,#0FFH, AA1 ; 加速操作 AJMP QQ AA1: MOV A,R0 ADD A,#5 MOV R0,A AJMP QQ KK0: CJNE R0,#00,MM ; 減速操作 AJMP QQ MM: MOV A,R0 SUBB A,#5 MOV R0,A AJMP QQ QQ: MOV A,R0 MOV B,#5 DIV AB MOV B,#10 DIV AB MOV R3,A MOV R4,B SETB EX0 LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY SETB EA POP ACC RETI ZZ: SETB P0.5 ; 正轉操作 CLR P0.6 MOV R2,#2BH ; 正轉標志 "+" LCALL DELAY LCALL DELAY LCALL DELAY SETB EX0 SETB EA POP ACC RETI FF: CLR P0.5 ; 反轉操作 SETB P0.6 MOV R2,#2DH ; 反轉標志 "-" LCALL DELAY LCALL DELAY LCALL DELAY SETB EX0 SETB EA POP ACC RETI WW0: CLR P0.5 ; 停止操作 CLR P0.6 LCALL DELAY LCALL DELAY LCALL DELAY SETB EX0 SETB EA POP ACC RETI DELAY: ; 延時子程序 MOV R5,#0E0H MM0: MOV R6,#30H MM1: DJNZ R6,MM1 DJNZ R5,MM0 RET TAB: DB 53H,45H,54H,20H DB 53H,50H,45H,45H ; "SET SPEED PLEASE" 代碼 DB 44H,20H,50H,4CH DB 45H,41H,53H,45H STAB: DB 30H,31H,32H,33H DB 34H,35H,36H,37H ; "0,1,2,3,4,5,6,7" 代碼 DB 38H,39H,41H,42H ; "8,9,A,B,C,D,E,F" DB 43H,44H,45H,46H MMTAB: DB 43H,4FH,52H,52H DB 45H,4EH,54H,20H ; " CURRENT : " 代碼 DB 3AH END |