📄 speed_iso.lst
字号:
__start:
__text_start:
0014 E5CF LDI R28,0x5F
0015 E0D4 LDI R29,4
0016 BFCD OUT 0x3D,R28
0017 BFDE OUT 0x3E,R29
0018 51C0 SUBI R28,0x10
0019 40D0 SBCI R29,0
001A EA0A LDI R16,0xAA
001B 8308 STD Y+0,R16
001C 2400 CLR R0
001D E6E1 LDI R30,0x61
001E E0F0 LDI R31,0
001F E010 LDI R17,0
0020 36E1 CPI R30,0x61
0021 07F1 CPC R31,R17
0022 F011 BEQ 0x0025
0023 9201 ST R0,Z+
0024 CFFB RJMP 0x0020
0025 8300 STD Z+0,R16
0026 E2E6 LDI R30,0x26
0027 E0F0 LDI R31,0
0028 E6A0 LDI R26,0x60
0029 E0B0 LDI R27,0
002A E010 LDI R17,0
002B 32E7 CPI R30,0x27
002C 07F1 CPC R31,R17
002D F021 BEQ 0x0032
002E 95C8 LPM
002F 9631 ADIW R30,1
0030 920D ST R0,X+
0031 CFF9 RJMP 0x002B
0032 D048 RCALL _main
_exit:
0033 CFFF RJMP _exit
FILE: D:\xb_work\标准速度测试仪\speed_mega8\C_file\main.c
(0001) //ICC-AVR application builder : 2006-10-11 上午 11:30:40
(0002) // Target : M8
(0003) // Crystal: 6.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007)
(0008) unsigned char flag =0;
(0009)
(0010) void port_init(void)
(0011) {
(0012) PORTB = 0x00;
_port_init:
0034 2422 CLR R2
0035 BA28 OUT 0x18,R2
(0013) DDRB = 0x00;
0036 BA27 OUT 0x17,R2
(0014) PORTC = 0x00; //m103 output only
0037 BA25 OUT 0x15,R2
(0015) DDRC = 0x00;
0038 BA24 OUT 0x14,R2
(0016) PORTD = 0x00;
0039 BA22 OUT 0x12,R2
(0017) DDRD = 0x00;
003A BA21 OUT 0x11,R2
003B 9508 RET
(0018) }
(0019)
(0020) //Watchdog initialize
(0021) // prescale: 16K
(0022) void watchdog_init(void)
(0023) {
(0024) WDR(); //this prevents a timout on enabling
_watchdog_init:
003C 95A8 WDR
(0025) WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
003D E088 LDI R24,0x8
003E BD81 OUT 0x21,R24
003F 9508 RET
(0026) }
(0027)
(0028) //TIMER1 initialize - prescale:1
(0029) // WGM: 0) Normal, TOP=0xFFFF
(0030) // desired value: 320Hz
(0031) // actual value: 320.000Hz (0.0%)
(0032) void timer1_init(void)
(0033) {
(0034) TCCR1B = 0x00; //stop
_timer1_init:
0040 2422 CLR R2
0041 BC2E OUT 0x2E,R2
(0035) TCNT1H = 0xD8; //setup
0042 ED88 LDI R24,0xD8
0043 BD8D OUT 0x2D,R24
(0036) TCNT1L = 0xF0;
0044 EF80 LDI R24,0xF0
0045 BD8C OUT 0x2C,R24
(0037) OCR1AH = 0x27;
0046 E287 LDI R24,0x27
0047 BD8B OUT 0x2B,R24
(0038) OCR1AL = 0x10;
0048 E180 LDI R24,0x10
0049 BD8A OUT 0x2A,R24
(0039) OCR1BH = 0x27;
004A E287 LDI R24,0x27
004B BD89 OUT 0x29,R24
(0040) OCR1BL = 0x10;
004C E180 LDI R24,0x10
004D BD88 OUT 0x28,R24
(0041) ICR1H = 0x27;
004E E287 LDI R24,0x27
004F BD87 OUT 0x27,R24
(0042) ICR1L = 0x10;
0050 E180 LDI R24,0x10
0051 BD86 OUT 0x26,R24
(0043) TCCR1A = 0x00;
0052 BC2F OUT 0x2F,R2
(0044) TCCR1B = 0x01; //start Timer
0053 E081 LDI R24,1
0054 BD8E OUT 0x2E,R24
0055 9508 RET
_timer1_ovf_isr:
0056 922A ST R2,-Y
0057 938A ST R24,-Y
0058 B62F IN R2,0x3F
0059 922A ST R2,-Y
(0045) }
(0046)
(0047) #pragma interrupt_handler timer1_ovf_isr:9
(0048) void timer1_ovf_isr(void)
(0049) {
(0050) //TIMER1 has overflowed
(0051) TCNT1H = 0xD8;
005A ED88 LDI R24,0xD8
005B BD8D OUT 0x2D,R24
(0052) TCNT1L = 0xF0;
005C EF80 LDI R24,0xF0
005D BD8C OUT 0x2C,R24
(0053)
(0054)
(0055) if(flag ==0)
005E 90200060 LDS R2,flag
0060 2022 TST R2
0061 F429 BNE 0x0067
(0056) {
(0057) PORTD |= 0x04;
0062 9A92 SBI 0x12,2
(0058) flag =1;
0063 E081 LDI R24,1
0064 93800060 STS flag,R24
(0059) }else
0066 C004 RJMP 0x006B
(0060) {
(0061) PORTD &= ~(0x04);
0067 9892 CBI 0x12,2
(0062) flag =0;
0068 2422 CLR R2
0069 92200060 STS flag,R2
(0063) }
006B 9029 LD R2,Y+
006C BE2F OUT 0x3F,R2
006D 9189 LD R24,Y+
006E 9029 LD R2,Y+
006F 9518 RETI
(0064)
(0065) }
(0066)
(0067) //call this routine to initialize all peripherals
(0068) void init_devices(void)
(0069) {
(0070) //stop errant interrupts until set up
(0071) CLI(); //disable all interrupts
_init_devices:
0070 94F8 BCLR 7
(0072) port_init();
0071 DFC2 RCALL _port_init
(0073) watchdog_init();
0072 DFC9 RCALL _watchdog_init
(0074) timer1_init();
0073 DFCC RCALL _timer1_init
(0075)
(0076) MCUCR = 0x00;
0074 2422 CLR R2
0075 BE25 OUT 0x35,R2
(0077) GICR = 0x00;
0076 BE2B OUT 0x3B,R2
(0078) TIMSK = 0x04; //timer interrupt sources
0077 E084 LDI R24,4
0078 BF89 OUT 0x39,R24
(0079) SEI(); //re-enable interrupts
0079 9478 BSET 7
007A 9508 RET
(0080) //all peripherals are now initialized
(0081) }
(0082)
(0083) //************************************************************
(0084) void main(void)
(0085) {
(0086) init_devices();
_main:
007B DFF4 RCALL _init_devices
(0087) DDRD |= 0x04;
007C 9A8A SBI 0x11,2
(0088) PORTD |= 0x04;
007D 9A92 SBI 0x12,2
(0089) flag =1;
007E E081 LDI R24,1
007F 93800060 STS flag,R24
0081 C001 RJMP 0x0083
(0090)
(0091) while(1)
(0092) {
(0093) WDR();
FILE: <library>
0082 95A8 WDR
0083 CFFE RJMP 0x0082
0084 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -