📄 仿真多点温度测量(毕业设计).lst
字号:
__text_start:
__start:
5A E5CF LDI R28,0x5F
5B E0D4 LDI R29,4
5C BFCD OUT 0x3D,R28
5D BFDE OUT 0x3E,R29
5E 51CE SUBI R28,0x1E
5F 40D0 SBCI R29,0
60 EA0A LDI R16,0xAA
61 8308 STD Y+0,R16
62 2400 CLR R0
63 EBEC LDI R30,0xBC
64 E0F0 LDI R31,0
65 E010 LDI R17,0
66 3CE5 CPI R30,0xC5
67 07F1 CPC R31,R17
68 F011 BEQ 0x006B
69 9201 ST R0,Z+
6A CFFB RJMP 0x0066
6B 8300 STD Z+0,R16
6C E5E8 LDI R30,0x58
6D E0F0 LDI R31,0
6E E6A0 LDI R26,0x60
6F E0B0 LDI R27,0
70 E010 LDI R17,0
71 E000 LDI R16,0
72 BF0B OUT 0x3B,R16
73 3BE4 CPI R30,0xB4
74 07F1 CPC R31,R17
75 F021 BEQ 0x007A
76 95C8 LPM
77 9631 ADIW R30,1
78 920D ST R0,X+
79 CFF9 RJMP 0x0073
7A 940E 028A CALL _main
_exit:
7C CFFF RJMP _exit
_delay1ms:
j --> R20
i --> R16
7D 934A ST R20,-Y
7E 935A ST R21,-Y
FILE: C:\DOCUME~1\徐胜辉\桌面\新建文件夹\温度测量.c
(0001) #include<iom16v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004) #define RS_1 PORTA|=(1<<3)
(0005) #define RS_0 PORTA&=~(1<<3)
(0006) #define RW_1 PORTA|=(1<<4)
(0007) #define RW_0 PORTA&=~(1<<4)
(0008) #define EN_1 PORTA|=(1<<5)
(0009) #define EN_0 PORTA&=~(1<<5)
(0010) unsigned char str1[]={"temperature1: "};
(0011) unsigned char str2[]={"temperature2: "};
(0012) unsigned char str3[]={"temperature3: "};
(0013) unsigned char str4[]={"temperature4: "};
(0014) unsigned char str5[4][8]={
(0015) {0x28,0x45,0xc5,0xb8,0x00,0x00,0x00,0xfd},
(0016) {0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},
(0017) {0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},
(0018) {0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0}
(0019) };
(0020) uchar adata[5];
(0021) uchar n;
(0022) uint tvalue;//温度
(0023) uchar tflag;//温度正负标志
(0024) /*************************lcd1602程序**************************/
(0025) void delay1ms(uint i)//延时1毫秒(不够精确的)
(0026) {
(0027) unsigned int j;
(0028) for(;i>0;i--)
7F C00B RJMP 0x008B
(0029) for(j=0;j<1142;j++);
80 2744 CLR R20
81 2755 CLR R21
82 C002 RJMP 0x0085
83 5F4F SUBI R20,0xFF
84 4F5F SBCI R21,0xFF
85 3746 CPI R20,0x76
86 E0E4 LDI R30,4
87 075E CPC R21,R30
88 F3D0 BCS 0x0083
89 5001 SUBI R16,1
8A 4010 SBCI R17,0
8B 3000 CPI R16,0
8C 0701 CPC R16,R17
8D F791 BNE 0x0080
8E 9159 LD R21,Y+
8F 9149 LD R20,Y+
90 9508 RET
_wr_com:
com --> R10
91 92AA ST R10,-Y
92 2EA0 MOV R10,R16
(0030) }
(0031) void wr_com(unsigned char com)//写指令//
(0032) {
(0033) delay1ms(1);
93 E001 LDI R16,1
94 E010 LDI R17,0
95 DFE7 RCALL _delay1ms
(0034) RS_0;
96 98DB CBI 0x1B,3
(0035) RW_0;
97 98DC CBI 0x1B,4
(0036) EN_0;
98 98DD CBI 0x1B,5
(0037) PORTB=com;
99 BAA8 OUT 0x18,R10
(0038) delay1ms(1);
9A E001 LDI R16,1
9B E010 LDI R17,0
9C DFE0 RCALL _delay1ms
(0039) EN_1;
9D 9ADD SBI 0x1B,5
(0040) delay1ms(1);
9E E001 LDI R16,1
9F E010 LDI R17,0
A0 DFDC RCALL _delay1ms
(0041) EN_0;
A1 98DD CBI 0x1B,5
A2 90A9 LD R10,Y+
A3 9508 RET
_wr_dat:
dat --> R10
A4 92AA ST R10,-Y
A5 2EA0 MOV R10,R16
(0042) }
(0043) void wr_dat(unsigned char dat)//写数据//
(0044) {
(0045) delay1ms(1);
A6 E001 LDI R16,1
A7 E010 LDI R17,0
A8 DFD4 RCALL _delay1ms
(0046) RS_1;
A9 9ADB SBI 0x1B,3
(0047) RW_0;
AA 98DC CBI 0x1B,4
(0048) EN_0;
AB 98DD CBI 0x1B,5
(0049) PORTB=dat;
AC BAA8 OUT 0x18,R10
(0050) delay1ms(1);
AD E001 LDI R16,1
AE E010 LDI R17,0
AF DFCD RCALL _delay1ms
(0051) EN_1;
B0 9ADD SBI 0x1B,5
(0052) delay1ms(1);
B1 E001 LDI R16,1
B2 E010 LDI R17,0
B3 DFC9 RCALL _delay1ms
(0053) EN_0;
B4 98DD CBI 0x1B,5
B5 90A9 LD R10,Y+
B6 9508 RET
(0054) }
(0055) void lcd_init()//初始化设置//
(0056) {
(0057) DDRB|=0xFF; /*I/O口方向设置*/
_lcd_init:
B7 B387 IN R24,0x17
B8 6F8F ORI R24,0xFF
B9 BB87 OUT 0x17,R24
(0058) DDRA|=(1<<3)|(1<<4)|(1<<5);
BA B38A IN R24,0x1A
BB 6388 ORI R24,0x38
BC BB8A OUT 0x1A,R24
(0059) delay1ms(15);
BD E00F LDI R16,0xF
BE E010 LDI R17,0
BF DFBD RCALL _delay1ms
(0060) wr_com(0x38);delay1ms(5);
C0 E308 LDI R16,0x38
C1 DFCF RCALL _wr_com
C2 E005 LDI R16,5
C3 E010 LDI R17,0
C4 DFB8 RCALL _delay1ms
(0061) wr_com(0x08);delay1ms(5);
C5 E008 LDI R16,0x8
C6 DFCA RCALL _wr_com
C7 E005 LDI R16,5
C8 E010 LDI R17,0
C9 DFB3 RCALL _delay1ms
(0062) wr_com(0x01);delay1ms(5);
CA E001 LDI R16,1
CB DFC5 RCALL _wr_com
CC E005 LDI R16,5
CD E010 LDI R17,0
CE DFAE RCALL _delay1ms
(0063) wr_com(0x06);delay1ms(5);
CF E006 LDI R16,6
D0 DFC0 RCALL _wr_com
D1 E005 LDI R16,5
D2 E010 LDI R17,0
D3 DFA9 RCALL _delay1ms
(0064) wr_com(0x0c);delay1ms(5);
D4 E00C LDI R16,0xC
D5 DFBB RCALL _wr_com
D6 E005 LDI R16,5
D7 E010 LDI R17,0
D8 DFA4 RCALL _delay1ms
D9 9508 RET
_display:
p --> R20
DA 934A ST R20,-Y
DB 935A ST R21,-Y
DC 01A8 MOVW R20,R16
(0065) }
(0066)
(0067) void display(unsigned char *p)//显示//
(0068) {
DD C008 RJMP 0x00E6
(0069) while(*p!='\0')
(0070) {
(0071) wr_dat(*p);
DE 01FA MOVW R30,R20
DF 8100 LDD R16,Z+0
E0 DFC3 RCALL _wr_dat
(0072) p++;
E1 5F4F SUBI R20,0xFF
E2 4F5F SBCI R21,0xFF
(0073) delay1ms(1);
E3 E001 LDI R16,1
E4 E010 LDI R17,0
E5 DF97 RCALL _delay1ms
E6 01FA MOVW R30,R20
E7 8020 LDD R2,Z+0
E8 2022 TST R2
E9 F7A1 BNE 0x00DE
EA 9159 LD R21,Y+
EB 9149 LD R20,Y+
EC 9508 RET
(0074) }
(0075) }
(0076)
(0077) /******************************ds1820程序***************************************/
(0078) void delay_18B20(int time)
(0079) {
(0080) do
(0081) time--;
_delay_18B20:
time --> R16
ED 5001 SUBI R16,1
EE 4010 SBCI R17,0
(0082) while(time>1);
EF E081 LDI R24,1
F0 E090 LDI R25,0
F1 1780 CP R24,R16
F2 0791 CPC R25,R17
F3 F3CC BLT 0x00ED
F4 9508 RET
_ds1820rst:
ack --> R20
F5 934A ST R20,-Y
(0083) }
(0084) unsigned char ds1820rst()/*ds1820复位*/
(0085) {
(0086) unsigned char ack;
(0087) DDRA|=0x01;
F6 9AD0 SBI 0x1A,0
(0088) PORTA&=0xfe;
F7 B38B IN R24,0x1B
F8 7F8E ANDI R24,0xFE
F9 BB8B OUT 0x1B,R24
(0089) delay_18B20(500);
FA EF04 LDI R16,0xF4
FB E011 LDI R17,1
FC DFF0 RCALL _delay_18B20
(0090) PORTA|=0x01;
FD 9AD8 SBI 0x1B,0
(0091) DDRA&=0xfe;
FE B38A IN R24,0x1A
FF 7F8E ANDI R24,0xFE
100 BB8A OUT 0x1A,R24
(0092) delay_18B20(75);
101 E40B LDI R16,0x4B
102 E010 LDI R17,0
103 DFE9 RCALL _delay_18B20
(0093) ack=PINA;
104 B349 IN R20,0x19
(0094) ack&=0x01;
105 7041 ANDI R20,1
(0095) delay_18B20(500);
106 EF04 LDI R16,0xF4
107 E011 LDI R17,1
108 DFE4 RCALL _delay_18B20
(0096) return ack;
109 2F04 MOV R16,R20
10A 9149 LD R20,Y+
10B 9508 RET
_ds1820rd:
byte --> R20
temp --> R10
i --> R22
10C 940E 02AA CALL push_xgsetF00C
(0097) }
(0098)
(0099) unsigned char ds1820rd()/*读数据*/
(0100) {
(0101) unsigned char i,byte,temp;
(0102) byte=0x00;
10E 2744 CLR R20
(0103) for (i=0;i<8;i++)
10F 2766 CLR R22
110 C01F RJMP 0x0130
(0104) {
(0105) DDRA|=0x01;
111 9AD0 SBI 0x1A,0
(0106) PORTA&=0xfe;//给脉冲信号
112 B38B IN R24,0x1B
113 7F8E ANDI R24,0xFE
114 BB8B OUT 0x1B,R24
(0107) delay_18B20(3);
115 E003 LDI R16,3
116 E010 LDI R17,0
117 DFD5 RCALL _delay_18B20
(0108) PORTA|=0x01;
118 9AD8 SBI 0x1B,0
(0109) DDRA&=0xfe;
119 B38A IN R24,0x1A
11A 7F8E ANDI R24,0xFE
11B BB8A OUT 0x1A,R24
(0110) delay_18B20(10);
11C E00A LDI R16,0xA
11D E010 LDI R17,0
11E DFCE RCALL _delay_18B20
(0111) temp=(PINA&0x01);
11F B389 IN R24,0x19
120 7081 ANDI R24,1
121 2EA8 MOV R10,R24
(0112) if(temp!=0x00)
122 2388 TST R24
123 F009 BEQ 0x0125
(0113) byte|=0x80;
124 6840 ORI R20,0x80
(0114) if(i<7)
125 3067 CPI R22,7
126 F408 BCC 0x0128
(0115) byte=byte>>1;
127 9546 LSR R20
(0116) delay_18B20(100);
128 E604 LDI R16,0x64
129 E010 LDI R17,0
12A DFC2 RCALL _delay_18B20
(0117) DDRA|=0x01;
12B 9AD0 SBI 0x1A,0
(0118) delay_18B20(5);
12C E005 LDI R16,5
12D E010 LDI R17,0
12E DFBE RCALL _delay_18B20
12F 9563 INC R22
130 3068 CPI R22,0x8
131 F2F8 BCS 0x0111
(0119) }
(0120) return byte;
132 2F04 MOV R16,R20
133 940C 02B1 JMP pop_xgsetF00C
_ds1820wr:
i --> R22
j --> R10
wdata --> R20
135 940E 02AA CALL push_xgsetF00C
137 2F40 MOV R20,R16
(0121) }
(0122)
(0123) void ds1820wr(uchar wdata)/*写数据*/
(0124) {
(0125) unsigned char i,j;
(0126) DDRA|=0x01;
138 9AD0 SBI 0x1A,0
(0127) for (j=0;j<=7;j++)
139 24AA CLR R10
13A C01B RJMP 0x0156
(0128) {
(0129) i=wdata&0x01;
13B 2F64 MOV R22,R20
13C 7061 ANDI R22,1
(0130) if(i==0x01)
13D 3061 CPI R22,1
13E F459 BNE 0x014A
(0131) {
(0132) PORTA&=0xfe;
13F B38B IN R24,0x1B
140 7F8E ANDI R24,0xFE
141 BB8B OUT 0x1B,R24
(0133) delay_18B20(10);
142 E00A LDI R16,0xA
143 E010 LDI R17,0
144 DFA8 RCALL _delay_18B20
(0134) PORTA|=0x01;
145 9AD8 SBI 0x1B,0
(0135) delay_18B20(100);
146 E604 LDI R16,0x64
147 E010 LDI R17,0
148 DFA4 RCALL _delay_18B20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -