以單片機8031為核心, 利用8279芯片實現(xiàn)按鍵輸入和利用數(shù)碼管顯示所測轉(zhuǎn)速,利用ADC0809將輸入電壓模擬量轉(zhuǎn)化為數(shù)字量(實驗箱內(nèi)部已接好相關(guān)接口)控制電機轉(zhuǎn)速的目的。然后利用DA0832將電機上的傳感器配合DA0832的CKMOT接口將脈沖信號接到8031的INT0,利用外中斷實現(xiàn)速度的測量,一次外中斷會使速度計數(shù)器自動加一,利用定時器產(chǎn)生一秒的計時,得出一秒內(nèi)速度計數(shù)器的值就可以得到電機的轉(zhuǎn)速。另定時計數(shù)器每250MS產(chǎn)生一次定時器中斷,利用中斷來檢測是否有新的控制信號輸入,以達(dá)到實時控制轉(zhuǎn)速的目的。
ORG 0000h ajmp main ORG 0003h ;外部中斷0 AJMP ZS ORG 000BH ;定時計數(shù)器0中斷 AJMP JS ORG 0100H main: mov sp,#60h CLR PSW.5 ;清零標(biāo)志位 SETB P1.0 ;置位檢測位 setb et0 SETB IT0 ;外部中斷0下降沿有效 SETB EX0 ;允許T0中斷 mov DPTR,#5FFFH ;8279初始化 MOV A,#0DCH MOVX @DPTR,A WAIT: MOVX A,@DPTR JB ACC.7,WAIT MOV A,#00H MOVX @DPTR,A MOV A,#34H MOVX @DPTR,A MOV R0,#30H ;清零所用數(shù)值緩沖區(qū) CL: MOV A,#00H MOV @R0,A INC R0 CJNE R0,#36H,CL MOV 36H,#200 MOV 37H,#20 ACALL DIR TIME: MOV TMOD,#02H ;一秒定時 MOV TH0,#6 MOV TL0,#6 SETB TR0 ;開啟T0中斷 SETB EA LOP2: JNB PSW.5,LOP3 CLR PSW.5 ACALL DIR ;到一秒顯示轉(zhuǎn)速 JMP LOP2 LOP3: MOV DPTR,#9FF4H ;啟動a/d MOVX @DPTR,A ;ACALL DELAY1 JB P1.0, $ MOVX A,@DPTR MOV DPTR,#7FFFH ;啟動d/a MOVX @DPTR,A AJMP LOP2 JS: PUSH ACC ;T0中斷子程序 DJNZ 36H,OUT DJNZ 37H,next ajmp next1 next: MOV 36H,#200 ajmp out next1:SETB PSW.5 MOV 33H,30H MOV 34H,31H MOV 35H,32H MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 MOV 36H,#200 MOV 37H,#20 OUT: POP ACC RETI ZS: PUSH ACC ;外部中斷子程序 CLR EX0 MOV A,30H ADD A,#1 DA A MOV 30H,A CJNE A,#99H,OUT1 MOV 30H,#0 MOV A,31H ADD A,#1 DA A MOV 31H,A CJNE A,#99H,OUT1 MOV 31H,#0 MOV A,32H ADD A,#1 DA A MOV 32H,A OUT1: SETB EX0 POP ACC RETI DIR: MOV R0,#33H MOV DPTR,#5FFFH MOV A,#92H MOVX @DPTR,A MOV R2,#03H LED: MOV A,@R0 ANL A,#0FH MOV DPTR,#LEDTAB MOVC A,@A+DPTR MOV DPTR,#5EFFH MOVX @DPTR,A MOV A,@R0 SWAP A ANL A,#0FH MOV DPTR,#LEDTAB MOVC A,@A+DPTR MOV DPTR,#5EFFH MOVX @DPTR,A INC R0 DJNZ R2,LED RET LEDTAB:DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H DELAY1: MOV R6,#5 DELAY2: MOV R7,#200 DJNZ R7,$ DJNZ R6,DELAY2 RET END