- ;以下是直流電機調速的程序,芯片選用2051
- ;晶振用12M
- ;選用2051單片機
- ;2006.05.18
- ; _____________
- ;|RST VDD |
- ;LED1 |P3.0 P1.7|G
- ;LED2; |P3.1 P1.6|D
- ;|XTAL2 P1.5|H
- ;|XTAL1 P1.4|E
- ; |P3.2 P1.3|C
- ;過零檢測 |P3.3 P1.2|F
- ;設定按鍵盤 |P3.4 P1.1|A
- ;加一按鍵盤 |P3.5 P1.0|B
- ;|VSS P3.7|電機輸出
- ;-------------
- LED1 BIT P3.0
- LED2 BIT P3.1
- KEY1 BIT P3.4
- KEY2 BIT P3.5
- OUT BIT P3.7
- KG BIT P3.2
- OFF BIT 02H
- ON BIT 03H
- NC BIT 04H
- NO BIT 05H
- POWER DATA 7FH
- YAS DATA 7EH
- DATA1 DATA 40H
- ;*********************************************
- ;*********************************************
- ;********************************************* ;晶振為12M
- ORG 0000H
- AJMP MAIN ;轉入主程序
- ORG 0003H ;外部中斷DATA_IN腳INT0入口地址
- NOP
- NOP
- NOP ;轉入外部中斷服務子程序(解碼程序)
- LJMP ERR ;軟件陷阱
- NOP
- NOP
- LJMP ERR ;軟件陷阱
- ORG 000BH
- LJMP ERR
- NOP
- NOP
- LJMP ERR ;軟件陷阱
- ORG 0013H
- LJMP TS
- NOP
- NOP
- LJMP ERR ;軟件陷阱
- ORG 001BH
- LJMP YAS_1MS
- NOP
- NOP
- LJMP ERR ;軟件陷阱
- ORG 0023H
- LJMP ERR ;軟件陷阱
- NOP
- NOP
- LJMP ERR ;軟件陷阱
- ;************************************************
- ;以下為主程序進行CPU中斷方式設置
- ;******************************************************
- ;******************************************************************
- ;以下對單片機的所有引腳進行初始化,全部設置成高電平
- ;**********************************************************************
- MAIN: MOV PSW,#00H ;設為0號寄存器
- MOV P1,#0FFH
- MOV P3,#0FFH
- MOV 20H,#00H ;清除所有標志位
- MOV 30H,#0BH
- MOV 31H,#03H
- MOV 32H,#00H
- MOV 33H,#00H
- MOV 34H,#00H
- MOV 35H,#00H
- MOV 36H,#00H
- MOV 37H,#00H
- SETB IT1 ;設定INT1的觸發(fā)方式為脈沖負邊沿觸發(fā)
- SETB EX1 ;打開INT1中斷請求
- ; MOV TH0,#0B1H
- ;MOV TL0,#0E0H
- MOV TH1,#0FCH
- MOV TL1,#18H
- ;SETB ET0
- SETB ET1
- ; SETB TR0
- ; SETB PT0
- SETB PT1 ;啟動T0計數(shù)
- MOV TMOD,#11H ;設置T0為方式1工作狀態(tài)
- SETB EA ;打開CPU總中斷請求
- MOV SP,#60H ;設置堆棧地址為60H開始
- NOP
- XS_1: LCALL XS
- NOP
- NOP
- AJMP XS_1
- ;*************************************************
- ;************顯示子程序***************************
- ;*************************************************
-
-
- XS: MOV R0,#30H
- MOV R1,#32H
- MOV B,#0AH
- MOV A,@R0
- DIV AB
- MOV @R1,B
- INC R1
- MOV @R1,A
- MOV A,@R1
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- DEC R1
- MOV P1,A
- CLR LED1
- LCALL YAS_300
- SETB LED1
- MOV A,@R1
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P1,A
- CLR LED2
- LCALL YAS_300
- SETB LED2
- MOV P1,#0FFH
- XS4: RET
-
- ;*********************************************
- ;*************過零觸發(fā)加鍵盤掃描************
- ;********************************************
-
- TS: INC 37H
- MOV A,37H
- SUBB A,#0EH
- JC EE2
- MOV 37H,#00H
- JB KEY1,EE
- MOV A,30H
- SUBB A,#19H
- JNC EE
- INC 30H
- ;********************************************
- EE: JB KEY2,EE1
- CLR C
- MOV A,30H
- SUBB A,#0CH
- JC EE1
- DEC 30H
- EE1: JB KG,EE2
- NOP
- NOP
- CPL ON
- JNB ON,EE3
- MOV 38H,#03H
- MOV 39H,#255
- AJMP EE2
- EE3: MOV 38H,#00H
- MOV 39H,#0
- CLR ON
- CLR OFF
- ;********************************************
- EE2: JNB ON,EXIT2
- CLR EX1
- PUSH ACC
- PUSH PSW
- MOV PSW,#10H
- ;MOV A,34H
- ;JNZ EXIT
- MOV A,#1EH
- SUBB A,30H
- MOV 40H,A
- JNB OFF,TS1
- MOV 40H,#05H
- TS1: LCALL XS
- NOP
- DJNZ 40H,TS1
- CLR OUT
- LCALL YS3
- SETB OUT
- MOV 40H,#09H
- SETB TR1
- TS3: LCALL XS
- NOP
- NOP
- MOV A,40H
- JNZ TS3
- CLR OUT
- LCALL YS3
- SETB OUT
- NOP
- NOP
-
-
- ;**********************************************
-
- EXIT: DJNZ 39H,EXIT2
- SETB OFF
- DJNZ 38H,EXIT3
- CLR ON
- CLR OFF
- AJMP EXIT2
- EXIT3: MOV 39H,#256
- EXIT2: POP PSW
- POP ACC
- CLR TR1
- SETB EX1
- MOV 40H,#00H
- NOP
- NOP
- RETI
-
-
-
- ;*************************************************
- YAS_1MS:
- MOV TH1,#0FCH
- MOV TL1,#18H
- PUSH ACC
- PUSH PSW
- MOV A,40H
- JZ EXIT_1
- DEC 40H
- EXIT_1: POP PSW
- POP ACC
- NOP
- NOP
- RETI
-
-
-
-
- ;*****************************************************
- ;精確延時1000微秒************************************
- ;***************************************************
- YS3: MOV R4,#02H ;延時程序3,精確延時1000微秒
- D3: MOV R5,#0F7H
- DJNZ R5,$
- DJNZ R4,D3
- RET
- ;*****************************************************
- ;*************精確延時100微秒***********************
- ;***************************************************
-
-
- YAS_300: MOV R5,#31H
- DJNZ R5,$
- RET
-
- ;*************************************************
- ;***********顯示碼******************************
- ;*************************************************
- TAB: DB 0A0H,0F6H,2CH,34H
- DB 72H,31H,21H,0F4H
- DB 20H,30H,60H,23H
- DB 0A9H,26H,29H,69H
- ;*************************************************
- ;********軟件復位***************
- ;************************************************
- WTD: PUSH ACC
- PUSH PSW
- MOV TH1,#3CH
- MOV TL1,#0B0H
- POP PSW
- POP ACC
- RETI
- ERR: CLR EA
- MOV DPTR,#ERR1
- PUSH DPL
- PUSH DPH
- RETI
- ERR1: MOV POWER,#0AAH
- CLR A
- PUSH ACC
- PUSH ACC
- RETI
- END
復制代碼
|