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

📄 1.lis

📁 在车头有4个光敏电阻做的寻找光源的小车程序 具有笔战功能 ICC-AVR ATmega16L 做的控制器 找到光源后停车
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 042A           ;           time -> R20,R21
                        .even
 042A           _delay_ms::
 042A 4A93              st -y,R20
 042C 5A93              st -y,R21
 042E A801              movw R20,R16
 0430                   .dbline -1
 0430                   .dbline 37
 0430           ;        }        
 0430           ;  
 0430           ; /*****************************************/
 0430           ; void delay_ms(uint time)
 0430           ;     {
 0430 05C0              xjmp L37
 0432           L36:
 0432                   .dbline 39
 0432           ;     while(time!=0)
 0432           ;                 {             
 0432                   .dbline 40
 0432           ;                  delay_us(1000);
 0432 08EE              ldi R16,1000
 0434 13E0              ldi R17,3
 0436 F1DF              xcall _delay_us
 0438                   .dbline 41
 0438           ;                  time--;
 0438 4150              subi R20,1
 043A 5040              sbci R21,0
 043C                   .dbline 42
 043C           ;                 }
 043C           L37:
 043C                   .dbline 38
 043C 4030              cpi R20,0
 043E 4507              cpc R20,R21
 0440 C1F7              brne L36
 0442           X6:
 0442                   .dbline -2
 0442           L35:
 0442                   .dbline 0 ; func end
 0442 5991              ld R21,y+
 0444 4991              ld R20,y+
 0446 0895              ret
 0448                   .dbsym r time 20 i
 0448                   .dbend
 0448                   .dbfunc e port_init _port_init fV
                        .even
 0448           _port_init::
 0448                   .dbline -1
 0448                   .dbline 50
 0448           ;     } 
 0448           ; 
 0448           ; 
 0448           ; 
 0448           ; 
 0448           ; //端口初始化
 0448           ; void port_init(void)
 0448           ; {
 0448                   .dbline 51
 0448           ;  PORTA = 0x00;
 0448 2224              clr R2
 044A 2BBA              out 0x1b,R2
 044C                   .dbline 52
 044C           ;  DDRA  = 0x00;
 044C 2ABA              out 0x1a,R2
 044E                   .dbline 53
 044E           ;  PORTB = 0x00;
 044E 28BA              out 0x18,R2
 0450                   .dbline 54
 0450           ;  DDRB  = 0x00;
 0450 27BA              out 0x17,R2
 0452                   .dbline 55
 0452           ;  PORTC = 0x0f; //m103 output only
 0452 8FE0              ldi R24,15
 0454 85BB              out 0x15,R24
 0456                   .dbline 56
 0456           ;  DDRC  = 0x0f;
 0456 84BB              out 0x14,R24
 0458                   .dbline 57
 0458           ;  PORTD = 0xff;
 0458 8FEF              ldi R24,255
 045A 82BB              out 0x12,R24
 045C                   .dbline 58
 045C           ;  DDRD  = 0x00;
 045C 21BA              out 0x11,R2
 045E                   .dbline -2
 045E           L39:
 045E                   .dbline 0 ; func end
 045E 0895              ret
 0460                   .dbend
 0460                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0460           _timer1_init::
 0460                   .dbline -1
 0460                   .dbline 64
 0460           ; }
 0460           ; 
 0460           ; 
 0460           ; //定时T1初始化
 0460           ; void timer1_init(void)
 0460           ; {
 0460                   .dbline 65
 0460           ;  TCCR1B = 0x00;//停止定时器
 0460 2224              clr R2
 0462 2EBC              out 0x2e,R2
 0464                   .dbline 66
 0464           ;  TIMSK |= 0x04;//中断允许
 0464 89B7              in R24,0x39
 0466 8460              ori R24,4
 0468 89BF              out 0x39,R24
 046A                   .dbline 67
 046A           ;  TCNT1H = 0xFC; //重装值高位
 046A 8CEF              ldi R24,252
 046C 8DBD              out 0x2d,R24
 046E                   .dbline 68
 046E           ;  TCNT1L = 0x2F; //重装值低位
 046E 8FE2              ldi R24,47
 0470 8CBD              out 0x2c,R24
 0472                   .dbline 70
 0472           ; 
 0472           ;  TCCR1A = 0x00;
 0472 2FBC              out 0x2f,R2
 0474                   .dbline 71
 0474           ;  TCCR1B = 0x05;//启动定时器
 0474 85E0              ldi R24,5
 0476 8EBD              out 0x2e,R24
 0478                   .dbline -2
 0478           L40:
 0478                   .dbline 0 ; func end
 0478 0895              ret
 047A                   .dbend
                        .area vector(rom, abs)
                        .org 32
 0020 0C943D02          jmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 047A                   .dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
 047A                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 047A           _timer1_ovf_isr::
 047A 0A92              st -y,R0
 047C 1A92              st -y,R1
 047E 2A92              st -y,R2
 0480 3A92              st -y,R3
 0482 4A92              st -y,R4
 0484 5A92              st -y,R5
 0486 6A92              st -y,R6
 0488 7A92              st -y,R7
 048A 8A92              st -y,R8
 048C 9A92              st -y,R9
 048E 0A93              st -y,R16
 0490 1A93              st -y,R17
 0492 2A93              st -y,R18
 0494 3A93              st -y,R19
 0496 8A93              st -y,R24
 0498 9A93              st -y,R25
 049A AA93              st -y,R26
 049C BA93              st -y,R27
 049E EA93              st -y,R30
 04A0 FA93              st -y,R31
 04A2 0FB6              in R0,0x3f
 04A4 0A92              st -y,R0
 04A6                   .dbline -1
 04A6                   .dbline 78
 04A6           ; }
 04A6           ; 
 04A6           ; 
 04A6           ; //定时器T1溢出中断服务程序
 04A6           ; #pragma interrupt_handler timer1_ovf_isr:9
 04A6           ; void timer1_ovf_isr(void)
 04A6           ; {
 04A6                   .dbline 79
 04A6           ; TCNT1H = 0xFC; //重装值高位
 04A6 8CEF              ldi R24,252
 04A8 8DBD              out 0x2d,R24
 04AA                   .dbline 80
 04AA           ;  TCNT1L = 0x2F; //重装值低位
 04AA 8FE2              ldi R24,47
 04AC 8CBD              out 0x2c,R24
 04AE                   .dbline 81
 04AE           ;  CLI();
 04AE F894              cli
 04B0                   .dbline 82
 04B0           ;                adc_rel=0;
 04B0 2224              clr R2
 04B2 3324              clr R3
 04B4 30921200          sts _adc_rel+1,R3
 04B8 20921100          sts _adc_rel,R2
 04BC                   .dbline 83
 04BC           ;                adc_old=0;
 04BC 30920D00          sts _adc_old+1,R3
 04C0 20920C00          sts _adc_old,R2
 04C4                   .dbline 84
 04C4           ;                 if(adc_mux<3)
 04C4 80911000          lds R24,_adc_mux
 04C8 8330              cpi R24,3
 04CA 20F4              brsh L42
 04CC           X7:
 04CC                   .dbline 85
 04CC           ;                           adc_mux++;//递增
 04CC 8F5F              subi R24,255    ; addi 1
 04CE 80931000          sts _adc_mux,R24
 04D2 03C0              xjmp L43
 04D4           L42:
 04D4                   .dbline 87
 04D4           ;                    else
 04D4           ;                           adc_mux=0;  
 04D4 2224              clr R2
 04D6 20921000          sts _adc_mux,R2
 04DA           L43:
 04DA                   .dbline 88
 04DA           ;               SEI();                  
 04DA 7894              sei
 04DC                   .dbline 89
 04DC           ; miao++;
 04DC 80910A00          lds R24,_miao
 04E0 8F5F              subi R24,255    ; addi 1
 04E2 80930A00          sts _miao,R24
 04E6                   .dbline 90
 04E6           ; if(miao==350)
 04E6 8E35              cpi R24,94
 04E8 19F4              brne L44
 04EA           X8:
 04EA                   .dbline 93
 04EA           ;  
 04EA           ;     //LCD_write_string(9,1,Format(miao,"00")); 
 04EA           ;       {stop();
 04EA                   .dbline 93
 04EA D0D0              xcall _stop
 04EC                   .dbline 94
 04EC           ;          TCCR1B = 0x00;//停止定时器
 04EC 2224              clr R2
 04EE 2EBC              out 0x2e,R2
 04F0                   .dbline 95
 04F0           ; } 
 04F0           L44:
 04F0                   .dbline -2
 04F0           L41:
 04F0                   .dbline 0 ; func end
 04F0 0990              ld R0,y+
 04F2 0FBE              out 0x3f,R0
 04F4 F991              ld R31,y+
 04F6 E991              ld R30,y+
 04F8 B991              ld R27,y+
 04FA A991              ld R26,y+
 04FC 9991              ld R25,y+
 04FE 8991              ld R24,y+
 0500 3991              ld R19,y+
 0502 2991              ld R18,y+
 0504 1991              ld R17,y+
 0506 0991              ld R16,y+
 0508 9990              ld R9,y+
 050A 8990              ld R8,y+
 050C 7990              ld R7,y+
 050E 6990              ld R6,y+
 0510 5990              ld R5,y+
 0512 4990              ld R4,y+
 0514 3990              ld R3,y+
 0516 2990              ld R2,y+
 0518 1990              ld R1,y+
 051A 0990              ld R0,y+
 051C 1895              reti
 051E                   .dbend
 051E                   .dbfunc e adc_init _adc_init fV
                        .even
 051E           _adc_init::
 051E                   .dbline -1
 051E                   .dbline 101
 051E           ; }
 051E           ; 
 051E           ; 
 051E           ; 
 051E           ; void adc_init(void)
 051E           ; {
 051E                   .dbline 103
 051E           ;  //adc转换初始化
 051E           ;  ADCSRA       = 0x00; //禁止AD转换
 051E 2224              clr R2
 0520 26B8              out 0x6,R2
 0522                   .dbline 105
 0522           ;  //ADMUX      = 0xC1; //通道1    1100 0001
 0522           ;  ADMUX =(1<<REFS1)|(1<<REFS0)|(adc_mux&0x1f);//选择内部AVCC为基准
 0522 80911000          lds R24,_adc_mux
 0526 8F71              andi R24,31
 0528 806C              ori R24,192
 052A 87B9              out 0x7,R24
 052C                   .dbline 106
 052C           ;  SFIOR |= 0x00;
 052C 20B6              in R2,0x30
 052E 20BE              out 0x30,R2
 0530                   .dbline 107
 0530           ;  ACSR = 0x80; //禁止模拟比较器
 0530 80E8              ldi R24,128
 0532 88B9              out 0x8,R24
 0534                   .dbline 108
 0534           ;  ADCSRA       |= 0xEE;  //1110 1110
 0534 86B1              in R24,0x6
 0536 8E6E              ori R24,238
 0538 86B9              out 0x6,R24
 053A                   .dbline 109
 053A           ;   ADCSRA|=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
 053A 86B1              in R24,0x6
 053C 8E6E              ori R24,238
 053E 86B9              out 0x6,R24
 0540                   .dbline -2
 0540           L46:
 0540                   .dbline 0 ; func end
 0540 0895              ret
 0542                   .dbend
 0542                   .dbfunc e ADCtoBCD _ADCtoBCD fV
 0542           ;              i -> <dead>
 0542           ;           temp -> R10,R11
                        .even
 0542           _ADCtoBCD::
 0542 0E940000          xcall push_xgsetF03C
 0546 5801              movw R10,R16
 0548 2297              sbiw R28,2
 054A                   .dbline -1
 054A                   .dbline 115
 054A           ; }
 054A           ; 
 054A           ; 
 054A           ; //ADC结果转换成电压值
 054A           ; void ADCtoBCD(unsigned int temp)
 054A           ;  {
 054A                   .dbline 118
 054A           ;   unsigned char i;
 054A           ;    
 054A           ;   temp=(unsigned int)(((unsigned long)((unsigned long)temp*Vref))/0x3ff);
 054A 1501              movw R2,R10
 054C 4424              clr R4
 054E 5524              clr R5
 0550 40E0              ldi R20,0
 0552 5AE0              ldi R21,10
 0554 60E0              ldi R22,0
 0556 70E0              ldi R23,0
 0558 5A92              st -y,R5
 055A 4A92              st -y,R4
 055C 3A92              st -y,R3
 055E 2A92              st -y,R2
 0560 8A01              movw R16,R20
 0562 9B01              movw R18,R22
 0564 0E940000          xcall empy32u
 0568 4FEF              ldi R20,255
 056A 53E0              ldi R21,3
 056C 60E0              ldi R22,0
 056E 70E0              ldi R23,0

⌨️ 快捷键说明

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