谢谢大家了!!!!!!!!!
;报警声程序
;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: ; 延时子程序 ; 传入参数: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处执行 ORG 0030H ;主程序地址0030H START: CALL LEFT ;设定左移次数,存放于寄存器R5 CALL RIGHT ;将数据FFH赋值给A JMP START ;跳转到START ;以下是左移子程序 LEFT: PUSH PSW ;将PSW压入堆栈 SETB RS1 ;将RS1置1,同下一条指令一起 ;选定寄存器组2 CLR RS0 ;将RS0置0 MOV R4,#8 ;将数据8赋值给R4 MOV A,#0FFH ;将数据FFH赋值给A CLR C ;将进位位C清0 NEXT1: RLC A ;带进位左移 MOV PORT,A ;将A中数据赋给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 ;将数据8赋值给R4 MOV A,#0FFH ;将数据FFH赋值给A CLR C ;将进位为清0 NEXT2: RRC A ;带进位位右移A MOV P1,A ;将A中数据赋给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://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |