📄 init.lis
字号:
.module init.c
.area data(ram, con, rel)
0000 _ptr::
0000 .blkb 2
.area idata
0000 0000 .byte 0,0
.area data(ram, con, rel)
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile E:\abol\file\EMD\programme\init.c
0003 .dbsym e ptr _ptr A[3:3]c
.area text(rom, con, rel)
0000 .dbfile E:\abol\file\EMD\programme\init.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 22
0000 ; /********************************************************/
0000 ; /* ABOL */
0000 ; /* 868MHZ数码管显示接收器 */
0000 ; /* 作者:于朝晖 2008-5-24 9:30:00 */
0000 ; /* 目标MCU:MEGA16 晶振:INT RC 8MHZ */
0000 ; /* 文件名称:init.c 负责初始化MCU各内部资源及外部端口 */
0000 ; /* 编译:ICC-AVR application builder */
0000 ; /* 当前版本: 1.0 */
0000 ; /* 修改日期: 2008.5.24 */
0000 ; /********************************************************/
0000 ;
0000 ; #include <iom88v.h>
0000 ; #include <macros.h>
0000 ; #include "eeprom.h"
0000 ; #include "delay.h"
0000 ; #include "init.h"
0000 ; #define bitset(var, bitno) ((var) |= (1 << (bitno)))
0000 ; #define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
0000 ; unsigned char ptr[3]={0,0,0};
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 23
0000 ; PORTB = 0xff; //00010000 ff
0000 8FEF ldi R24,255
0002 85B9 out 0x5,R24
0004 .dbline 24
0004 ; DDRB = 0xff; //11111111 ff
0004 84B9 out 0x4,R24
0006 .dbline 25
0006 ; PORTC = 0x0c; //00001100 0c
0006 8CE0 ldi R24,12
0008 88B9 out 0x8,R24
000A .dbline 26
000A ; DDRC = 0xf7; //11111011 f7
000A 87EF ldi R24,247
000C 87B9 out 0x7,R24
000E .dbline 27
000E ; PORTD = 0xee; //11101111 e7
000E 8EEE ldi R24,238
0010 8BB9 out 0xb,R24
0012 .dbline 28
0012 ; DDRD = 0x11; //00010001 19
0012 81E1 ldi R24,17
0014 8AB9 out 0xa,R24
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e timer0_init _timer0_init fV
.even
0018 _timer0_init::
0018 .dbline -1
0018 .dbline 32
0018 ; }
0018 ;
0018 ; void timer0_init(void)
0018 ; {
0018 .dbline 33
0018 ; TCNT0 =196; // T/C0开始值
0018 84EC ldi R24,196
001A 86BD out 0x26,R24
001C .dbline 34
001C ; TCCR0B=0x02; // 预分频 ck/8 ,计数允许
001C 82E0 ldi R24,2
001E 85BD out 0x25,R24
0020 .dbline 35
0020 ; TIFR0=0;
0020 2224 clr R2
0022 25BA out 0x15,R2
0024 .dbline 36
0024 ; TIMSK0=1;
0024 81E0 ldi R24,1
0026 80936E00 sts 110,R24
002A .dbline 37
002A ; TIFR0=1;
002A 85BB out 0x15,R24
002C .dbline -2
002C L2:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbend
002E .dbfunc e timer2_init _timer2_init fV
.even
002E _timer2_init::
002E .dbline -1
002E .dbline 41
002E ; }
002E ;
002E ; void timer2_init(void)
002E ; {
002E .dbline 42
002E ; TIMSK2=0;
002E 2224 clr R2
0030 20927000 sts 112,R2
0034 .dbline 43
0034 ; ASSR=32; //外部时钟输入使能
0034 80E2 ldi R24,32
0036 8093B600 sts 182,R24
003A .dbline 44
003A ; TCCR2A=0; //普通模式
003A 2092B000 sts 176,R2
003E .dbline 45
003E ; TCCR2B=3; //32分频
003E 83E0 ldi R24,3
0040 8093B100 sts 177,R24
0044 .dbline 46
0044 ; TCNT2=0; // T/C2开始值
0044 2092B200 sts 178,R2
0048 .dbline 47
0048 ; NOP();
0048 0000 nop
004A .dbline 49
004A ;
004A ; NOP();
004A 0000 nop
004C .dbline 50
004C ; NOP();
004C 0000 nop
004E .dbline 51
004E ; NOP();
004E 0000 nop
0050 .dbline 52
0050 ; TIFR2=0; //清标致位
0050 27BA out 0x17,R2
0052 .dbline 53
0052 ; TIMSK2=0; // 预分频 32768/32 ,计数允许
0052 20927000 sts 112,R2
0056 .dbline 54
0056 ; TIFR2=1;
0056 81E0 ldi R24,1
0058 87BB out 0x17,R24
005A .dbline -2
005A L3:
005A .dbline 0 ; func end
005A 0895 ret
005C .dbend
005C .dbfunc e watchdog_init _watchdog_init fV
.even
005C _watchdog_init::
005C .dbline -1
005C .dbline 58
005C ; }
005C ;
005C ; void watchdog_init(void)
005C ; {
005C .dbline 59
005C ; WDR(); //this prevents a timout on enabling
005C A895 wdr
005E .dbline 60
005E ; WDTCSR=(1<<WDCE)|(1<<WDE);
005E 88E1 ldi R24,24
0060 80936000 sts 96,R24
0064 .dbline 61
0064 ; WDTCSR=(0<<WDE);
0064 2224 clr R2
0066 20926000 sts 96,R2
006A .dbline -2
006A L4:
006A .dbline 0 ; func end
006A 0895 ret
006C .dbend
006C .dbfunc e init_devices _init_devices fV
.even
006C _init_devices::
006C .dbline -1
006C .dbline 67
006C ; }
006C ;
006C ;
006C ; //call this routine to initialize all peripherals
006C ; void init_devices(void)
006C ; {
006C .dbline 69
006C ; //stop errant interrupts until set up
006C ; CLI(); //disable all interrupts
006C F894 cli
006E .dbline 70
006E ; port_init();
006E C8DF rcall _port_init
0070 .dbline 71
0070 ; timer0_init();
0070 D3DF rcall _timer0_init
0072 .dbline 72
0072 ; timer2_init();
0072 DDDF rcall _timer2_init
0074 .dbline 75
0074 ; //watchdog_init();
0074 ;
0074 ; MCUCR = 0x00;
0074 2224 clr R2
0076 25BE out 0x35,R2
0078 .dbline 76
0078 ; EIMSK = 0x00;
0078 2DBA out 0x1d,R2
007A .dbline 77
007A ; EICRA = 0x00; //extended ext ints
007A 20926900 sts 105,R2
007E .dbline 79
007E ;
007E ; TIMSK0 = 0x01; //timer 0 interrupt sources
007E 81E0 ldi R24,1
0080 80936E00 sts 110,R24
0084 .dbline 80
0084 ; TIMSK1 = 0x00; //timer 1 interrupt sources
0084 20926F00 sts 111,R2
0088 .dbline 81
0088 ; TIMSK2 = 0x01; //timer 2 interrupt sources
0088 80937000 sts 112,R24
008C .dbline 83
008C ;
008C ; PCMSK0 = 0x00; //pin change mask 0
008C 20926B00 sts 107,R2
0090 .dbline 84
0090 ; PCMSK1 = 0x00; //pin change mask 1
0090 20926C00 sts 108,R2
0094 .dbline 85
0094 ; PCMSK2 = 0x00; //pin change mask 2
0094 20926D00 sts 109,R2
0098 .dbline 86
0098 ; PCICR = 0x00; //pin change enable
0098 20926800 sts 104,R2
009C .dbline 88
009C ; //PRR = 0xa2; //power controller
009C ; SEI(); //re-enable interrupts
009C 7894 sei
009E .dbline 89
009E ; ADCSRA=0X16;
009E 86E1 ldi R24,22
00A0 80937A00 sts 122,R24
00A4 .dbline 90
00A4 ; ADMUX=0X00; //关ADC
00A4 20927C00 sts 124,R2
00A8 .dbline 91
00A8 ; ACSR=(1<<ACD);
00A8 80E8 ldi R24,128
00AA 80BF out 0x30,R24
00AC .dbline 92
00AC ; SMCR=(0<<SM2)|(1<<SM1)|(0<<SM0); //设定为掉电模式
00AC 84E0 ldi R24,4
00AE 83BF out 0x33,R24
00B0 .dbline -2
00B0 L5:
00B0 .dbline 0 ; func end
00B0 0895 ret
00B2 .dbend
00B2 .dbfunc e ADconv _ADconv fV
.even
00B2 _ADconv::
00B2 .dbline -1
00B2 .dbline 98
00B2 ; //all peripherals are now initialized
00B2 ; }
00B2 ;
00B2 ; /* AD转换 */
00B2 ; void ADconv (void)
00B2 ; {WDR();
00B2 .dbline 98
00B2 A895 wdr
00B4 .dbline 99
00B4 ; CLI();
00B4 F894 cli
00B6 .dbline 100
00B6 ; ADMUX=0XE0; //1.1V基准,ADC0通道0B11100000
00B6 80EE ldi R24,224
00B8 80937C00 sts 124,R24
00BC .dbline 101
00BC ; ADCSRA=0XC6; //使能和转换
00BC 86EC ldi R24,198
00BE 80937A00 sts 122,R24
00C2 L7:
00C2 .dbline 102
00C2 L8:
00C2 .dbline 102
00C2 ; while(!(ADCSRA & (1<<ADIF)));//转换测试
00C2 20907A00 lds R2,122
00C6 24FE sbrs R2,4
00C8 FCCF rjmp L7
00CA .dbline 103
00CA ; ADcon=ADCL;
00CA 20907800 lds R2,120
00CE 20920000 sts _ADcon,R2
00D2 .dbline 104
00D2 ; ADcon=ADCH;
00D2 20907900 lds R2,121
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -