📄 b20.lis
字号:
.module b20.c
.area text(rom, con, rel)
0000 .dbfile F:\programme\RF905\b20.c
0000 .dbfunc e DelayUS _DelayUS fV
0000 ; time -> R16,R17
.even
0000 _DelayUS::
0000 .dbline -1
0000 .dbline 22
0000 ; /***********************************************************
0000 ; * 文件名称:18b20.c
0000 ; * 功 能:读取18B20的温度
0000 ; * 时 间:2006.8.1
0000 ; * 端口使用:PD4(DQ)
0000 ; ************************************************************/
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ;
0000 ;
0000 ; unsigned int delaytime;
0000 ;
0000 ;
0000 ;
0000 ; /************************************************************
0000 ; * 函数名称:void DelayUS(unsigned int time)
0000 ; * 功 能:软件延时Us
0000 ; * 入口参数:time 延时时间
0000 ; * 出口参数:无
0000 ; ************************************************************/
0000 ; void DelayUS(unsigned int time)
0000 ; {
0000 L2:
0000 .dbline 24
0000 ; do
0000 ; time--;
0000 0150 subi R16,1
0002 1040 sbci R17,0
0004 L3:
0004 .dbline 25
0004 ; while(time > 1);
0004 81E0 ldi R24,1
0006 90E0 ldi R25,0
0008 8017 cp R24,R16
000A 9107 cpc R25,R17
000C C8F3 brlo L2
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r time 16 i
0010 .dbend
0010 .dbfunc e DelayMS _DelayMS fV
0010 ; time -> R16,R17
.even
0010 _DelayMS::
0010 .dbline -1
0010 .dbline 34
0010 ; }
0010 ; /************************************************************
0010 ; * 函数名称:void DelayMS(unsigned int time)
0010 ; * 功 能:软件延时
0010 ; * 入口参数:time 延时时间 MS
0010 ; * 出口参数:无
0010 ; ************************************************************/
0010 ; void DelayMS (unsigned int time)
0010 ; {
0010 .dbline 37
0010 ; //TIMSK = 0x01; //timer interrupt sources
0010 ; //SEI(); //打开定时器中断
0010 ; delaytime = time;
0010 10930100 sts _delaytime+1,R17
0014 00930000 sts _delaytime,R16
0018 L6:
0018 .dbline 39
0018 L7:
0018 .dbline 38
0018 ; while(delaytime)
0018 20900000 lds R2,_delaytime
001C 30900100 lds R3,_delaytime+1
0020 2220 tst R2
0022 D1F7 brne L6
0024 3320 tst R3
0026 C1F7 brne L6
0028 X0:
0028 .dbline -2
0028 L5:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym r time 16 i
002A .dbend
002A .dbfunc e DisInit _DisInit fV
.even
002A _DisInit::
002A .dbline -1
002A .dbline 48
002A ; ;
002A ; }
002A ; /***********************************************************
002A ; * 函数名称:void DisInit(void)
002A ; * 功 能:显示端口初始化
002A ; * 入口参数:无
002A ; * 出口参数:无
002A ; **********************************************************/
002A ; void DisInit(void)
002A ; {
002A .dbline 49
002A ; DDRB = 0xFF;
002A 8FEF ldi R24,255
002C 87BB out 0x17,R24
002E .dbline 51
002E ; //PORTB= ~DISCODE[0];
002E ; DDRC = 0x0F;
002E 8FE0 ldi R24,15
0030 84BB out 0x14,R24
0032 .dbline 52
0032 ; PORTC= 0x0F; /* 四个数码管都显示0;*/
0032 85BB out 0x15,R24
0034 .dbline -2
0034 L9:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbend
0036 .dbfunc e Check18B20 _Check18B20 fc
0036 ; signal -> R20
.even
0036 _Check18B20::
0036 00D0 rcall push_gset1
0038 .dbline -1
0038 .dbline 62
0038 ; }
0038 ; /***********************************************************
0038 ; * 函数名称:unsigned char Check18B20(void)
0038 ; * 功 能:检查18B20是否存在
0038 ; * 入口参数:无
0038 ; * 出口参数:检查存在是返回 1
0038 ; 不存在是返回 0
0038 ; **********************************************************/
0038 ; unsigned char Check18B20(void)
0038 ; {
0038 .dbline 65
0038 ; unsigned char signal;
0038 ;
0038 ; DDRD |= 0x08;
0038 8B9A sbi 0x11,3
003A .dbline 66
003A ; PORTD&= 0xF7; //PD3输出低电平 ,复位18B20
003A 82B3 in R24,0x12
003C 877F andi R24,247
003E 82BB out 0x12,R24
0040 .dbline 68
0040 ; //DelayUS(20); //延时500US
0040 ; delay(450);
0040 02EC ldi R16,450
0042 11E0 ldi R17,1
0044 00D0 rcall _delay
0046 .dbline 70
0046 ;
0046 ; PORTD|=0x08; //PD3输出高
0046 939A sbi 0x12,3
0048 .dbline 71
0048 ; asm("nop");
0048 0000 nop
004A .dbline 73
004A ;
004A ; DDRD &= 0xF7; //PD3输入
004A 81B3 in R24,0x11
004C 877F andi R24,247
004E 81BB out 0x11,R24
0050 .dbline 76
0050 ; //PORTD |= 0x08;
0050 ;
0050 ; delay(40);
0050 08E2 ldi R16,40
0052 10E0 ldi R17,0
0054 00D0 rcall _delay
0056 .dbline 79
0056 ; //asm("nop");
0056 ;
0056 ; signal = PIND; //读取PD3的值,也就是18B20输出的值
0056 40B3 in R20,0x10
0058 .dbline 81
0058 ;
0058 ; signal &= 0x08;
0058 4870 andi R20,8
005A .dbline 82
005A ; signal =(signal>>3);
005A 4695 lsr R20
005C 4695 lsr R20
005E 4695 lsr R20
0060 .dbline 84
0060 ;
0060 ; delay(200);
0060 08EC ldi R16,200
0062 10E0 ldi R17,0
0064 00D0 rcall _delay
0066 .dbline 85
0066 ; return signal;
0066 042F mov R16,R20
0068 .dbline -2
0068 L10:
0068 00D0 rcall pop_gset1
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r signal 20 c
006C .dbend
006C .dbfunc e Read18B20 _Read18B20 fc
006C ; data -> <dead>
006C ; byte -> R20,R21
006C ; i -> R22,R23
.even
006C _Read18B20::
006C 00D0 rcall push_gset2
006E .dbline -1
006E .dbline 94
006E ; }
006E ; /***********************************************************
006E ; * 函数名称:unsigned char Read18B20(void)
006E ; * 功 能:从18B20读一个字节的数据
006E ; * 入口参数:无
006E ; * 出口参数:读出的数据
006E ; ***********************************************************/
006E ; unsigned char Read18B20(void)
006E ; {
006E .dbline 97
006E ;
006E ;
006E ; unsigned int byte=0,i;
006E 4427 clr R20
0070 5527 clr R21
0072 .dbline 99
0072 ; unsigned char data;
0072 ; for(i=0;i<8;i++)
0072 6627 clr R22
0074 7727 clr R23
0076 16C0 rjmp L15
0078 L12:
0078 .dbline 100
0078 ; {
0078 .dbline 102
0078 ;
0078 ; DDRD |= 0x08;
0078 8B9A sbi 0x11,3
007A .dbline 103
007A ; PORTD&= 0xF7; //总线为低电平
007A 82B3 in R24,0x12
007C 877F andi R24,247
007E 82BB out 0x12,R24
0080 .dbline 104
0080 ; asm("nop");
0080 0000 nop
0082 .dbline 105
0082 ; asm("nop");
0082 0000 nop
0084 .dbline 106
0084 ; asm("nop");
0084 0000 nop
0086 .dbline 109
0086 ;
0086 ;
0086 ; DDRD &= 0xf7; //PD3端口输入
0086 81B3 in R24,0x11
0088 877F andi R24,247
008A 81BB out 0x11,R24
008C .dbline 111
008C ; //PORTD|= 0X08;
008C ; asm("nop");
008C 0000 nop
008E .dbline 112
008E ; asm("nop");
008E 0000 nop
0090 .dbline 114
0090 ;
0090 ; byte>>=1;
0090 5695 lsr R21
0092 4795 ror R20
0094 .dbline 116
0094 ;
0094 ; if((PIND & 0x08))
0094 839B sbis 0x10,3
0096 01C0 rjmp L16
0098 .dbline 117
0098 ; { byte |= 0x80; }
0098 .dbline 117
0098 4068 ori R20,128
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -