A51 MACRO ASSEMBLER EX3_6 06/23/2007 17:05:37 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN ex3-6.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ex3-6.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;--------------程序信息-----------------
2 ;文件名 : ex3-6.asm
3 ;版本 : 1.0
4 ;作者 :
5 ;修改时间 :
6
7 ;--------------程序说明------------------
8 ;CHAP 3.6 LED动态显示实例
9
10 ;-----------常量和变量声明---------------
11
12
0090 13 LED EQU P1; 宏定义LED显示器
00A0 14 Dq BIT P2.0
0030 15 ADDR EQU 30H; 显示的温度值地址
0033 16 ADDREND EQU 33H;
17
18 ;--------------预定义--------------------
19
0000 20 ORG 0000H
0000 020003 21 LJMP START
22
23 ;------------中断入口地址分配------------
24 ;ORG 0003H
25 ;LJMP INT0PRG
26 ;ORG 000BH
27 ;LJMP INT1PRG
28 ;ORG 0013H;
29 ;LJMP
30 ;ORG 0030H
31
0003 32 START:
33 ;--------------初始化子程序--------------
0003 856081 34 MOV SP,60H;
35 ;--------------主程序--------------------
0006 120024 36 MAIN: LCALL GETTEMP; 通过传感器获得温度值
0009 12000F 37 LCALL DISP; 动态扫描显示温度值
38
000C 020006 39 LJMP MAIN
40
41
42 ;----------------子程序------------------
43
000F 44 DISP: ;动态液晶显示子程序
000F A830 45 MOV R0,ADDR;
0011 9000AF 46 MOV DPTR,#LEDDB;
0014 E0 47 DISP1: MOVX A,@DPTR;
0015 F9 48 MOV R1,A;
0016 E6 49 MOV A,@R0;
0017 49 50 ORL A,R1;;
0018 F590 51 MOV LED,A;
001A 1200A2 52 LCALL DELAY1MS;
001D 08 53 INC R0;
001E A3 54 INC DPTR;
001F E8 55 MOV A,R0;
0020 B433F1 56 CJNE A,#ADDREND,DISP1;
0023 22 57 RET;
58
A51 MACRO ASSEMBLER EX3_6 06/23/2007 17:05:37 PAGE 2
59
60 ;---------------------------------
61 ; DS1820温度采集主程序
62 ;---------------------------------
0024 63 GETTEMP:
0024 C2D4 64 CLR PSW.4
0026 D2D3 65 SETB PSW.3 ;设置工作寄存器当前所在的区域
0028 C2AF 66 CLR EA ;使用ds1820一定要禁止任何中断产生
002A 12004D 67 LCALL INT ;调用初使化子程序
002D 74CC 68 MOV A,#0CCH
002F 120071 69 LCALL WRITE ;送入跳过ROM命令
0032 7444 70 MOV A, #44H
0034 120071 71 LCALL WRITE ;送入温度转换命令
0037 12004D 72 LCALL INT ;温度转换完全,再次初使化ds1820
003A 74CC 73 MOV A,#0CCH
003C 120071 74 LCALL WRITE ;送入跳过ROM命令
003F 74BE 75 MOV A,#0BEH
0041 120071 76 LCALL WRITE ;送入读温度暂存器命令
0044 120089 77 LCALL READ
0047 FF 78 MOV R7,A ;读出温度值低字节存入R7
0048 120089 79 LCALL READ
004B FE 80 MOV R6,A ; 读出谩度值高字节存入R6
81 ;LCALL TEMPCHANGE;
82 ;SETB EA
004C 22 83 RET
004D 84 INT: ;初始化ds1820子程序
004D C2AF 85 CLR EA
004F C2A0 86 L0: CLR dq ;ds1820总线为低复位电平
0051 7AC8 87 MOV R2,#200
0053 C2A0 88 L1: CLR dq
0055 DAFC 89 DJNZ R2,L1 ;总线复位电平保持400us
0057 D2A0 90 SETB dq ;释放ds1820总线
0059 7A1E 91 MOV R2,#30
005B DAFE 92 L4: DJNZ R2,L4 ;释放ds1820总线保持60us
005D C3 93 CLR C ;清存在信号
005E 72A0 94 ORL C,dq
0060 40ED 95 JC L0 ;存在吗?不存在则重新来
0062 7E50 96 MOV R6,#80
0064 72A0 97 L5: ORL C,dq
0066 4004 98 JC L3
0068 DEFA 99 DJNZ R6,L5
006A 80E3 100 SJMP L0
006C 7AF0 101 L3: MOV R2,#240
006E DAFE 102 L2: DJNZ R2,L2
0070 22 103 RET
0071 104 WRITE: ;向ds1820写操作命令子程序
0071 C2AF 105 CLR EA
0073 7B08 106 MOV R3,#8 ;写入ds1820的bit数,一个字节8个bit
0075 D2A0 107 WR1: SETB dq
108
0077 7C08 109 MOV R4,#8
0079 13 110 RRC A ;把一个字节data(A)分成8个bit环移给 C
007A C2A0 111 CLR dq ;开始写入ds1820总线要处于复位(低)状态
007C DCFE 112 WR2: DJNZ R4,WR2 ;ds1820总线复位保持16us
007E 92A0 113 MOV dq,C ;写入一个bit
0080 7C14 114 MOV R4,#20
0082 DCFE 115 WR3: DJNZ R4,WR3 ;等待40us
0084 DBEF 116 DJNZ R3,WR1 ;写入下一个bit
0086 D2A0 117 SETB dq ;重新释放ds1820总线
0088 22 118 RET
0089 119 READ:
0089 C2AF 120 CLR EA
008B 7E08 121 MOV R6,#8 ;连续读8个bit
008D C2A0 122 RE1: CLR dq ;读前总线保持为低
008F 7C04 123 MOV R4,#4
0091 00 124 NOP
A51 MACRO ASSEMBLER EX3_6 06/23/2007 17:05:37 PAGE 3
0092 D2A0 125 SETB dq ;开始读总线释放
0094 DCFE 126 RE2: DJNZ R4,RE2 ;持续8us
0096 A2A0 127 MOV C,dq ;从ds1820总线读得一个bit
0098 13 128 RRC A ;把读得的位值环移给 A
0099 7D1E 129 MOV R5,#30
009B DDFE 130 RE3: DJNZ R5,RE3 ;持续60us
009D DEEE 131 DJNZ R6,RE1 ;读下一个bit
009F D2A0 132 SETB dq ;重新释放ds1820总线
00A1 22 133 RET
134
135
136 ;--------------中断子程序----------------
137
138 ;---------------延时子程序---------------
139
00A2 7D02 140 DELAY1MS: MOV R5,#02H;
00A4 7EF4 141 DELAY10: MOV R6,#00F4H;
00A6 7FFF 142 DELAY11: MOV R7,#0FFH;
00A8 DFFE 143 DELAY12: DJNZ R7,DELAY12;
00AA DEFA 144 DJNZ R6,DELAY11;
00AC DDF6 145 DJNZ R5,DELAY10;
00AE 22 146 RET;
147
00AF 102040 148 LEDDB: DB 10H,20H,40H; 高位表示LED的片选端
149
150 END
;---------------注意事项-----------------
A51 MACRO ASSEMBLER EX3_6 06/23/2007 17:05:37 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ADDR . . . . . . . N NUMB 0030H A
ADDREND. . . . . . N NUMB 0033H A
DELAY10. . . . . . C ADDR 00A4H A
DELAY11. . . . . . C ADDR 00A6H A
DELAY12. . . . . . C ADDR 00A8H A
DELAY1MS . . . . . C ADDR 00A2H A
DISP . . . . . . . C ADDR 000FH A
DISP1. . . . . . . C ADDR 0014H A
DQ . . . . . . . . B ADDR 00A0H.0 A
EA . . . . . . . . B ADDR 00A8H.7 A
GETTEMP. . . . . . C ADDR 0024H A
INT. . . . . . . . C ADDR 004DH A
L0 . . . . . . . . C ADDR 004FH A
L1 . . . . . . . . C ADDR 0053H A
L2 . . . . . . . . C ADDR 006EH A
L3 . . . . . . . . C ADDR 006CH A
L4 . . . . . . . . C ADDR 005BH A
L5 . . . . . . . . C ADDR 0064H A
LED. . . . . . . . D ADDR 0090H A
LEDDB. . . . . . . C ADDR 00AFH A
MAIN . . . . . . . C ADDR 0006H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
PSW. . . . . . . . D ADDR 00D0H A
RE1. . . . . . . . C ADDR 008DH A
RE2. . . . . . . . C ADDR 0094H A
RE3. . . . . . . . C ADDR 009BH A
READ . . . . . . . C ADDR 0089H A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0003H A
WR1. . . . . . . . C ADDR 0075H A
WR2. . . . . . . . C ADDR 007CH A
WR3. . . . . . . . C ADDR 0082H A
WRITE. . . . . . . C ADDR 0071H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)