综合子程序.txt
来自「有用的单片机程序,包括8279和E2ROM的读写」· 文本 代码 · 共 1,053 行 · 第 1/2 页
TXT
1,053 行
步进电机正转一圈子程序:
p1.0,p1.1,p1.2,p1.3接A,B,C,D四相
入口参数:无
影响参数:R0
;正转, 1圈/1S 入口参数:R1,存脉冲个数,一个脉冲 7.2度,四相八拍
ZHENG: PUSH 1
MOV R1,#50
A1: MOV P1,#03H
MOV TH0,#0EAH
MOV TL0,#84H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#02H
MOV TH0,#0F2H
MOV TL0,#54H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#06H
MOV TH0,#0F8H
MOV TL0,#30H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#04H
MOV TH0,#0E4H
MOV TL0,#0A8H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#0CH
MOV TH0,#0F8H
MOV TL0,#30H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#08H
MOV TH0,#0F2H
MOV TL0,#54H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#09H
MOV TH0,#0EAH
MOV TL0,#84H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
DEC R1
MOV A,R1
JZ END1
LJMP A1
END1: POP 1
RET
;//////////////////////////////////////////////////////////
步进电机反转一圈子程序:
p1.0,p1.1,p1.2,p1.3接A,B,C,D四相
入口参数:无
影响参数:R0
FAN:
PUSH 1 ;反转,入口参数:R1(存脉冲个数)1个脉冲7.2度,速度1圈/1S
MOV R1,#50
A2: MOV P1,#0CH
MOV TH0,#0EAH
MOV TL0,#84H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#04H
MOV TH0,#0F2H
MOV TL0,#54H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#06H
MOV TH0,#0F8H
MOV TL0,#30H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#02H
MOV TH0,#0E4H
MOV TL0,#0A8H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#03H
MOV TH0,#0F8H
MOV TL0,#30H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#01H
MOV TH0,#0F2H
MOV TL0,#54H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
MOV P1,#09H
MOV TH0,#0EAH
MOV TL0,#84H
SETB TR0
CJNE R0,#0FFH,$
MOV R0,#00H
CLR TR0
DEC R1
MOV A,R1
JZ END2
LJMP A2
END2: POP 1
RET
;///////////////////////////////////////////////////////////////////////////////////////////
初始化8279:
条件:
Z8279 EQU 8100H
D8279 EQU 8000H
LEDMOD EQU 00H ;左边输入 八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQ EQU 2FH ;扫描速率
LEDCLS EQU 0C1H ;清除显示 RAM
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址
READKB EQU 40H
程序:
INIT8279: ;初始化8279
PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR,#Z8279
MOV A,#LEDMOD
MOVX @DPTR,A
MOV A,#LEDFEQ
MOVX @DPTR,A
MOV A,#LEDCLS
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
;//////////////////////////////////////////////////////////////////////////////////////////////////////
单个数码管显示程序:
入口参数:R4存显示位置
R5存显示内容
DISLED:
PUSH DPH
PUSH DPL
PUSH ACC
MOV A,#LEDWR0
ADD A,R4
MOV DPTR,#Z8279
MOVX @DPTR,A
MOV DPTR,#LEDSEG
MOV A,R5
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
;//////////////////////////////////////////////////////////////////////////////////////////////////
延时子程序:
DELAY: PUSH 0 ;延时子程序(1秒)
PUSH 1
PUSH 2
MOV R0,#0DH
DELAY1: MOV R1,#7DH
DELAY2: MOV R2,#98H
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
POP 2
POP 1
POP 0
RET
;/////////////////////////////////////////////////////////////////////////////////////////////////
延时10S子程序:
DELAY_10S: PUSH 0 ;延时子程序(1秒)
PUSH 1
PUSH 2
MOV R0,#82H
DELAY1_10S: MOV R1,#82H
DELAY2_10S: MOV R2,#92H
DJNZ R2,$
DJNZ R1,DELAY2_10S
DJNZ R0,DELAY1_10S
POP 2
POP 1
POP 0
RET
;//////////////////////////////////////////////////////////////////////////////////////////////////
键盘选择子程序:
入口参数:A(存键值)
SELECT:PUSH 4
PUSH 5
CJNE A,#00H,KEY_1 ;键盘选择程序
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#00H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_1: CJNE A,#01H,KEY_2
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#01H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_2:CJNE A,#02H,KEY_3
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#02H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_3:CJNE A,#03H,KEY_4
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#03H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_4:CJNE A,#04H,KEY_5
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#04H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_5:CJNE A,#05H,KEY_6
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#05H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_6:CJNE A,#06H,KEY_7
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#06H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_7:CJNE A,#07H,KEY_8
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#07H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_8:CJNE A,#08H,KEY_9
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#08H
MOV ENTER,#0FFH
LJMP KEY_END
KEY_9:CJNE A,#09H,KEY_END
MOV NOWPOS,NEXTPOS
MOV NEXTPOS,#09H
MOV ENTER,#0FFH
KEY_END:MOV R4,#07H
MOV R5,A
LCALL DISLED
POP 5
POP 4
RET
;///////////////////////////////////////////////////////////////////////////////////////////////////
键盘中断子程序:
入口条件:
Z8279 EQU 8100H
D8279 EQU 8000H
LEDMOD EQU 00H ;左边输入 八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQ EQU 2FH ;扫描速率
LEDCLS EQU 0C1H ;清除显示 RAM
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址
READKB EQU 40H
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
程序:
INT_0:
PUSH DPH
PUSH DPL
PUSH PSW
PUSH 4
PUSH 5
MOV A,#READKB
MOV DPTR,#Z8279
MOVX @DPTR,A
MOV DPTR,#D8279
MOVX A,@DPTR
ANL A,#3FH
LCALL SELECT
POP 5
POP 4
POP PSW
POP DPL
POP DPH
RETI
;/////////////////////////////////////////////////////////////////////////////////////////////////////////
单片机信号发生子程序:(方波,三角,锯齿)
入口参数:VP(存幅度值),R0(三种波形选择)
影响资源:A,R2
FANGBO:CJNE R0,#00H,JUCHI
MOV A,#00H
MOVX @DPTR,A
NOP
MOV R2,#0FFH
LOOP3:DJNZ R2,LOOP3
; LCALL DELAY
MOV A,VP
MOVX @DPTR,A
NOP
MOV R2,#0FFH
LOOP4:DJNZ R2,LOOP4
;LCALL DELAY
SJMP FANGBO
JUCHI: CJNE R0,#01H,SANJIAO
MOV A,#00H
LOOP: MOVX @DPTR,A
INC A
CJNE A,VP,LOOP
CLR A
MOVX @DPTR,A
NOP
NOP
NOP
SJMP JUCHI
SANJIAO:CJNE R0,#02H,CONT
MOV A,#00H
LOOP1: MOVX @DPTR,A
INC A
CJNE A,VP,LOOP1
NOP
NOP
NOP
LOOP2: DEC A
MOVX @DPTR,A
CJNE A,#00H,LOOP2
NOP
SJMP SANJIAO
CONT: SJMP FANGBO
;////////////////////////////////////////////////////////////////////////////////////////////////////////////
8279八个数码管全部清零子程序
CLEAR_T:
PUSH DPH
PUSH DPL
PUSH ACC
PUSH 0
PUSH 1
MOV R0,#8
LOOP:MOV A,#LEDWR0
ADD A,R0
MOV DPTR,#Z8279
MOVX @DPTR,A
MOV DPTR,#LEDSEG
MOV A,#0H
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
DJNZ R0,LOOP
POP 1
POP 0
POP ACC
POP DPL
POP DPH
RET
;/////////////////////////////////////////////////////////////////////////////////////////////////////////////
A_D转换子程序:
入口参数:PORT(存通道数0——7)
初始条件:(R1)=00H
A_D:
MOV A,PORT ;通道数
MOV DPTR,#A_DPORT
ORL DPL,A
MOVX @DPTR,A ;启动 A_D
CJNE R1,#00H,$ ;等待 A_D 转换结束
MOV R1,#0FFH ;清读数标志
MOV DPTR,#D_APORT
MOV A,49H
RL A
MOVX @DPTR,A
NOP
NOP
SJMP A_D
;//////////////////////////////////////////////////////////////////////////////////////////////////////////////
A_D数据接收并转化成电压子程序:
入口参数:PORT(存通道数)
入口条件:AD基准5V
影响参数:R1,R2,R3,R4,R5,R6,R7
出口参数:30H存电压整数值,31H,32H分别存小数点第一、二位
INT_0: PUSH ACC
MOV A,PORT
MOV DPTR,#A_DPORT
ORL DPL,A
MOVX A,@DPTR
MOV 49H,A
CPL A
MOV P1,A
CPL A
ADD A,#14H
MOV B,#34H
DIV AB
MOV 30H,A
MOV 40H,B
MOV A,40H
MOV B,#0AH
MUL AB
MOV R7,B
MOV R6,A
MOV R5,#00H
MOV R4,#34H
MOV R3,#00H
MOV R2,#00H
LCALL DIV2
MOV 31H,R6
MOV A,R2
MOV B,#10
MUL AB
MOV R7,B
MOV R6,A
MOV R5,#00H
MOV R4,#34H
MOV R3,#00H
MOV R2,#00H
LCALL DIV2
MOV 32H,R6
MOV A,R2
MOV B,#10
MUL AB
MOV R7,B
MOV R6,A
MOV R5,#00H
MOV R4,#34H
MOV R3,#00H
MOV R2,#00H
LCALL DIV2
MOV 33H,R6
MOV A,FLAG_S
JZ A1
MOV A,FLAG1
CJNE A,#0FFH,A1
MOV A,FLAG_CON
CJNE A,#0FFH,A1
LCALL DISPLAY
LCALL DELAY
A1: MOV R1,#00H ;小数点第一位
POP ACC
RETI
;//////////////////////////////////////////////////////////////////////////////////////////////////////////////
电压值显示子程序:
入口参数:30H,31H,32H,33H,存电压值4位
DISPLAY:PUSH DPH ;A——D数据显示子程序
PUSH DPL
PUSH ACC
MOV A,#LEDWR0 ;显示整数部分
ADD A,#04H
MOV DPTR,#Z8279
MOVX @DPTR,A
MOV A,30H
ANL A,#0FH
DA A
MOV DPTR,#LEDSEG1
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
MOV A,#LEDWR0 ;显示小数部分第一位
ADD A,#05H
MOV DPTR,#Z8279
MOVX @DPTR,A
MOV A,31H
DA A
ANL A,#0FH
MOV DPTR,#LEDSEG
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
MOV A,#LEDWR0 ;显示小数部分第二位
ADD A,#06H
MOV DPTR,#Z8279
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?