謝謝大家了!!!!!!!!!
;報警聲程序
;1.蜂鳴器和繼電器 共用p2.2 ,跳線J5設置到23端選中蜂鳴器
CODE_SEG SEGMENT CODE DATA_SEG SEGMENT DATA STACK_SEG SEGMENT IDATA SPK BIT P2.2 RSEG DATA_SEG FRQ: DS 1 TMP: DS 1 RSEG STACK_SEG STACK: DS 20 ;========================== CSEG AT 00000H LJMP MAIN CSEG AT 0000BH LJMP TIMER0 ;========================== RSEG CODE_SEG MAIN: USING 0 MOV SP,#(STACK-1) MOV TMOD,#01H CLR A MOV FRQ,A MOV TH0,A MOV TL0,#0FFH SETB TR0 MOV IE,#082H MAIN_LP: INC FRQ MOV R7,#04 ; LCALL DELAYMS SJMP MAIN_LP ; END OF main ;========================== TIMER0: MOV TH0,#0FEH MOV TL0,frq CPL SPK RETI ; END OF TIMER0 ;========================== DELAYMS: ; 延時子程序 ; 傳入?yún)?shù):R7 --- 延時值(MS) ; 返回值:無 MOV A,R7 JZ END_DLYMS DLY_LP1: MOV R6,#185 DLY_LP2: NOP NOP NOP DJNZ R6,DLY_LP2 DJNZ R7,DLY_LP1 END_DLYMS: RET END
;流水燈程序
PORT EQU P1
ORG 0000H ;主程序開始地址0000H
AJMP START ;跳轉到地址MAIN處執(zhí)行
ORG 0030H ;主程序地址0030H
START: CALL LEFT ;設定左移次數(shù),存放于寄存器R5
CALL RIGHT ;將數(shù)據(jù)FFH賦值給A
JMP START ;跳轉到START
;以下是左移子程序
LEFT: PUSH PSW ;將PSW壓入堆棧
SETB RS1 ;將RS1置1,同下一條指令一起
;選定寄存器組2
CLR RS0 ;將RS0置0
MOV R4,#8 ;將數(shù)據(jù)8賦值給R4
MOV A,#0FFH ;將數(shù)據(jù)FFH賦值給A
CLR C ;將進位位C清0
NEXT1: RLC A ;帶進位左移
MOV PORT,A ;將A中數(shù)據(jù)賦給P2
CALL LATER ;調用延時程序
DJNZ R4,NEXT1 ;R4=R4-1,R4≠0時,轉到NEXT1
POP PSW ;出棧到PSW
RET ;子程序結束,返回主程序
;以下是右移子程序
RIGHT: PUSH PSW ;PSW壓入堆棧
SETB RS1 ;將RS1置1,同下一條指令一起選定
;寄存器組2
SETB RS0 ;將RS0置1
MOV R4,#8 ;將數(shù)據(jù)8賦值給R4
MOV A,#0FFH ;將數(shù)據(jù)FFH賦值給A
CLR C ;將進位為清0
NEXT2: RRC A ;帶進位位右移A
MOV P1,A ;將A中數(shù)據(jù)賦給P2
CALL LATER ;調用延時程序
DJNZ R4,NEXT2 ;R4=R4-1,R4≠0時,轉到NEXT2
POP PSW ;出棧到PSW
RET ;子程序結束,返回主程序
;以下是延時子程序
LATER: MOV R7,#0FFH ;
AD1: MOV R6,#0A0H ;
AD2: DJNZ R6,AD2 ;
DJNZ R7,AD1 ;
RET ;
END
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |