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

📄 dtm48-td.lis

📁 M48做的航模用直流电机调速器
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module dtm48-td.C
                        .area data(ram, con, rel)
 0000           _mark::
 0000                   .blkb 2
                        .area idata
 0000 DC05              .word 1500
                        .area data(ram, con, rel)
 0002                   .dbfile H:\ele\AVR\ICC\diantiao\dtm48-td\dtm48-td.C
 0002                   .dbsym e mark _mark I
                        .area text(rom, con, rel)
 0000                   .dbfile H:\ele\AVR\ICC\diantiao\dtm48-td\dtm48-td.C
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 32
 0000           ; /******************************************/
 0000           ; /*         燕山大学无线电爱好者协会       */
 0000           ; /*                电子调速器              */
 0000           ; /*     作者:张翃鹏     2005-2-27 9:04:40  */
 0000           ; /*     目标MCU:MEGA8    晶振:INT RC 8MHZ  */
 0000           ; /******************************************/
 0000           ; 
 0000           ; #include <iom48v.h>
 0000           ; #include <macros.h>
 0000           ; #include <eeprom.h>
 0000           ; #define uchar unsigned char
 0000           ; #define unit unsigned int
 0000           ; #define ulong unsigned long
 0000           ; #define xtal 8 
 0000           ; #define j11 PORTD|=0x02
 0000           ; #define j10 PORTD&=~0x02
 0000           ; #define j21 PORTD|=0x10
 0000           ; #define j20 PORTD&=~0x10
 0000           ; #define j31 PORTB|=0x40
 0000           ; #define j30 PORTB&=~0x40
 0000           ; #define j41 PORTD|=0x40
 0000           ; #define j40 PORTD&=~0x40
 0000           ; #define LED1 PORTB|=0x08;
 0000           ; #define LED0 PORTB&=~0x08;
 0000           ; 
 0000           ; 
 0000           ; int mark=1500;
 0000           ; unit ai,aa;
 0000           ; uchar i,j,az,flag,flagh,zb,mid,pwm;
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 33
 0000           ;  PORTB = 0x23;
 0000 83E2              ldi R24,35
 0002 85B9              out 0x5,R24
 0004                   .dbline 34
 0004           ;  DDRB  = 0x58;
 0004 88E5              ldi R24,88
 0006 84B9              out 0x4,R24
 0008                   .dbline 35
 0008           ;  PORTC = 0x04; //m103 output only
 0008 84E0              ldi R24,4
 000A 88B9              out 0x8,R24
 000C                   .dbline 36
 000C           ;  DDRC  = 0x38;
 000C 88E3              ldi R24,56
 000E 87B9              out 0x7,R24
 0010                   .dbline 37
 0010           ;  PORTD = 0x00;
 0010 2224              clr R2
 0012 2BB8              out 0xb,R2
 0014                   .dbline 38
 0014           ;  DDRD  = 0x52;
 0014 82E5              ldi R24,82
 0016 8AB9              out 0xa,R24
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e timer1_init _timer1_init fV
                        .even
 001A           _timer1_init::
 001A                   .dbline -1
 001A                   .dbline 42
 001A           ; }
 001A           ; 
 001A           ; void timer1_init(void)
 001A           ; {
 001A                   .dbline 43
 001A           ;  TCCR1B = 0x00; //stop
 001A 2224              clr R2
 001C 20928100          sts 129,R2
 0020                   .dbline 44
 0020           ;  TCNT1H = 0x00 /*INVALID SETTING*/; //setup
 0020 20928500          sts 133,R2
 0024                   .dbline 45
 0024           ;  TCNT1L = 0x00 /*INVALID SETTING*/;
 0024 20928400          sts 132,R2
 0028                   .dbline 46
 0028           ;  OCR1AH = 0x00 /*INVALID SETTING*/;
 0028 20928900          sts 137,R2
 002C                   .dbline 47
 002C           ;  OCR1AL = 0x00 /*INVALID SETTING*/;
 002C 20928800          sts 136,R2
 0030                   .dbline 48
 0030           ;  OCR1BH = 0x00 /*INVALID SETTING*/;
 0030 20928B00          sts 139,R2
 0034                   .dbline 49
 0034           ;  OCR1BL = 0x00 /*INVALID SETTING*/;
 0034 20928A00          sts 138,R2
 0038                   .dbline 50
 0038           ;  ICR1H  = 0x00 /*INVALID SETTING*/;
 0038 20928700          sts 135,R2
 003C                   .dbline 51
 003C           ;  ICR1L  = 0x00 /*INVALID SETTING*/;
 003C 20928600          sts 134,R2
 0040                   .dbline 52
 0040           ;  TCCR1A = 0x00;
 0040 20928000          sts 128,R2
 0044                   .dbline 53
 0044           ;  TCCR1B = 0x02; //start Timer
 0044 82E0              ldi R24,2
 0046 80938100          sts 129,R24
 004A                   .dbline -2
 004A           L2:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbend
 004C                   .dbfunc e timer2_init _timer2_init fV
                        .even
 004C           _timer2_init::
 004C                   .dbline -1
 004C                   .dbline 61
 004C           ; }
 004C           ; 
 004C           ; //TIMER2 initialize - prescale:8
 004C           ; // WGM: Normal
 004C           ; // desired value: 255uSec
 004C           ; // actual value: 255.000uSec (0.0%)
 004C           ; void timer2_init(void)
 004C           ; {
 004C                   .dbline 62
 004C           ;  TCCR2B = 0x00; //stop
 004C 2224              clr R2
 004E 2092B100          sts 177,R2
 0052                   .dbline 63
 0052           ;  ASSR  = 0x00; //set async mode
 0052 2092B600          sts 182,R2
 0056                   .dbline 64
 0056           ;  TCNT2 = 0x01; //setup
 0056 81E0              ldi R24,1
 0058 8093B200          sts 178,R24
 005C                   .dbline 65
 005C           ;  OCR2A = 0;
 005C 2092B300          sts 179,R2
 0060                   .dbline 66
 0060           ;  OCR2B = 0x00;
 0060 2092B400          sts 180,R2
 0064                   .dbline 67
 0064           ;  TCCR2A = 0x00; 
 0064 2092B000          sts 176,R2
 0068                   .dbline 68
 0068           ;  TCCR2B = 0x02; //start
 0068 82E0              ldi R24,2
 006A 8093B100          sts 177,R24
 006E                   .dbline -2
 006E           L3:
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbend
 0070                   .dbfunc e watchdog_init _watchdog_init fV
                        .even
 0070           _watchdog_init::
 0070                   .dbline -1
 0070                   .dbline 71
 0070           ; }
 0070           ; void watchdog_init(void)
 0070           ; {
 0070                   .dbline 72
 0070           ;  WDR(); //this prevents a timout on enabling
 0070 A895              wdr
 0072                   .dbline 73
 0072           ;  WDTCSR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
 0072 88E0              ldi R24,8
 0074 80936000          sts 96,R24
 0078                   .dbline -2
 0078           L4:
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbend
 007A                   .dbfunc e init_devices _init_devices fV
                        .even
 007A           _init_devices::
 007A                   .dbline -1
 007A                   .dbline 79
 007A           ; }
 007A           ; 
 007A           ; 
 007A           ; //call this routine to initialize all peripherals
 007A           ; void init_devices(void)
 007A           ; {
 007A                   .dbline 81
 007A           ;  //stop errant interrupts until set up
 007A           ;  CLI(); //disable all interrupts
 007A F894              cli
 007C                   .dbline 82
 007C           ;  port_init();
 007C C1DF              rcall _port_init
 007E                   .dbline 83
 007E           ;  timer1_init();
 007E CDDF              rcall _timer1_init
 0080                   .dbline 84
 0080           ;  timer2_init();
 0080 E5DF              rcall _timer2_init
 0082                   .dbline 85
 0082           ;  watchdog_init();
 0082 F6DF              rcall _watchdog_init
 0084                   .dbline 87
 0084           ; 
 0084           ;  MCUCR = 0x00;
 0084 2224              clr R2
 0086 25BE              out 0x35,R2
 0088                   .dbline 88
 0088           ;  EICRA = 0x00; //extended ext ints
 0088 20926900          sts 105,R2
 008C                   .dbline 89
 008C           ;  EIMSK = 0x00;
 008C 2DBA              out 0x1d,R2
 008E                   .dbline 91
 008E           ;  
 008E           ;  TIMSK0 = 0x00; //timer 0 interrupt sources
 008E 20926E00          sts 110,R2
 0092                   .dbline 92
 0092           ;  TIMSK1 = 0x00; //timer 1 interrupt sources
 0092 20926F00          sts 111,R2
 0096                   .dbline 93
 0096           ;  TIMSK2 = 0x03; //timer 2 interrupt sources 
 0096 83E0              ldi R24,3
 0098 80937000          sts 112,R24
 009C                   .dbline 95
 009C           ; 
 009C           ;  PCMSK0 = 0x00; //pin change mask 0 
 009C 20926B00          sts 107,R2
 00A0                   .dbline 96
 00A0           ;  PCMSK1 = 0x00; //pin change mask 1 
 00A0 20926C00          sts 108,R2
 00A4                   .dbline 97
 00A4           ;  PCMSK2 = 0x00; //pin change mask 2
 00A4 20926D00          sts 109,R2
 00A8                   .dbline 98
 00A8           ;  PCICR = 0x00; //pin change enable 
 00A8 20926800          sts 104,R2
 00AC                   .dbline 99
 00AC           ;  PRR = 0x00; //power controller
 00AC 20926400          sts 100,R2
 00B0                   .dbline 100
 00B0           ;  SEI(); //re-enable interrupts
 00B0 7894              sei
 00B2                   .dbline -2
 00B2           L5:
 00B2                   .dbline 0 ; func end
 00B2 0895              ret
 00B4                   .dbend
 00B4                   .dbfunc e del _del fV
 00B4           ;           time -> R16,R17
                        .even
 00B4           _del::
 00B4                   .dbline -1
 00B4                   .dbline 107
 00B4           ;  //all peripherals are now initialized
 00B4           ; }
 00B4           ; 
 00B4           ; 
 00B4           ; /*            微秒级延时程序  */      
 00B4           ; void del(int time)
 00B4           ;        {     
 00B4           L7:
 00B4                   .dbline 109
 00B4           ;         do
 00B4           ;               {
 00B4                   .dbline 110
 00B4           ;                time--;
 00B4 0150              subi R16,1
 00B6 1040              sbci R17,0
 00B8                   .dbline 111
 00B8           ;               }       
 00B8           L8:
 00B8                   .dbline 112
 00B8           ;         while (time>1);
 00B8 81E0              ldi R24,1
 00BA 90E0              ldi R25,0
 00BC 8017              cp R24,R16
 00BE 9107              cpc R25,R17
 00C0 CCF3              brlt L7
 00C2                   .dbline -2
 00C2           L6:
 00C2                   .dbline 0 ; func end
 00C2 0895              ret
 00C4                   .dbsym r time 16 I
 00C4                   .dbend
 00C4                   .dbfunc e delay_1ms _delay_1ms fV
 00C4           ;             i1 -> R16,R17
                        .even
 00C4           _delay_1ms::
 00C4                   .dbline -1
 00C4                   .dbline 117
 00C4           ;        }
 00C4           ;        
 00C4           ; /*       毫秒级延时程序       */       
 00C4           ; void delay_1ms(void)
 00C4           ; { unsigned int i1;
 00C4                   .dbline 118
 00C4           ;  for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
 00C4 01E0              ldi R16,1
 00C6 10E0              ldi R17,0
 00C8 02C0              rjmp L14
 00CA           L11:
 00CA                   .dbline 119
 00CA           L12:
 00CA                   .dbline 118

⌨️ 快捷键说明

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