📄 minid0712.lis
字号:
.module minid0712.c
.area text(rom, con, rel)
0000 .dbfile D:\bak\新建文件夹\minid0712.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 26
0000 ; /*****************************************************************
0000 ; * 文件名: main.c
0000 ; * 版本号:
0000 ; * 创作日期: 2005.7.12
0000 ; * 作者: fengzm
0000 ; * 功能说明: 主函数
0000 ; * 其它说明: 使用AVR单片机Atmega48, 晶振:8Mhz
0000 ;
0000 ; *****************************************************************/
0000 ;
0000 ;
0000 ; /*****************************************************************
0000 ;
0000 ; * 修改日期:
0000 ; * 修改人:
0000 ; * 修改原因:
0000 ;
0000 ;
0000 ; *******************************************************************/
0000 ;
0000 ;
0000 ; #include "minid.h"
0000 ;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 27
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 25B8 out 0x5,R2
0004 .dbline 28
0004 ; DDRB = 0x00; //0000 0000
0004 24B8 out 0x4,R2
0006 .dbline 29
0006 ; PORTC = 0x00;
0006 28B8 out 0x8,R2
0008 .dbline 30
0008 ; DDRC = 0x0C; //0000 1100
0008 8CE0 ldi R24,12
000A 87B9 out 0x7,R24
000C .dbline 31
000C ; PORTD = 0x00;
000C 2BB8 out 0xb,R2
000E .dbline 32
000E ; DDRD = 0x61; //0110 0001
000E 81E6 ldi R24,97
0010 8AB9 out 0xa,R24
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e watchdog_init _watchdog_init fV
.even
0014 _watchdog_init::
0014 .dbline -1
0014 .dbline 38
0014 ; }
0014 ;
0014 ; //Watchdog initialize
0014 ; //prescale: 2K,16ms
0014 ; void watchdog_init(void)
0014 ; {
0014 .dbline 39
0014 ; WDR(); //this prevents a timout on enabling
0014 A895 wdr
0016 .dbline 40
0016 ; WDTCSR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
0016 88E0 ldi R24,8
0018 80936000 sts 96,R24
001C .dbline -2
001C L2:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbend
001E .dbfunc e timer0_init _timer0_init fV
.even
001E _timer0_init::
001E .dbline -1
001E .dbline 48
001E ; }
001E ;
001E ; //TIMER0 initialize - prescale:1024
001E ; // WGM: Normal
001E ; // desired value: 10mSec
001E ; // actual value: 9.984mSec (0.2%)
001E ; void timer0_init(void)
001E ; {
001E .dbline 49
001E ; TCCR0B = 0x00; //stop
001E 2224 clr R2
0020 25BC out 0x25,R2
0022 .dbline 50
0022 ; TCNT0 = 0xB2; //set count
0022 82EB ldi R24,178
0024 86BD out 0x26,R24
0026 .dbline 51
0026 ; TCCR0A = 0x00;
0026 24BC out 0x24,R2
0028 .dbline 52
0028 ; TCCR0B = 0x05; //start timer
0028 85E0 ldi R24,5
002A 85BD out 0x25,R24
002C .dbline -2
002C L3:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbend
.area vector(rom, abs)
.org 32
0020 17C0 rjmp _timer0_ovf_isr
.area text(rom, con, rel)
002E .dbfile D:\bak\新建文件夹\minid0712.c
002E .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
002E _timer0_ovf_isr::
002E 00D0 rcall push_lset
0030 00D0 rcall push_gset2
0032 .dbline -1
0032 .dbline 57
0032 ; }
0032 ;
0032 ; #pragma interrupt_handler timer0_ovf_isr:17
0032 ; void timer0_ovf_isr(void)
0032 ; {
0032 .dbline 58
0032 ; TCNT0 = 0xB2; //TIMER0 has overflowed
0032 82EB ldi R24,178
0034 86BD out 0x26,R24
0036 .dbline 62
0036 ;
0036 ; //****************当前转速值*****************
0036 ;
0036 ; g_Temp = g_DeltaEnc * 125;
0036 40903500 lds R4,_g_DeltaEnc+2
003A 50903600 lds R5,_g_DeltaEnc+2+1
003E 20903300 lds R2,_g_DeltaEnc
0042 30903400 lds R3,_g_DeltaEnc+1
0046 4DE7 ldi R20,125
0048 50E0 ldi R21,0
004A 60E0 ldi R22,0
004C 70E0 ldi R23,0
004E 5A92 st -y,R5
0050 4A92 st -y,R4
0052 3A92 st -y,R3
0054 2A92 st -y,R2
0056 8A01 movw R16,R20
0058 9B01 movw R18,R22
005A 00D0 rcall empy32u
005C 10930200 sts _g_Temp+1,R17
0060 00930100 sts _g_Temp,R16
0064 30930400 sts _g_Temp+2+1,R19
0068 20930300 sts _g_Temp+2,R18
006C .dbline 63
006C ; g_Temp /=1000;
006C 48EE ldi R20,232
006E 53E0 ldi R21,3
0070 60E0 ldi R22,0
0072 70E0 ldi R23,0
0074 7A93 st -y,R23
0076 6A93 st -y,R22
0078 5A93 st -y,R21
007A 4A93 st -y,R20
007C 00D0 rcall div32u
007E 10930200 sts _g_Temp+1,R17
0082 00930100 sts _g_Temp,R16
0086 30930400 sts _g_Temp+2+1,R19
008A 20930300 sts _g_Temp+2,R18
008E .dbline 64
008E ; g_Temp *= 72;
008E 48E4 ldi R20,72
0090 50E0 ldi R21,0
0092 60E0 ldi R22,0
0094 70E0 ldi R23,0
0096 3A93 st -y,R19
0098 2A93 st -y,R18
009A 1A93 st -y,R17
009C 0A93 st -y,R16
009E 8A01 movw R16,R20
00A0 9B01 movw R18,R22
00A2 00D0 rcall empy32u
00A4 10930200 sts _g_Temp+1,R17
00A8 00930100 sts _g_Temp,R16
00AC 30930400 sts _g_Temp+2+1,R19
00B0 20930300 sts _g_Temp+2,R18
00B4 .dbline 65
00B4 ; g_Temp = 60000000 / g_Temp;
00B4 40E0 ldi R20,0
00B6 57E8 ldi R21,135
00B8 63E9 ldi R22,147
00BA 73E0 ldi R23,3
00BC 3A93 st -y,R19
00BE 2A93 st -y,R18
00C0 1A93 st -y,R17
00C2 0A93 st -y,R16
00C4 8A01 movw R16,R20
00C6 9B01 movw R18,R22
00C8 00D0 rcall div32u
00CA 10930200 sts _g_Temp+1,R17
00CE 00930100 sts _g_Temp,R16
00D2 30930400 sts _g_Temp+2+1,R19
00D6 20930300 sts _g_Temp+2,R18
00DA .dbline 68
00DA ; //****************当前转速值******************
00DA ;
00DA ; g_AdcNum = 7; //脚踏板通道
00DA 87E0 ldi R24,7
00DC 80934000 sts _g_AdcNum,R24
00E0 .dbline 69
00E0 ; sPID.SetValue = AdcPedal(g_ValueAdc) & 0xfff; //PID输入预设值
00E0 00913E00 lds R16,_g_ValueAdc
00E4 10913F00 lds R17,_g_ValueAdc+1
00E8 00D0 rcall _AdcPedal
00EA C801 movw R24,R16
00EC 9F70 andi R25,15
00EE 90930600 sts _sPID+1,R25
00F2 80930500 sts _sPID,R24
00F6 .dbline 71
00F6 ;
00F6 ; g_IicData = PIDCalc(&sPID, g_Temp); //PID运算
00F6 20910100 lds R18,_g_Temp
00FA 30910200 lds R19,_g_Temp+1
00FE 00E0 ldi R16,<_sPID
0100 10E0 ldi R17,>_sPID
0102 00D0 rcall _PIDCalc
0104 00933C00 sts _g_IicData,R16
0108 .dbline 72
0108 ; g_flag10ms = 0xff;
0108 8FEF ldi R24,255
010A 80930000 sts _g_flag10ms,R24
010E .dbline 75
010E ;
010E ; //**********************************
010E ; timer1_ovf_isr_();
010E 3CD0 rcall _timer1_ovf_isr_
0110 .dbline -2
0110 L4:
0110 00D0 rcall pop_gset2
0112 00D0 rcall pop_lset
0114 .dbline 0 ; func end
0114 1895 reti
0116 .dbend
0116 .dbfunc e init_devices _init_devices fV
.even
0116 _init_devices::
0116 .dbline -1
0116 .dbline 85
0116 ; //***********************************
0116 ;
0116 ; }
0116 ;
0116 ;
0116 ;
0116 ;
0116 ; //call this routine to initialize all peripherals
0116 ; void init_devices(void)
0116 ; {
0116 .dbline 87
0116 ; //stop errant interrupts until set up
0116 ; CLI(); //disable all interrupts
0116 F894 cli
0118 .dbline 88
0118 ; port_init();
0118 73DF rcall _port_init
011A .dbline 90
011A ; //watchdog_init();
011A ; timer0_init();
011A 81DF rcall _timer0_init
011C .dbline 91
011C ; timer1_init();
011C 00D0 rcall _timer1_init
011E .dbline 93
011E ;
011E ; twi_init();
011E 00D0 rcall _twi_init
0120 .dbline 94
0120 ; adc_init();
0120 00D0 rcall _adc_init
0122 .dbline 96
0122 ;
0122 ; MCUCR = 0x00;
0122 2224 clr R2
0124 25BE out 0x35,R2
0126 .dbline 97
0126 ; EICRA = 0x00; //extended ext ints
0126 20926900 sts 105,R2
012A .dbline 98
012A ; EIMSK = 0x00;
012A 2DBA out 0x1d,R2
012C .dbline 100
012C ;
012C ; TIMSK0 = 0x01; //timer 0 interrupt sources
012C 81E0 ldi R24,1
012E 80936E00 sts 110,R24
0132 .dbline 101
0132 ; TIMSK1 = 0x21; //timer 1 interrupt sources
0132 81E2 ldi R24,33
0134 80936F00 sts 111,R24
0138 .dbline 102
0138 ; TIMSK2 = 0x00; //timer 2 interrupt sources
0138 20927000 sts 112,R2
013C .dbline 104
013C ;
013C ; PCMSK0 = 0x00; //pin change mask 0
013C 20926B00 sts 107,R2
0140 .dbline 105
0140 ; PCMSK1 = 0x00; //pin change mask 1
0140 20926C00 sts 108,R2
0144 .dbline 106
0144 ; PCMSK2 = 0x00; //pin change mask 2
0144 20926D00 sts 109,R2
0148 .dbline 107
0148 ; PCICR = 0x00; //pin change enable
0148 20926800 sts 104,R2
014C .dbline 108
014C ; PRR = 0x00;
014C 20926400 sts 100,R2
0150 .dbline 110
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -