时间程序
来源:互联网 发布:班级介绍ppt模板知乎 编辑:程序博客网 时间:2024/05/17 08:17
/******************************************
2008年12月18编写
利用18B20来实现测量温度值。利用LED显示温度值
******************************************/
/*****************************************
设置164 引脚,
****************************************/
AB_DATA BIT P0.0
CLK BIT P0.1
/*****************************************
设置显示LED数码管引脚,
****************************************/
COM1 BIT P0.2
COM2 BIT P0.3
COM3 BIT P0.4
COM4 BIT P0.5
COM5 BIT P0.6
COM6 BIT P0.7
/*****************************************
内部存储空间RAM区间用于显示数码管?
****************************************/
A_BIT EQU 30H;小数位存放位置
B_BIT EQU 31H;个数位存放位置
C_BIT EQU 32H;十数位存放位置
D_BIT EQU 33H;百数位存放位置
/*****************************************
内部存储空间RAM区间用于存18B20的送来的值
****************************************/
TEMP_H EQU 35H;用于保存读出温度的高8位
TEMP_L EQU 36H;用于保存读出温度的低8位
/*****************************************
是否检测到DS18B20标志位
****************************************/
FLAG1 EQU 37H;是否检测到DS18B20标志位
/*****************************************
DS18B20的数据Data传输位
****************************************/
DQ EQU P2.0
/******************************************
主程序的编写
******************************************/
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
LCALL GET_TEMP;获取温度值
LCALL TEMP_CON;温度值转化
LCALL DISPLAY
AJMP MAIN
GET_TEMP:
SETB DQ
LCALL INIT_18B20
JB FLAG1,TSS2
RET ;判断DS1820是否存在?若DS18B20不存在则返回
TSS2:
MOV A,#0CCH
LCALL WRITE_DATA
MOV A,#44H
LCALL WRITE_DATA
LCALL INIT_18B20
MOV A,#0CCH
LCALL WRITE_DATA
MOV A,#0BEH
LCALL WRITE_DATA
LCALL READ_DATA
RET
/******************************************
18B20的初始化程序。要学习18B20的时序资料
******************************************/
INIT_18B20:
SETB DQ
NOP
INIT0:
CLR DQ
MOV R1,#3
INIT1:
MOV R2,#108
DJNZ R2,$
DJNZ R1,INIT1
SETB DQ
MOV R2,#30
DJNZ R2,$
JNB DQ,INIT2
JMP INIT0
INIT2:
SETB FLAG1
CLR P1.0
MOV R0,#117
DJNZ R0,$
SETB DQ
RET
/*****************************************************************
对DS18B20的数据Data位写操作,把C的值一位一位地写到DQ引脚上
******************************************************************/
WRITE_DATA:
MOV R2,#8
CLR C
WRITE: CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ, C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WRITE
SETB DQ
RET
/*****************************************************************
对DS18B20的数据Data位对操作,把DQ引脚上的值一位一位地写到累加器中去
******************************************************************/
READ_DATA:
MOV R4,#2
MOV R1,#TEMP_L
READ0: MOV R2,#8
READ1: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
DJNZ R3,$
MOV DQ,C
MOV R3,#23 ;
DJNZ R3,$
RRC A
DJNZ R2,READ1
MOV @R1,A
DEC R1
DJNZ R4,READ0
RET
/*************************************************************
数据处理子程序
*************************************************************/
TEMP_CON:
MOV A,TEMP_L;
MOV R0,A
SWAP A
ANL A,#0FH ;
MOV 40H,A ;
MOV A,TEMP_H ;
SWAP A
ORL A,40H ;
MOV B,#100 ;
DIV AB ;商存于A中,余数存于B中
MOV 41H,B ;
MOV D_BIT,A ;符号位
MOV A,41H ;
MOV B,#10 ;
DIV AB
MOV C_BIT,A ;十位
MOV B_BIT,B ;个位
MOV A,R0
ANL A,#0FH ;
MOV B,#10 ;
MUL AB
MOV B,#16 ;
DIV AB
MOV A_BIT,A ;TEMPER_L的低4位*10/16得小数后一位数
RET
DISPLAY: MOV R7,#2 ;
LOOP1: MOV R6,#200;显示1000次
LOOP2: MOV R0,#79H ;显示缓冲区首地址
MOV DPTR,#TAB ;查表
MOV p0,#0FFH ;
loop3: ;ORL P0,#0FFH ;关位
disp: MOV A,@R0 ;
MOVC A, @A+DPTR ;查表取数
lcall disp2
CLR COM4
MOV 01H,#80
DJNZ 01H,$ ;再关防止鬼影(岩石50US)
SETB COM4
INC R0
MOV DPTR,#TAB1
MOV A,@R0
MOVC A,@A+DPTR
LCALL DISP2
CLR COM3
MOV 02H,#80
DJNZ 02H,$ ;再关防止鬼影(岩石50US)
SETB COM3
INC R0
MOV DPTR,#TAB
MOV A,@R0 ;
MOVC A, @A+DPTR ;查表取数
lcall disp2
CLR COM2
MOV 03H,#80
DJNZ 03H,$ ;再关防止鬼影(岩石50US)
SETB COM2
INC R0
MOV DPTR,#TAB
MOV A,@R0 ;
MOVC A, @A+DPTR ;查表取数
lcall disp2
CLR COM1
MOV 04H,#80
DJNZ 04H,$ ;再关防止鬼影(岩石50US)
SETB COM1
LD1: DJNZ R6,LOOP2 ;100次没完循环
DJNZ R7,LOOP1 ;4个100次没完循
ld2: RET
disp2: MOV 30h,#08H ;
DISP0: RLC A
MOV AB_DATA,C ;数据移入164
CLR CLK
SETB CLK
DJNZ 30h,DISP0 ;移完否?
RET
TAB: db 0c0h,0f9h,0a4h,0b0h
db 99h,92h,82h,0f8h
db 80h,90h,88h,83h
db 0c6h,0a1h,86h,8eh
db 0bfh,89h,8ch
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TAB1: DB 40H,79H,24H,30H,19H
DB 12H,02H,78H,00H,10H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
end
11/19/2009 19:16:10 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN ./时间程序.obj
ASSEMBLER INVOKED BY: C:/Keil/C51/BIN/A51.EXE ../时间程序/时间程序.asm SET(SMALL) DEBUG PRINT(./时间程序.lst) OBJECT(./?
奔涑绦?obj) EP
LOC OBJ LINE SOURCE
1
2
3
4
5
6
0080 7 AB_DATA BIT P0.0
0081 8 CLK BIT P0.1
9
10
11
0082 12 COM1 BIT P0.2
0083 13 COM2 BIT P0.3
0084 14 COM3 BIT P0.4
0085 15 COM4 BIT P0.5
0086 16 COM5 BIT P0.6
0087 17 COM6 BIT P0.7
18
19
20
0030 21 SECOND EQU 30H
0031 22 MINUTE EQU 31H
0032 23 HOUR EQU 32H
24
25
26
0000 27 ORG 0000H
0000 0130 28 AJMP MAIN
000B 29 ORG 000BH
000B 01F7 30 AJMP T0_INT
0030 31 ORG 0030H
0030 758160 32 MAIN: MOV SP,#60H
0033 120041 33 LCALL T0_INIT
0036 120052 34 LCALL SYS_INIT
0039 12005C 35 LOOP: LCALL TCONVERT
003C 12007F 36 LCALL DISPLAY
003F 0139 37 AJMP LOOP
38 ; SJMP $
0041 39 T0_INIT:
0041 758901 40 MOV TMOD,#01H
0044 758C3C 41 MOV TH0,#3CH
0047 758AB0 42 MOV TL0,#0B0H
004A 75A882 43 MOV IE,#82H
004D D28C 44 SETB TR0
004F 7F14 45 MOV R7,#14H
0051 22 46 RET
47
48
49
0052 50 SYS_INIT:
0052 753000 51 MOV SECOND,#00H
0055 753100 52 MOV MINUTE,#00H
0058 753212 53 MOV HOUR,#12H
005B 22 54 RET
005C 55 TCONVERT:
005C E530 56 MOV A,SECOND
005E B4601D 57 CJNE A,#60H,RETURN0
A51 MACRO ASSEMBLER 蔩糭砡_? 11/19/2009 19:16:10 PAGE 2
0061 753000 58 MOV SECOND,#00H
0064 E531 59 MOV A,MINUTE
0066 2401 60 ADD A,#01H
0068 D4 61 DA A
0069 F531 62 MOV MINUTE,A
006B B43C10 63 CJNE A,#60,RETURN0
006E 753100 64 MOV MINUTE,#00H
0071 E532 65 MOV A,HOUR
0073 2401 66 ADD A,#01H
0075 D4 67 DA A
0076 F532 68 MOV HOUR,A
0078 B42403 69 CJNE A,#24H,RETURN0
007B 753200 70 MOV HOUR,#00H
007E 71 RETURN0:
007E 22 72 RET
73
74
75
76
77
007F 78 DISPLAY:
79
80
81
007F E530 82 MOV A,SECOND
0081 540F 83 ANL A,#0FH
0083 900109 84 MOV DPTR,#TAB
0086 93 85 MOVC A,@A+DPTR
0087 11E2 86 ACALL SEND
0089 C287 87 CLR COM6
008B 11EE 88 ACALL DELAY
008D D287 89 SETB COM6
008F E530 90 MOV A,SECOND
0091 C4 91 SWAP A
0092 540F 92 ANL A,#0FH
0094 900109 93 MOV DPTR,#TAB
0097 93 94 MOVC A,@A+DPTR
0098 11E2 95 ACALL SEND
009A C286 96 CLR COM5
009C 11EE 97 ACALL DELAY
009E D286 98 SETB COM5
99
100
101
00A0 E531 102 MOV A,MINUTE
00A2 540F 103 ANL A,#0FH
00A4 900109 104 MOV DPTR,#TAB
00A7 93 105 MOVC A,@A+DPTR
00A8 11E2 106 ACALL SEND
00AA C285 107 CLR COM4
00AC 11EE 108 ACALL DELAY
00AE D285 109 SETB COM4
00B0 E531 110 MOV A,MINUTE
00B2 C4 111 SWAP A
00B3 540F 112 ANL A,#0FH
00B5 900109 113 MOV DPTR,#TAB
00B8 93 114 MOVC A,@A+DPTR
00B9 11E2 115 ACALL SEND
00BB C284 116 CLR COM3
00BD 11EE 117 ACALL DELAY
00BF D284 118 SETB COM3
119
120
121
00C1 E532 122 MOV A,HOUR
00C3 540F 123 ANL A,#0FH
A51 MACRO ASSEMBLER 蔩糭砡_? 11/19/2009 19:16:10 PAGE 3
00C5 900109 124 MOV DPTR,#TAB
00C8 93 125 MOVC A,@A+DPTR
00C9 11E2 126 ACALL SEND
00CB C283 127 CLR COM2
00CD 11EE 128 ACALL DELAY
00CF D283 129 SETB COM2
00D1 E532 130 MOV A,HOUR
00D3 C4 131 SWAP A
00D4 540F 132 ANL A,#0FH
00D6 900109 133 MOV DPTR,#TAB
00D9 93 134 MOVC A,@A+DPTR
00DA 11E2 135 ACALL SEND
00DC C282 136 CLR COM1
00DE 11EE 137 ACALL DELAY
00E0 D282 138 SETB COM1
139
140
141
00E2 7A08 142 SEND: MOV R2,#08H
00E4 33 143 TURN: RLC A
00E5 9280 144 MOV AB_DATA,C
00E7 D281 145 SETB CLK
00E9 C281 146 CLR CLK
00EB DAF7 147 DJNZ R2,TURN
00ED 22 148 RET
149
150
151
00EE 7F0A 152 DELAY: MOV R7,#10
00F0 7E14 153 DELAY0: MOV R6,#20
00F2 DEFE 154 DJNZ R6,$
00F4 DFFA 155 DJNZ R7,DELAY0
00F6 22 156 RET
157
158
159
160
00F7 161 T0_INT:
00F7 DF09 162 DJNZ R7,T0_INT0
00F9 7F14 163 MOV R7,#14H
00FB E530 164 MOV A,SECOND
00FD 2401 165 ADD A,#01H
00FF D4 166 DA A
0100 F530 167 MOV SECOND,A
0102 758C3C 168 T0_INT0:MOV TH0,#3CH
0105 758AB0 169 MOV TL0,#0B0H
0108 170 RETURN1:
0108 32 171 RETI
0109 C0 172 TAB: DB 0C0H;0
010A F9 173 DB 0F9H;1
010B A4 174 DB 0A4H;2
010C B0 175 DB 0B0H;3
010D 99 176 DB 099H;4
010E 92 177 DB 092H;5
010F 82 178 DB 082H;6
0110 F8 179 DB 0F8H;7
0111 80 180 DB 080H;8
0112 90 181 DB 090H;9
182 END
A51 MACRO ASSEMBLER 蔩糭砡_? 11/19/2009 19:16:10 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
AB_DATA. . . . . . B ADDR 0080H.0 A
CLK. . . . . . . . B ADDR 0080H.1 A
COM1 . . . . . . . B ADDR 0080H.2 A
COM2 . . . . . . . B ADDR 0080H.3 A
COM3 . . . . . . . B ADDR 0080H.4 A
COM4 . . . . . . . B ADDR 0080H.5 A
COM5 . . . . . . . B ADDR 0080H.6 A
COM6 . . . . . . . B ADDR 0080H.7 A
DELAY. . . . . . . C ADDR 00EEH A
DELAY0 . . . . . . C ADDR 00F0H A
DISPLAY. . . . . . C ADDR 007FH A
HOUR . . . . . . . N NUMB 0032H A
IE . . . . . . . . D ADDR 00A8H A
LOOP . . . . . . . C ADDR 0039H A
MAIN . . . . . . . C ADDR 0030H A
MINUTE . . . . . . N NUMB 0031H A
P0 . . . . . . . . D ADDR 0080H A
RETURN0. . . . . . C ADDR 007EH A
RETURN1. . . . . . C ADDR 0108H A
SECOND . . . . . . N NUMB 0030H A
SEND . . . . . . . C ADDR 00E2H A
SP . . . . . . . . D ADDR 0081H A
SYS_INIT . . . . . C ADDR 0052H A
T0_INIT. . . . . . C ADDR 0041H A
T0_INT . . . . . . C ADDR 00F7H A
T0_INT0. . . . . . C ADDR 0102H A
TAB. . . . . . . . C ADDR 0109H A
TCONVERT . . . . . C ADDR 005CH A
TH0. . . . . . . . D ADDR 008CH A
TL0. . . . . . . . D ADDR 008AH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
TURN . . . . . . . C ADDR 00E4H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
- 时间程序
- 测量程序运行时间
- 计算程序运行时间
- 计算程序运行时间
- 测试程序运行时间
- 测量程序运行时间
- 同步时间程序更新
- 程序开发时间
- 程序运行时间计算
- 测试程序运行时间
- 获取程序运行时间
- 获取程序运行时间
- 计算程序运行时间
- 计算程序运行时间
- 计算程序运行时间
- 测试程序运行时间
- 取得程序运行时间
- 测试程序运行时间
- asp.net 2.0注册iis --无法显示该页
- Symbian内存管理的二十二条军规
- vector中删除元素的几种方法
- 各种UNIX平台下vmstat与iostat输出结果详解
- (转)用GDB调试程序
- 时间程序
- Java语法总结 - 内部类
- 精辟~!绝对精辟~!
- 应当记住
- unix环境高级编程编译方法 -apue最简单编译方法(第二版)
- 同时启动两个tomcat问题
- 本地文本索引及java的HashMap实现
- DataTable.Select , DataView.RowFilter , DataView.FindRows 的用法解析
- 一道题,辨Java实力