⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 ds18b20在数码管上显示温度,在avr128已编译通过
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0172           ;          temp=wb>>i;
 0172 0A2D              mov R16,R10
 0174 142F              mov R17,R20
 0176 0E940000          xcall lsr8
 017A 602F              mov R22,R16
 017C                   .dbline 96
 017C           ;          temp&=0x01;
 017C 6170              andi R22,1
 017E                   .dbline 97
 017E           ;          if(temp)
 017E 11F0              breq L54
 0180           X12:
 0180                   .dbline 98
 0180           ;                 SET_DS18B20;           //释放总线
 0180 1A9A              sbi 0x3,2
 0182 01C0              xjmp L55
 0184           L54:
 0184                   .dbline 100
 0184           ;          else
 0184           ;                 CLR_DS18B20;           //强制拉低
 0184 1A98              cbi 0x3,2
 0186           L55:
 0186                   .dbline 101
 0186           ;          Delay_Us(50);                 //30.38us
 0186 02E3              ldi R16,50
 0188 10E0              ldi R17,0
 018A 3DDF              xcall _Delay_Us
 018C                   .dbline 103
 018C           ;          //RLS_DS18B20;                //释放总线
 018C           ;          SET_DS18B20;          //释放总线
 018C 1A9A              sbi 0x3,2
 018E                   .dbline 104
 018E           ;          Delay_Us(4);  //2.71us(大于1us就行了)
 018E 04E0              ldi R16,4
 0190 10E0              ldi R17,0
 0192 39DF              xcall _Delay_Us
 0194                   .dbline 106
 0194           ; 
 0194           ;    }
 0194           L51:
 0194                   .dbline 88
 0194 4395              inc R20
 0196           L53:
 0196                   .dbline 88
 0196 4830              cpi R20,8
 0198 38F3              brlo L50
 019A           X13:
 019A                   .dbline -2
 019A           L49:
 019A                   .dbline 0 ; func end
 019A 0C940000          xjmp pop_xgsetF00C
 019E                   .dbsym r temp 22 c
 019E                   .dbsym r i 20 c
 019E                   .dbsym r wb 10 c
 019E                   .dbend
 019E                   .dbfunc e readTempDS18B20 _readTempDS18B20 fi
 019E           ;              x -> R10,R11
 019E           ;          tempH -> R12
 019E           ;          tempL -> R10
                        .even
 019E           _readTempDS18B20::
 019E 0E940000          xcall push_xgset003C
 01A2                   .dbline -1
 01A2                   .dbline 114
 01A2           ; }
 01A2           ; 
 01A2           ; /**********************************************************************
 01A2           ; functionName: unsigned int readTempDS18B20(void)
 01A2           ; description :读DS18B20温度
 01A2           ; **********************************************************************/
 01A2           ; unsigned int readTempDS18B20(void)
 01A2           ; {
 01A2                   .dbline 120
 01A2           ;       unsigned char tempL,tempH;
 01A2           ;       unsigned int x;
 01A2           ;       //resetDS18B20();
 01A2           ;       //writeByteDS18B20(0xcc);        //跳过ROM
 01A2           ;       //writeByteDS18B20(0x44);        //启动温度转换
 01A2           ;       Delay_Ms(1);               //等待1ms
 01A2 01E0              ldi R16,1
 01A4 10E0              ldi R17,0
 01A6 48DF              xcall _Delay_Ms
 01A8                   .dbline 121
 01A8           ;       resetDS18B20();
 01A8 91DF              xcall _resetDS18B20
 01AA                   .dbline 122
 01AA           ;       writeByteDS18B20(0xcc);  //跳过ROM
 01AA 0CEC              ldi R16,204
 01AC D7DF              xcall _writeByteDS18B20
 01AE                   .dbline 123
 01AE           ;       writeByteDS18B20(0xbe);  //读数据
 01AE 0EEB              ldi R16,190
 01B0 D5DF              xcall _writeByteDS18B20
 01B2                   .dbline 124
 01B2           ;       tempL=readByteDS18B20();
 01B2 B3DF              xcall _readByteDS18B20
 01B4 A02E              mov R10,R16
 01B6                   .dbline 125
 01B6           ;       tempH=readByteDS18B20();
 01B6 B1DF              xcall _readByteDS18B20
 01B8 C02E              mov R12,R16
 01BA                   .dbline 126
 01BA           ;       x=(tempH<<8)|tempL;
 01BA BC2C              mov R11,R12
 01BC                   .dbline 127
 01BC           ;       resetDS18B20();
 01BC 87DF              xcall _resetDS18B20
 01BE                   .dbline 128
 01BE           ;       writeByteDS18B20(0xcc);  //跳过ROM
 01BE 0CEC              ldi R16,204
 01C0 CDDF              xcall _writeByteDS18B20
 01C2                   .dbline 129
 01C2           ;       writeByteDS18B20(0x44);  //启动温度转换
 01C2 04E4              ldi R16,68
 01C4 CBDF              xcall _writeByteDS18B20
 01C6                   .dbline 130
 01C6           ;       return(x);
 01C6 8501              movw R16,R10
 01C8                   .dbline -2
 01C8           L56:
 01C8                   .dbline 0 ; func end
 01C8 0C940000          xjmp pop_xgset003C
 01CC                   .dbsym r x 10 i
 01CC                   .dbsym r tempH 12 c
 01CC                   .dbsym r tempL 10 c
 01CC                   .dbend
 01CC                   .dbfile H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\MAIN.C
 01CC                   .dbfunc e timer0_init _timer0_init fV
                        .even
 01CC           _timer0_init::
 01CC                   .dbline -1
 01CC                   .dbline 20
 01CC           ; // Target : M128
 01CC           ; // Crystal: 8.0000Mhz
 01CC           ; 
 01CC           ; #include <iom128v.h>
 01CC           ; #include <macros.h> 
 01CC           ; #include "define.h"
 01CC           ; #include "delay.h"
 01CC           ; #include "initrialm128.h"
 01CC           ; #include "ds18b20.h"
 01CC           ; 
 01CC           ; //#include 
 01CC           ; void Coding_led(void);//8位数码管译码程序
 01CC           ; 
 01CC           ; 
 01CC           ; //TIMER0 initialize - prescale:1024
 01CC           ; // WGM: Normal
 01CC           ; // desired value: 3mSec
 01CC           ; // actual value: 2.976mSec (0.2%)
 01CC           ; void timer0_init(void)
 01CC           ; {
 01CC                   .dbline 21
 01CC           ;       TCCR0 = 0x00; //stop
 01CC 2224              clr R2
 01CE 23BE              out 0x33,R2
 01D0                   .dbline 22
 01D0           ;       ASSR  = 0x00; //set async mode
 01D0 20BE              out 0x30,R2
 01D2                   .dbline 23
 01D2           ;       TCNT0 = 0xA3; //set count
 01D2 83EA              ldi R24,163
 01D4 82BF              out 0x32,R24
 01D6                   .dbline 24
 01D6           ;       OCR0  = 0x1F;
 01D6 8FE1              ldi R24,31
 01D8 81BF              out 0x31,R24
 01DA                   .dbline 25
 01DA           ;       TCCR0 = 0x06; //start timer
 01DA 86E0              ldi R24,6
 01DC 83BF              out 0x33,R24
 01DE                   .dbline 26
 01DE           ;       TIMSK |= 0x01; //timer interrupt sources
 01DE 87B7              in R24,0x37
 01E0 8160              ori R24,1
 01E2 87BF              out 0x37,R24
 01E4                   .dbline -2
 01E4           L57:
 01E4                   .dbline 0 ; func end
 01E4 0895              ret
 01E6                   .dbend
                        .area vector(rom, abs)
                        .org 64
 0040 0C94F300          jmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 01E6                   .dbfile H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\MAIN.C
 01E6                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 01E6           _timer0_ovf_isr::
 01E6 2A92              st -y,R2
 01E8 3A92              st -y,R3
 01EA 0A93              st -y,R16
 01EC 1A93              st -y,R17
 01EE 8A93              st -y,R24
 01F0 9A93              st -y,R25
 01F2 EA93              st -y,R30
 01F4 FA93              st -y,R31
 01F6 2FB6              in R2,0x3f
 01F8 2A92              st -y,R2
 01FA                   .dbline -1
 01FA                   .dbline 31
 01FA           ; }
 01FA           ; 
 01FA           ; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
 01FA           ; void timer0_ovf_isr(void)
 01FA           ; {     
 01FA                   .dbline 32
 01FA           ;       TCNT0 = 0xA3; //reload counter value
 01FA 83EA              ldi R24,163
 01FC 82BF              out 0x32,R24
 01FE                   .dbline 33
 01FE           ;       if(sbit_led == 8)
 01FE 80911500          lds R24,_sbit_led
 0202 8830              cpi R24,8
 0204 19F4              brne L59
 0206           X14:
 0206                   .dbline 34
 0206           ;       {
 0206                   .dbline 35
 0206           ;               sbit_led = 0;
 0206 2224              clr R2
 0208 20921500          sts _sbit_led,R2
 020C                   .dbline 36
 020C           ;       }
 020C           L59:
 020C                   .dbline 37
 020C           ;       SMG_PORT = 0XFF;
 020C 8FEF              ldi R24,255
 020E 8BBB              out 0x1b,R24
 0210                   .dbline 38
 0210           ;       SMG_BIT_PORT = 0xff;
 0210 85BB              out 0x15,R24
 0212                   .dbline 39
 0212           ;       SMG_BIT_PORT &=~ BIT(sbit_led);
 0212 10911500          lds R17,_sbit_led
 0216 01E0              ldi R16,1
 0218 0E940000          xcall lsl8
 021C 202E              mov R2,R16
 021E 2094              com R2
 0220 35B2              in R3,0x15
 0222 3220              and R3,R2
 0224 35BA              out 0x15,R3
 0226                   .dbline 40
 0226           ;       SMG_PORT = led_disbuf[sbit_led];
 0226 80E0              ldi R24,<_led_disbuf
 0228 90E0              ldi R25,>_led_disbuf
 022A E0911500          lds R30,_sbit_led
 022E FF27              clr R31
 0230 E80F              add R30,R24
 0232 F91F              adc R31,R25
 0234 2080              ldd R2,z+0
 0236 2BBA              out 0x1b,R2
 0238                   .dbline 41
 0238           ;       sbit_led ++;
 0238 80911500          lds R24,_sbit_led
 023C 8F5F              subi R24,255    ; addi 1
 023E 80931500          sts _sbit_led,R24
 0242                   .dbline -2
 0242           L58:
 0242                   .dbline 0 ; func end
 0242 2990              ld R2,y+
 0244 2FBE              out 0x3f,R2
 0246 F991              ld R31,y+
 0248 E991              ld R30,y+
 024A 9991              ld R25,y+
 024C 8991              ld R24,y+
 024E 1991              ld R17,y+
 0250 0991              ld R16,y+
 0252 3990              ld R3,y+
 0254 2990              ld R2,y+
 0256 1895              reti
 0258                   .dbend
 0258                   .dbfunc e main _main fV
 0258           ;              n -> <dead>
                        .even
 0258           _main::
 0258                   .dbline -1
 0258                   .dbline 46
 0258           ; }
 0258           ; 
 0258           ; 
 0258           ; void main(void)
 0258           ; {
 0258                   .dbline 48
 0258           ;       unsigned char n;
 0258           ;       Init_Devices();
 0258 21DF              xcall _Init_Devices
 025A                   .dbline 49
 025A           ;       timer0_init();
 025A B8DF              xcall _timer0_init
 025C                   .dbline 50
 025C           ;       BELL_OFF();
 025C 1C9A              sbi 0x3,4
 025E 3FC1              xjmp L63
 0260           L62:
 0260                   .dbline 53
 0260           ;       
 0260           ;       while(1)
 0260           ;       {
 0260                   .dbline 54
 0260           ;               temperture = readTempDS18B20();
 0260 9EDF              xcall _readTempDS18B20
 0262 0E940000          xcall uint2fp
 0266 10930100          sts _temperture+1,R17
 026A 00930000          sts _temperture,R16
 026E 30930300          sts _temperture+2+1,R19
 0272 20930200          sts _temperture+2,R18
 0276                   .dbline 55
 0276           ;               temperture = temperture * 0.0625*10;
 0276 00E0              ldi R16,<L65
 0278 10E0              ldi R17,>L65
 027A 0E940000          xcall elpm32
 027E 1801              movw R2,R16
 0280 2901              movw R4,R18
 0282 00E0              ldi R16,<L66
 0284 10E0              ldi R17,>L66
 0286 0E940000          xcall elpm32
 028A 80E0              ldi R24,<_temperture
 028C 90E0              ldi R25,>_temperture
 028E 9A93              st -y,R25
 0290 8A93              st -y,R24
 0292 0E940000          xcall fpmule1x
 0296 8101              movw R16,R2
 0298 9201              movw R18,R4
 029A 0E940000          xcall fpmule2
 029E 10930100          sts _temperture+1,R17
 02A2 00930000          sts _temperture,R16
 02A6 30930300          sts _temperture+2+1,R19
 02AA 20930200          sts _temperture+2,R18
 02AE                   .dbline 56
 02AE           ;               if(temperture < 1000)//ds18b20由于进中断后干扰时序,最好加上校验数据
 02AE 1801              movw R2,R16
 02B0 2901              movw R4,R18
 02B2 00E0              ldi R16,<L69
 02B4 10E0              ldi R17,>L69
 02B6 0E940000          xcall elpm32
 02BA 3A93              st -y,R19
 02BC 2A93              st -y,R18
 02BE 1A93              st -y,R17
 02C0 0A93              st -y,R16
 02C2 8101              movw R16,R2
 02C4 9201              movw R18,R4
 02C6 0E940000          xcall fpcmp2
 02CA 0CF0              brlt X24
 02CC D7C0              xjmp L67
 02CE           X24:
 02CE           X15:
 02CE                   .dbline 57
 02CE           ;               {
 02CE                   .dbline 58
 02CE           ;                       led_buf[0] = (int)temperture/10000000%10;
 02CE 40E8              ldi R20,128
 02D0 56E9              ldi R21,150
 02D2 68E9              ldi R22,152
 02D4 70E0              ldi R23,0
 02D6 20910200          lds R18,_temperture+2
 02DA 30910300          lds R19,_temperture+2+1
 02DE 00910000          lds R16,_temperture
 02E2 10910100          lds R17,_temperture+1
 02E6 0E940000          xcall fpint
 02EA 2227              clr R18
 02EC 17FD              sbrc R17,7
 02EE 2095              com R18
 02F0 3327              clr R19
 02F2 27FD              sbrc R18,7
 02F4 3095              com R19
 02F6 7A93              st -y,R23
 02F8 6A93              st -y,R22
 02FA 5A93              st -y,R21
 02FC 4A93              st -y,R20
 02FE 0E940000          xcall div32s
 0302 4AE0              ldi R20,10
 0304 50E0              ldi R21,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -