📄 smg_ds18b20.lst
字号:
__text_start:
__start:
59 EFCF LDI R28,0xFF
5A E1D0 LDI R29,0x10
5B BFCD OUT 0x3D,R28
5C BFDE OUT 0x3E,R29
5D 51CE SUBI R28,0x1E
5E 40D0 SBCI R29,0
5F EA0A LDI R16,0xAA
60 8308 STD Y+0,R16
61 2400 CLR R0
62 E1EA LDI R30,0x1A
63 E0F1 LDI R31,1
64 E011 LDI R17,1
65 33E9 CPI R30,0x39
66 07F1 CPC R31,R17
67 F011 BEQ 0x006A
68 9201 ST R0,Z+
69 CFFB RJMP 0x0065
6A 8300 STD Z+0,R16
6B E9E8 LDI R30,0x98
6C E0F0 LDI R31,0
6D E0A0 LDI R26,0
6E E0B1 LDI R27,1
6F E010 LDI R17,0
70 E000 LDI R16,0
71 BF0B OUT 0x3B,R16
72 3BE2 CPI R30,0xB2
73 07F1 CPC R31,R17
74 F021 BEQ 0x0079
75 95C8 LPM
76 9631 ADIW R30,1
77 920D ST R0,X+
78 CFF9 RJMP 0x0072
79 940E 01A8 CALL _main
_exit:
7B CFFF RJMP _exit
FILE: H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\delay.h
(0001) #ifndef _DELAY_H
(0002) #define _DELAY_H
(0003)
(0004) // mcu:avr crystal=8MHz
(0005)
(0006) /**************************************************************
(0007) **函数功能:延时1us
(0008) **输入参数:无
(0009) **返回值:无
(0010) **在本函数外定义变量:无
(0011) **调用的函数:NOP()
(0012) **************************************************************/
(0013) void Delay_1us(void);
(0014)
(0015) /**************************************************************
(0016) **函数功能:us级延时
(0017) **输入参数:xus:延时us数
(0018) **返回值:无
(0019) **在本函数外定义变量:无
(0020) **调用的函数:Delay_1us()
(0021) **************************************************************/
(0022) void Delay_Us(unsigned int xus);
(0023)
(0024) /**************************************************************
(0025) **函数功能:延时1ms
(0026) **输入参数:无
(0027) **返回值:无
(0028) **在本函数外定义变量:无
(0029) **调用的函数:NOP()
(0030) **************************************************************/
(0031) void Delay_1ms(void);
(0032)
(0033) /**************************************************************
(0034) **函数功能:ms级延时
(0035) **输入参数:xms:延时ms数
(0036) **返回值:无
(0037) **在本函数外定义变量:无
(0038) **调用的函数:Delay_1ms()
(0039) **************************************************************/
(0040) void Delay_Ms(unsigned int xms);
(0041)
(0042) /**************************************************************
(0043) **函数功能:10us级延时
(0044) **输入参数:x10us:延时x10us数
(0045) **返回值:无
(0046) **在本函数外定义变量:无
(0047) **调用的函数:无
(0048) **************************************************************/
(0049) void Delay10us(Word x10us);
(0050)
(0051)
(0052) void Delay_1us()
(0053) {
(0054) unsigned char t=2;
_Delay_1us:
t --> R16
7C E002 LDI R16,2
(0055) t--;
7D 950A DEC R16
7E 9508 RET
_Delay_Us:
xus --> R20
7F 934A ST R20,-Y
80 935A ST R21,-Y
81 01A8 MOVW R20,R16
(0056) }
(0057)
(0058) void Delay_Us(unsigned int xus)
(0059) {
82 C001 RJMP 0x0084
(0060) while (xus--)
(0061) Delay_1us();
83 DFF8 RCALL _Delay_1us
84 011A MOVW R2,R20
85 5041 SUBI R20,1
86 4050 SBCI R21,0
87 2022 TST R2
88 F7D1 BNE 0x0083
89 2033 TST R3
8A F7C1 BNE 0x0083
8B 9159 LD R21,Y+
8C 9149 LD R20,Y+
8D 9508 RET
(0062) }
(0063)
(0064) void Delay_1ms(void)
(0065) {
(0066) unsigned int i;
(0067) for(i=0;i<1142;i++)
_Delay_1ms:
i --> R16
8E 2700 CLR R16
8F 2711 CLR R17
90 C002 RJMP 0x0093
91 5F0F SUBI R16,0xFF
92 4F1F SBCI R17,0xFF
93 3706 CPI R16,0x76
94 E0E4 LDI R30,4
95 071E CPC R17,R30
96 F3D0 BCS 0x0091
97 9508 RET
_Delay_Ms:
i --> R20
j --> R22
xms --> R16
98 940E 03CF CALL push_xgsetF000
(0068) ;
(0069) }
(0070)
(0071) void Delay_Ms(Word xms) //crystal=8MHz
(0072) {
(0073) Word i,j; //variable:declare Word
(0074) for(i=0; i<xms; i++)
9A 2744 CLR R20
9B 2755 CLR R21
9C C014 RJMP 0x00B1
(0075) for(j=0; j<498;j++)
9D 2766 CLR R22
9E 2777 CLR R23
9F C00B RJMP 0x00AB
(0076) {
(0077) NOP();
A0 0000 NOP
(0078) NOP();
A1 0000 NOP
(0079) NOP();
A2 0000 NOP
(0080) NOP();
A3 0000 NOP
(0081) NOP();
A4 0000 NOP
(0082) NOP();
A5 0000 NOP
(0083) NOP();
A6 0000 NOP
(0084) NOP();
A7 0000 NOP
(0085) NOP();
A8 0000 NOP
A9 5F6F SUBI R22,0xFF
AA 4F7F SBCI R23,0xFF
AB 3F62 CPI R22,0xF2
AC E0E1 LDI R30,1
AD 077E CPC R23,R30
AE F388 BCS 0x00A0
AF 5F4F SUBI R20,0xFF
B0 4F5F SBCI R21,0xFF
B1 1740 CP R20,R16
B2 0751 CPC R21,R17
B3 F348 BCS 0x009D
B4 940C 03D4 JMP pop_xgsetF000
_Delay10us:
i --> R20
j --> R22
x10us --> R16
B6 940E 03CF CALL push_xgsetF000
(0086) }
(0087) }
(0088)
(0089) void Delay10us(Word x10us)//crystal=8MHz
(0090) {
(0091) Word i;Byte j; //variable:declare Word
(0092) for(i=0; i<x10us; i++)
B8 2744 CLR R20
B9 2755 CLR R21
BA C00A RJMP 0x00C5
(0093) {
(0094) for(j=0;j<2;j++)
BB 2766 CLR R22
BC C004 RJMP 0x00C1
(0095) {
(0096) NOP();
BD 0000 NOP
(0097) NOP();
BE 0000 NOP
(0098) NOP();
BF 0000 NOP
C0 9563 INC R22
C1 3062 CPI R22,2
C2 F3D0 BCS 0x00BD
C3 5F4F SUBI R20,0xFF
C4 4F5F SBCI R21,0xFF
C5 1740 CP R20,R16
C6 0751 CPC R21,R17
C7 F398 BCS 0x00BB
C8 940C 03D4 JMP pop_xgsetF000
FILE: H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\initrialm128.h
(0001) //ICC-AVR application builder : 2007-6-27 10:26:06
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) /**************初始化m8函数***************/
(0006) #ifndef Initrial_M128_H
(0007) #define Initrial_M128_H
(0008)
(0009) void Init_Devices(void);
(0010) void Port_Init(void);
(0011)
(0012)
(0013)
(0014) //call this routine to initialize all peripherals
(0015) void Init_Devices(void)
(0016) {
(0017) //stop errant interrupts until set up
(0018) CLI(); //disable all interrupts
_Init_Devices:
CA 94F8 BCLR 7
(0019) Port_Init();
CB D002 RCALL _Port_Init
(0020) SEI(); //re-enable interrupts
CC 9478 BSET 7
CD 9508 RET
(0021) //all peripherals are now initialized
(0022) }
(0023)
(0024) void Port_Init(void)
(0025) {
(0026) PORTA = 0xff;
_Port_Init:
CE EF8F LDI R24,0xFF
CF BB8B OUT 0x1B,R24
(0027) DDRA = 0xff;
D0 BB8A OUT 0x1A,R24
(0028) PORTB = 0xff;
D1 BB88 OUT 0x18,R24
(0029) DDRB = 0xff;
D2 BB87 OUT 0x17,R24
(0030) PORTC = 0xff; //m103 output only
D3 BB85 OUT 0x15,R24
(0031) DDRC = 0xff;
D4 BB84 OUT 0x14,R24
(0032) PORTD = 0xff;
D5 BB82 OUT 0x12,R24
(0033) DDRD = 0xff;
D6 BB81 OUT 0x11,R24
(0034) PORTE = 0xFF;
D7 B983 OUT 0x03,R24
(0035) DDRE = 0xff;
D8 B982 OUT 0x02,R24
(0036) PORTF = 0xff;
D9 9380 0062 STS 0x0062,R24
(0037) DDRF = 0xff;
DB 9380 0061 STS 0x0061,R24
(0038) PORTG = 0xff;
DD 9380 0065 STS 0x0065,R24
(0039) DDRG = 0xff;
DF 9380 0064 STS 0x0064,R24
E1 9508 RET
_resetDS18B20:
errTime --> R10
E2 92AA ST R10,-Y
FILE: H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\ds18b20.h
(0001) /*--------------------------------------------------*/
(0002) /* AVR-ARM开发网论坛 */
(0003) /* http://www.avrarm.com */
(0004) /* AVR生成代码测试程序 */
(0005) /*--------------------------------------------------*/
(0006) /* 程序由AVR辅助开发工具V2.1.1自动生成 */
(0007) /* AVR系统的处理器为: ATMega128 */
(0008) /* AVR系统的晶振频率: 8.0000 Mhz */
(0009) /*--------------------------------------------------*/
(0010)
(0011) #include "define.h"
(0012) #include "delay.h"
(0013)
(0014)
(0015) /**********************************************************************
(0016) functionName: unsigned char resetDS18B20(void)
(0017) description :DS18B20初始化
(0018) **********************************************************************/
(0019) unsigned char resetDS18B20(void)
(0020) {
(0021) unsigned char errTime=0;
E3 24AA CLR R10
(0022) RLS_DS18B20; //释放总线
E4 9812 CBI 0x02,2
(0023) _NOP();
E5 0000 NOP
(0024) HLD_DS18B20; //Maga16控制总线
E6 9A12 SBI 0x02,2
(0025) CLR_DS18B20; //强制拉低
E7 981A CBI 0x03,2
(0026) Delay_Us(480); //209.42us
E8 EE00 LDI R16,0xE0
E9 E011 LDI R17,1
EA DF94 RCALL _Delay_Us
(0027) //以上延时大于480us
(0028) RLS_DS18B20; //释放总线,总线自动上拉
EB 9812 CBI 0x02,2
(0029) _NOP();
EC 0000 NOP
ED C009 RJMP 0x00F7
(0030) while(STU_DS18B20)
(0031) {
(0032) Delay_Us(6); //5.15us
EE E006 LDI R16,6
EF E010 LDI R17,0
F0 DF8E RCALL _Delay_Us
(0033) errTime++;
F1 94A3 INC R10
(0034) if(errTime>20)
F2 E184 LDI R24,0x14
F3 158A CP R24,R10
F4 F410 BCC 0x00F7
(0035) return(0x00); //如果等带大于约 5.15us*20就返回0x00,报告复位失败(实际上只要等待15-60us)
F5 2700 CLR R16
F6 C010 RJMP 0x0107
F7 990A SBIC 0x01,2
F8 CFF5 RJMP 0x00EE
(0036) }
(0037) errTime=0;
F9 24AA CLR R10
FA C009 RJMP 0x0104
(0038) while(!(STU_DS18B20))
(0039) {
(0040) Delay_Us(6); //5.15us
FB E006 LDI R16,6
FC E010 LDI R17,0
FD DF81 RCALL _Delay_Us
(0041) errTime++;
FE 94A3 INC R10
(0042) if(errTime>50)
FF E382 LDI R24,0x32
100 158A CP R24,R10
101 F410 BCC 0x0104
(0043) return(0x00); //如果等带大于约 5.15us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
102 2700 CLR R16
103 C003 RJMP 0x0107
104 9B0A SBIS 0x01,2
105 CFF5 RJMP 0x00FB
(0044) }
(0045) return(0xff);
106 EF0F LDI R16,0xFF
107 90A9 LD R10,Y+
108 9508 RET
_readByteDS18B20:
retVal --> R20
i --> R22
109 934A ST R20,-Y
10A 936A ST R22,-Y
(0046)
(0047) }
(0048)
(0049) /**********************************************************************
(0050) functionName: unsigned char readByteDS18B20(void)
(0051) description :读DS18B20一个字节
(0052) **********************************************************************/
(0053) unsigned char readByteDS18B20(void)
(0054) {
(0055) unsigned char i;
(0056) unsigned char retVal=0;
10B 2744 CLR R20
(0057) RLS_DS18B20; //释放总线
10C 9812 CBI 0x02,2
(0058) for(i=8;i>0;i--)
10D E068 LDI R22,0x8
10E C011 RJMP 0x0120
(0059) {
(0060) retVal>>=1;
10F 9546 LSR R20
(0061) HLD_DS18B20; //Maga16控制总线
110 9A12 SBI 0x02,2
(0062) CLR_DS18B20; //强制拉低
111 981A CBI 0x03,2
(0063) Delay_Us(8); //延时大于1us
112 E008 LDI R16,0x8
113 E010 LDI R17,0
114 DF6A RCALL _Delay_Us
(0064) SET_DS18B20; //释放总线,DS18B20会将总线强制拉低
115 9A1A SBI 0x03,2
(0065) //delay_nus(8);
(0066) RLS_DS18B20; //释放总线
116 9812 CBI 0x02,2
(0067) if(STU_DS18B20)
117 9B0A SBIS 0x01,2
118 C001 RJMP 0x011A
(0068) retVal|=0x80;
119 6840 ORI R20,0x80
(0069) Delay_Us(32); //31us
11A E200 LDI R16,0x20
11B E010 LDI R17,0
11C DF62 RCALL _Delay_Us
(0070) HLD_DS18B20; //释放总线
11D 9A12 SBI 0x02,2
(0071) SET_DS18B20; //释放总线,DS18B20会将总线强制拉低
11E 9A1A SBI 0x03,2
11F 956A DEC R22
120 E080 LDI R24,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -