📄 main.lis
字号:
009C .dbend
009C .dbfile H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\initrialm128.h
009C .dbfunc e Init_Devices _Init_Devices fV
.even
009C _Init_Devices::
009C .dbline -1
009C .dbline 16
009C ; //ICC-AVR application builder : 2007-6-27 10:26:06
009C ; // Target : M8
009C ; // Crystal: 8.0000Mhz
009C ;
009C ; /**************初始化m8函数***************/
009C ; #ifndef Initrial_M128_H
009C ; #define Initrial_M128_H
009C ;
009C ; void Init_Devices(void);
009C ; void Port_Init(void);
009C ;
009C ;
009C ;
009C ; //call this routine to initialize all peripherals
009C ; void Init_Devices(void)
009C ; {
009C .dbline 18
009C ; //stop errant interrupts until set up
009C ; CLI(); //disable all interrupts
009C F894 cli
009E .dbline 19
009E ; Port_Init();
009E 02D0 xcall _Port_Init
00A0 .dbline 20
00A0 ; SEI(); //re-enable interrupts
00A0 7894 sei
00A2 .dbline -2
00A2 L29:
00A2 .dbline 0 ; func end
00A2 0895 ret
00A4 .dbend
00A4 .dbfunc e Port_Init _Port_Init fV
.even
00A4 _Port_Init::
00A4 .dbline -1
00A4 .dbline 25
00A4 ; //all peripherals are now initialized
00A4 ; }
00A4 ;
00A4 ; void Port_Init(void)
00A4 ; {
00A4 .dbline 26
00A4 ; PORTA = 0xff;
00A4 8FEF ldi R24,255
00A6 8BBB out 0x1b,R24
00A8 .dbline 27
00A8 ; DDRA = 0xff;
00A8 8ABB out 0x1a,R24
00AA .dbline 28
00AA ; PORTB = 0xff;
00AA 88BB out 0x18,R24
00AC .dbline 29
00AC ; DDRB = 0xff;
00AC 87BB out 0x17,R24
00AE .dbline 30
00AE ; PORTC = 0xff; //m103 output only
00AE 85BB out 0x15,R24
00B0 .dbline 31
00B0 ; DDRC = 0xff;
00B0 84BB out 0x14,R24
00B2 .dbline 32
00B2 ; PORTD = 0xff;
00B2 82BB out 0x12,R24
00B4 .dbline 33
00B4 ; DDRD = 0xff;
00B4 81BB out 0x11,R24
00B6 .dbline 34
00B6 ; PORTE = 0xFF;
00B6 83B9 out 0x3,R24
00B8 .dbline 35
00B8 ; DDRE = 0xff;
00B8 82B9 out 0x2,R24
00BA .dbline 36
00BA ; PORTF = 0xff;
00BA 80936200 sts 98,R24
00BE .dbline 37
00BE ; DDRF = 0xff;
00BE 80936100 sts 97,R24
00C2 .dbline 38
00C2 ; PORTG = 0xff;
00C2 80936500 sts 101,R24
00C6 .dbline 39
00C6 ; DDRG = 0xff;
00C6 80936400 sts 100,R24
00CA .dbline -2
00CA L30:
00CA .dbline 0 ; func end
00CA 0895 ret
00CC .dbend
00CC .dbfile H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\ds18b20.h
00CC .dbfunc e resetDS18B20 _resetDS18B20 fc
00CC ; errTime -> R10
.even
00CC _resetDS18B20::
00CC AA92 st -y,R10
00CE .dbline -1
00CE .dbline 20
00CE ; /*--------------------------------------------------*/
00CE ; /* AVR-ARM开发网论坛 */
00CE ; /* http://www.avrarm.com */
00CE ; /* AVR生成代码测试程序 */
00CE ; /*--------------------------------------------------*/
00CE ; /* 程序由AVR辅助开发工具V2.1.1自动生成 */
00CE ; /* AVR系统的处理器为: ATMega128 */
00CE ; /* AVR系统的晶振频率: 8.0000 Mhz */
00CE ; /*--------------------------------------------------*/
00CE ;
00CE ; #include "define.h"
00CE ; #include "delay.h"
00CE ;
00CE ;
00CE ; /**********************************************************************
00CE ; functionName: unsigned char resetDS18B20(void)
00CE ; description :DS18B20初始化
00CE ; **********************************************************************/
00CE ; unsigned char resetDS18B20(void)
00CE ; {
00CE .dbline 21
00CE ; unsigned char errTime=0;
00CE AA24 clr R10
00D0 .dbline 22
00D0 ; RLS_DS18B20; //释放总线
00D0 1298 cbi 0x2,2
00D2 .dbline 23
00D2 ; _NOP();
00D2 0000 nop
00D4 .dbline 24
00D4 ; HLD_DS18B20; //Maga16控制总线
00D4 129A sbi 0x2,2
00D6 .dbline 25
00D6 ; CLR_DS18B20; //强制拉低
00D6 1A98 cbi 0x3,2
00D8 .dbline 26
00D8 ; Delay_Us(480); //209.42us
00D8 00EE ldi R16,480
00DA 11E0 ldi R17,1
00DC 94DF xcall _Delay_Us
00DE .dbline 28
00DE ; //以上延时大于480us
00DE ; RLS_DS18B20; //释放总线,总线自动上拉
00DE 1298 cbi 0x2,2
00E0 .dbline 29
00E0 ; _NOP();
00E0 0000 nop
00E2 09C0 xjmp L33
00E4 L32:
00E4 .dbline 31
00E4 ; while(STU_DS18B20)
00E4 ; {
00E4 .dbline 32
00E4 ; Delay_Us(6); //5.15us
00E4 06E0 ldi R16,6
00E6 10E0 ldi R17,0
00E8 8EDF xcall _Delay_Us
00EA .dbline 33
00EA ; errTime++;
00EA A394 inc R10
00EC .dbline 34
00EC ; if(errTime>20)
00EC 84E1 ldi R24,20
00EE 8A15 cp R24,R10
00F0 10F4 brsh L35
00F2 X6:
00F2 .dbline 35
00F2 ; return(0x00); //如果等带大于约 5.15us*20就返回0x00,报告复位失败(实际上只要等待15-60us)
00F2 0027 clr R16
00F4 10C0 xjmp L31
00F6 L35:
00F6 .dbline 36
00F6 ; }
00F6 L33:
00F6 .dbline 30
00F6 0A99 sbic 0x1,2
00F8 F5CF rjmp L32
00FA X7:
00FA .dbline 37
00FA ; errTime=0;
00FA AA24 clr R10
00FC 09C0 xjmp L38
00FE L37:
00FE .dbline 39
00FE ; while(!(STU_DS18B20))
00FE ; {
00FE .dbline 40
00FE ; Delay_Us(6); //5.15us
00FE 06E0 ldi R16,6
0100 10E0 ldi R17,0
0102 81DF xcall _Delay_Us
0104 .dbline 41
0104 ; errTime++;
0104 A394 inc R10
0106 .dbline 42
0106 ; if(errTime>50)
0106 82E3 ldi R24,50
0108 8A15 cp R24,R10
010A 10F4 brsh L40
010C X8:
010C .dbline 43
010C ; return(0x00); //如果等带大于约 5.15us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
010C 0027 clr R16
010E 03C0 xjmp L31
0110 L40:
0110 .dbline 44
0110 ; }
0110 L38:
0110 .dbline 38
0110 0A9B sbis 0x1,2
0112 F5CF rjmp L37
0114 X9:
0114 .dbline 45
0114 ; return(0xff);
0114 0FEF ldi R16,255
0116 .dbline -2
0116 L31:
0116 .dbline 0 ; func end
0116 A990 ld R10,y+
0118 0895 ret
011A .dbsym r errTime 10 c
011A .dbend
011A .dbfunc e readByteDS18B20 _readByteDS18B20 fc
011A ; retVal -> R20
011A ; i -> R22
.even
011A _readByteDS18B20::
011A 4A93 st -y,R20
011C 6A93 st -y,R22
011E .dbline -1
011E .dbline 54
011E ;
011E ; }
011E ;
011E ; /**********************************************************************
011E ; functionName: unsigned char readByteDS18B20(void)
011E ; description :读DS18B20一个字节
011E ; **********************************************************************/
011E ; unsigned char readByteDS18B20(void)
011E ; {
011E .dbline 56
011E ; unsigned char i;
011E ; unsigned char retVal=0;
011E 4427 clr R20
0120 .dbline 57
0120 ; RLS_DS18B20; //释放总线
0120 1298 cbi 0x2,2
0122 .dbline 58
0122 ; for(i=8;i>0;i--)
0122 68E0 ldi R22,8
0124 11C0 xjmp L46
0126 L43:
0126 .dbline 59
0126 ; {
0126 .dbline 60
0126 ; retVal>>=1;
0126 4695 lsr R20
0128 .dbline 61
0128 ; HLD_DS18B20; //Maga16控制总线
0128 129A sbi 0x2,2
012A .dbline 62
012A ; CLR_DS18B20; //强制拉低
012A 1A98 cbi 0x3,2
012C .dbline 63
012C ; Delay_Us(8); //延时大于1us
012C 08E0 ldi R16,8
012E 10E0 ldi R17,0
0130 6ADF xcall _Delay_Us
0132 .dbline 64
0132 ; SET_DS18B20; //释放总线,DS18B20会将总线强制拉低
0132 1A9A sbi 0x3,2
0134 .dbline 66
0134 ; //delay_nus(8);
0134 ; RLS_DS18B20; //释放总线
0134 1298 cbi 0x2,2
0136 .dbline 67
0136 ; if(STU_DS18B20)
0136 0A9B sbis 0x1,2
0138 01C0 rjmp L47
013A X10:
013A .dbline 68
013A ; retVal|=0x80;
013A 4068 ori R20,128
013C L47:
013C .dbline 69
013C ; Delay_Us(32); //31us
013C 00E2 ldi R16,32
013E 10E0 ldi R17,0
0140 62DF xcall _Delay_Us
0142 .dbline 70
0142 ; HLD_DS18B20; //释放总线
0142 129A sbi 0x2,2
0144 .dbline 71
0144 ; SET_DS18B20; //释放总线,DS18B20会将总线强制拉低
0144 1A9A sbi 0x3,2
0146 .dbline 73
0146 ; //delay_nus(30); //30.38us
0146 ; }
0146 L44:
0146 .dbline 58
0146 6A95 dec R22
0148 L46:
0148 .dbline 58
0148 80E0 ldi R24,0
014A 8617 cp R24,R22
014C 60F3 brlo L43
014E X11:
014E .dbline 74
014E ; Delay_Us(5); //2.71us(大于1us就行了)
014E 05E0 ldi R16,5
0150 10E0 ldi R17,0
0152 59DF xcall _Delay_Us
0154 .dbline 75
0154 ; return(retVal);
0154 042F mov R16,R20
0156 .dbline -2
0156 L42:
0156 .dbline 0 ; func end
0156 6991 ld R22,y+
0158 4991 ld R20,y+
015A 0895 ret
015C .dbsym r retVal 20 c
015C .dbsym r i 22 c
015C .dbend
015C .dbfunc e writeByteDS18B20 _writeByteDS18B20 fV
015C ; temp -> R22
015C ; i -> R20
015C ; wb -> R10
.even
015C _writeByteDS18B20::
015C 0E940000 xcall push_xgsetF00C
0160 A02E mov R10,R16
0162 .dbline -1
0162 .dbline 84
0162 ;
0162 ; }
0162 ;
0162 ; /**********************************************************************
0162 ; functionName: unsigned char readByteDS18B20(void)
0162 ; description :写DS18B20一个字节
0162 ; **********************************************************************/
0162 ; void writeByteDS18B20(unsigned char wb)
0162 ; {
0162 .dbline 87
0162 ; unsigned char i;
0162 ; unsigned char temp;
0162 ; RLS_DS18B20; //释放总线
0162 1298 cbi 0x2,2
0164 .dbline 88
0164 ; for(i=0;i<8;i++)
0164 4427 clr R20
0166 17C0 xjmp L53
0168 L50:
0168 .dbline 89
0168 ; {
0168 .dbline 90
0168 ; HLD_DS18B20; //Maga16控制总线
0168 129A sbi 0x2,2
016A .dbline 91
016A ; CLR_DS18B20; //强制拉低
016A 1A98 cbi 0x3,2
016C .dbline 92
016C ; Delay_Us(4); //14.92us
016C 04E0 ldi R16,4
016E 10E0 ldi R17,0
0170 4ADF xcall _Delay_Us
0172 .dbline 95
0172 ; //SET_DS18B20; //释放总线
0172 ; //delay_nus(16); //14.92us
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -