C-51单片机实验汇编语言程序
(1):A/D转换
ORG 0000H
MOV R1,#30H MOV DPTR,#0F7F8H ;DPTR指向#F7FAH通道 MOVX @DPTR,A ;启动A/D转换 MOV R2,#20H DLY:DJNZ R2,DLY ;若R2-1不等于0,等待 HF:JNB P1.0,HF ;等待转换结束 MOVX A,@DPTR ;读取A/D转换数据 MOV @R1,A ;存储数据到30H HD:SJMP HD ;等待
END
(2)交通灯
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0
ORG 000BH
LJMP TIME
ORG 0013H
LJMP INT1
ORG 0100H
MAIN:MOV TMOD,#01H ;初始化
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB EX0
SETB EX1
SETB ET0
SETB IT0
SETB IT1
CLR P0.1
MOV R7,#20
SETB TR0
LOOP:MOV A,#21H
CPL A
MOV P1,A ;A绿B红
MOV R6 ,#10 LOOP1:JNB P0.1,LOOP1
CLR P0.1
DJNZ R6,LOOP1 ;判断10S定时到否
CLR TR0
ACALL SHAN1 ;调用A黄闪B红子程序
SETB TR0
MOV A,#0CH
CPL A
MOV P1,A ;A红B绿
MOV R6,#10 LOOP3:JNB P0.1,LOOP3
CLR P0.1
DJNZ R6,LOOP3
CLR TR0
ACALL SHAN2 ;调用B黄闪A红子程序
SETB TR0
AJMP LOOP
SHAN1:MOV R5,#3
LOOP4:MOV A,#11H
CPL A
MOV P1,A ;A黄亮
ACALL TIME1
MOV A,#01H
CPL A
MOV P1,A ;A黄灭
ACALL TIME1
DJNZ R5,LOOP4 ;闪3次返回
RET
(3)锯齿波
ORG 0000H
START: MOV DPTR,#7FFFH ;输入寄存器地址
CLR A ;转换初值 LOOP:MOVX @DPTR,A ;D/A转换
INC A ;转换值增量
SJMP LOOP END
(4)三角波
ORG 0000H
MOV DPTR,#7FFFH ;输入寄存器地址 CLR A ;转换初值 DOWN:MOVX @DPTR,A ;D/A转换线性下降段
INC A ;转换值加1 CJNE A,#0FFH,DOWN UP:MOVX @DPTR,A ;D/A转换线性上升段 DEC A ;转换值减1 CJNE A,#00H,UP AJMP DOWN
END
(5)梯形波
ORG 0000H
MOV DPTR,#7FFFH ;输入寄存器地址 MOV A,#0H ;赋初值
LL0:MOVX @DPTR,A ;D/A转换 INC A ;转换值加1 CJNE A,#0FAH,LL0 ACALL DELAY ;调用延时 LL1:MOVX @DPTR,A ;D/A转换 DEC A ;转换值减1 CJNE A,#05H,LL1 ACALL DELAY ;调用延时 AJMP LL0
DELAY:MOV R0,#05H ;延时子程序 DL0:MOV R1,#7FH DL1:DJNZ R1,DL1 DJNZ R0,DL0
RET END
(6)外部中断
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EX0_INT
ORG 000BH
LJMP TIMER0
MAIN:
MOV SP,#30H
MOV 20H,#00H
MOV 21H,#00H
MOV 23H,#0FEH
ACALL INIT
SJMP $
INIT:
MOV TMOD,#01H
MOV TH0,#00H
MOV TL0,#00H
SETB PT0
SETB IT0
SETB EX0
SETB ET0
SETB EA
SETB TR0
RET
TIMER0:
INC 21H
MOV TH0,#00H
MOV TL0,#00H
RETI
EX0_INT:
MOV A,21H
INC A
LOOP:
CJNE A,21H,LOOP
MOV C,P3.2
JC FLAG
MOV A,23H
MOV P1,A
RL A
MOV 23H,A
INC 20H
FLAG:
RETI
(7)钻孔头控制
ORG 0000H
LJMP MAIN
ORG 00BH
LJMP TI0
ORG 0800H
MAIN:MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R2,#10H
SETB EA
SETB ET0
START:MOV P1,#0FFH
MOV A,P1
ANL A,#3
CJNE A,#00,START;屏蔽高6位,保低2位
CLR P1.4 ;进入快进状态
,等待 ST0: JB P1.2,ST0 ;X1未按下
CLR P1.5 ;进入工进 ST1:JB P1.3,ST1 ;X2未按下,等待
MOV R7,#10 DL1:MOV R6,#200 DL2:MOV R5,#250 DL3:DJNZ R5,DL3
DJNZ R6,DL2
DJNZ R7,DL1
SETB P1.4 ;进入快退
SETB P1.5
CLR P1.6 ;打开后退电磁阀
JB P1.1,$ ;未到达原位,等待
SETB P1.6
SJMP START TI0:DJNZ R2,EXIT
CLR 20H
MOV R2,#10
CLR TR0
EXIT:MOV TH0,#3CH
MOV TL0,#0B0H
RETI