急求!!毕设程序修改,子程序全有 ,求大神帮忙整合为一个程序!!!!

kevinscy 2016-05-13 11:57:06
程序清单:
1. A/D转换器子程序
进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。进行A/D转换之前,要启动转换的方法:
ABC=110选择第三通道
ST=0,ST=1,ST=0产生启动转换的正脉冲信号
CH EQU 30H
DPCNT EQU 31H
DPBUF EQU 33H
GDATA EQU 32H
ST BIT P3.0
OE BIT P3.1
EOC BIT P3.2

ORG 00H
LJMP START
ORG 0BH
LJMP T0X
ORG 30H
START: MOV CH,#0BCH
MOV DPCNT,#00H
MOV R1,#DPCNT
MOV R7,#5
MOV A,#10
MOV R0,#DPBUF
LOP: MOV @R0,A
INC R0
DJNZ R7,LOP
MOV @R0,#00H
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#00H
MOV TMOD,#01H
MOV TH0,#(65536-4000)/256
MOV TL0,#(65536-4000) MOD 256
SETB TR0
SETB ET0
SETB EA
WT: CLR ST
SETB ST
CLR ST
WAIT: JNB EOC,WAIT
SETB OE
MOV GDATA,P0
CLR OE
MOV A,GDATA
MOV B,#100
DIV AB
MOV 33H,A
MOV A,B
MOV B,#10
DIV AB
MOV 34H,A
MOV 35H,B
SJMP WT
T0X: NOP
MOV TH0,#(65536-4000)/256
MOV TL0,#(65536-4000) MOD 256
MOV DPTR,#DPCD
MOV A,DPCNT
ADD A,#DPBUF
MOV R0,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
MOV DPTR,#DPBT
MOV A,DPCNT
MOVC A,@A+DPTR
MOV P2,A
INC DPCNT
MOV A,DPCNT
CJNE A,#8,NEXT
MOV DPCNT,#00H
NEXT: RETI
DPCD: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH,00H
DPBT: DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
END
2.数码管显示子程序
ORG 0000H
MAX7219:DIN BIT P1.1 ;定义变量
CLK BIT P1.2
LOAD BIT P1.1
LED_BF EQU 50H ;显示数据首址
AJMP MAIN
MAIN: MOV SP.#70H
LCALL PROCESS ;设置MAX7219初始值
LCALL DISPLAY ;显示
WAIT; ;其他程序省略

SJMP WAIT
;MAX7219初始化子程序
PROCECC :MOV A,#0BH
MOV B,#07H
LCALL W_7219
MOV A,#09H
MOV B,#00H
LCALL W_7219
MOV A,##0AH
MOV B,#09H
LCALL W_7219
MOV A,#0CH
MOV B,#01H
LCALL W_7219
RET
;MAX7219 显示子程序
DISPLAY:MOV R0,#LED_BF
MOV R4,#01H
MOV R3,#08H
C_DISP:MOV A,@R0
MOV B,A
MOV A,R4
LCALL W_7219
INC R0
INC R4
DJNZ R3,C_DISP
RET
W_7219:CLR LOAD
LCALL SD_7219
MOV A,B
LCALL SD_7219
SETB LOAD
RET
SD_7219:MOV R6,#08H
C_SD:NOP
CLR CLK
RLC A
MOV DIN,C
NOP
3.滤波电路驱动程序中值滤波,采样值分别放在R2,r3,r4中,结果从小到大排序放在R2,R3,R4中。
; R3为中值
FILT2:MOV A,R2
CLR C
SUBB A,R3
JC FILT21
MOV A,R2
XCH A,R3
MOV R2,A
FILT21:MOV A,R3
CLR C
SUBB A,R4
JC FILT22
MOV A,R4
XCH A,R3
XCH R4,A
CLR C
SUBB A,R2
JNC FILT22
MOV A,R2
MOV R3,A
FILT22:RET
4.温度传感电路
DS18B20测温实验源程序

ORG  0000H
START:  MOV  SP,#60H     ;开机初始化
MOV  P0,#0FFH
MOV  P1,#0FEH
MOV  P2,#0FFH
MOV  P3,#0FFH

MAIN:   LCALL  GET_TEMPER   ;调用读温度子程序
    LCALL  DISP      ;调用数码管显示子程序
    AJMP  MAIN      ;重复循环
:---------- 读DS18B20传感器的温度值---------
GET_TEMPER:
    SETB  P3.3
    LCALL  RST18B20    ;复位DS18B20
    JB    00H,DSS2
    RET
DSS2:  MOV  A,#0CCH    ;跳过ROM匹配
    LCALL  WR18B20
    MOV   A,#44H     ;向DS18B20发出温度转换命
    LCALL  WR18B20
    LCALL  RST18B20    ;准备读温度前先复位
MOV   A,#0CCH    ;跳过ROM匹配
    LCALL  WR18B20
    MOV   A,#0BEH    ;向DS18B20发出读温度命令
    LCALL  WR18B20
    LCALL  RE18B20    ;读出温度数据
    RET
;------ DS18B20复位初始化程序 ------
RST18B20:
    SETB  P3.3
    NOP
    CLR   P3.3
    MOV   R0,#06BH    ;主机发出复位低脉冲
    MOV   R1,#03H
DSR1:  DJNZ  R0,DSR1
    MOV   R0,#6BH
    DJNZ  R1,DSR1
    SETB  P3.3      ;拉高数据线
    NOP
    NOP
    NOP
    MOV   R0,#25H
DSR2:  JNB   P3.3,DSR3    ;等待DS18B20回应
    DJNZ  R0,DSR2
    LJMP  DSR4
DSR3:  SETB  00H       ;置标志位,表示DS1820存在
    LJMP  DSR5
DSR4:  CLR   00H        ;清标志位,表示DS1820不存在
    LJMP  DSR7
DSR5:  MOV   R0,#06BH
DSR6:  DJNZ  R0,DSR6     ;延时一段时间
DSR7:  SETB  P3.3
    RET

;------ 写DS18B20的子程序 ------
WR18B20:
    MOV   R2,#8
    CLR   C
WR1:  CLR   P3.3
    MOV   R3,#6
    DJNZ  R3,$
    RRC   A
    MOV   P3.3,C
    MOV   R3,#23
    DJNZ  R3,$
    SETB  P3.3
    NOP
    DJNZ  R2,WR1
    SETB  P3.3
    RET
;------ 从DS18B20中读温度数据程序 ------
RE18B20:
    MOV   R4,#2
    MOV   R1,#2FH
RE00: 
MOV   R2,#8
RE01: 
CLR   C
    SETB  P3.3
    NOP
    NOP
    CLR   P3.3
    NOP
    NOP
    NOP
    SETB  P3.3
    MOV   R3,#09
RE10:  DJNZ  R3,RE10
    MOV   C,P3.3
    MOV   R3,#23
RE20:  DJNZ  R3,RE20
    RRC   A
    DJNZ  R2,RE01
    MOV   @R1,A
    DEC   R1
    DJNZ  R4,RE00
    RET
;-------- 显示子程序 --------
DISP:  MOV   A,2FH
    MOV   C,70H
    RRC   A
    MOV   C,71H
    RRC   A
    MOV   C,72H
    RRC   A
    MOV   C,73H
    RRC   A
    MOV   2FH,A
    MOV   A,2FH
    MOV   B,#10
    DIV   AB
    MOV   30H,A
    MOV   31H,B
    MOV   A,30H
    MOV   DPTR,#SGTB
    MOVC  A,@A+DPTR
    MOV   P0,A     ;显示温度“十位”值
    CLR   P2.2
    SETB  P2.0
    SETB  P2.1
    SETB  P2.3
    SETB  P2.4
    LCALL  YS4722U
    MOV   A,31H
    MOV   DPTR,#SGTB
    MOVC  A,@A+DPTR
    MOV   P0,A      ;显示温度“个位”值
    CLR   P2.3
    SETB  P2.0
    SETB  P2.1
    SETB  P2.2
    SETB  P2.4
    LCALL  YS4722U
    MOV   A,#01000110B
    MOV   P0,A      ;显示温度符号“”
    CLR   P2.4
    SETB  P2.0
    SETB  P2.1
    SETB  P2.2
    SETB  P2.3
    LCALL  YS4722U
    RET
;************* 8位共阳数码管显示器字型码表**********
SGTB:  DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
    DB 88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H
YS4722U:
MOV   R4,#10 ;延时子程序
Y3:   MOV   R5,#216
    DJNZ  R5,$
    DJNZ  R4,Y3
     RET

    END

...全文
748 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧