📄 can162.lis
字号:
.module CAN162.c
.area text(rom, con, rel)
0000 .dbfile D:\candesignnow\CAN162.c
0000 .dbfunc e delay_1ms _delay_1ms fV
0000 ; k -> R16,R17
.even
0000 _delay_1ms::
0000 .dbline -1
0000 .dbline 23
0000 ; //ICC-AVR application builder : 2007-7-21 15:11:59
0000 ; // Target : M162
0000 ; // Crystal: 16.000Mhz
0000 ;
0000 ; #include <iom162v.h>
0000 ; #include <macros.h>
0000 ; #include "can.h"
0000 ; //extern unsigned char RX_Buffer[13];
0000 ; //#define uchar unsigned char
0000 ; //#define uint unsigned int
0000 ; unsigned char TX_Buffer[13];
0000 ; unsigned char RX_Buffer[13];
0000 ; unsigned char timer_ok;
0000 ; unsigned char timer_count;
0000 ; unsigned char RevFlag;
0000 ; unsigned int count;
0000 ;
0000 ; /**********************************************************
0000 ; 软延时
0000 ; **********************************************************/
0000 ;
0000 ; void delay_1ms(void)
0000 ; {
0000 .dbline 25
0000 ; unsigned int k;
0000 ; for(k = 0; k < (16*142 - 2); k++) // 定时1ms公式:xtal*142-2
0000 0027 clr R16
0002 1127 clr R17
0004 02C0 xjmp L5
0006 L2:
0006 .dbline 26
0006 L3:
0006 .dbline 25
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A L5:
000A .dbline 25
000A 0E3D cpi R16,222
000C E8E0 ldi R30,8
000E 1E07 cpc R17,R30
0010 D0F3 brlo L2
0012 .dbline -2
0012 .dbline 28
0012 ; ;
0012 ; //for(k = 0; k < 2; k++);
0012 ; }
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r k 16 i
0014 .dbend
0014 .dbfunc e Delay _Delay fV
0014 ; p -> R20,R21
0014 ; n -> R22,R23
.even
0014 _Delay::
0014 0E940000 xcall push_gset2
0018 B801 movw R22,R16
001A .dbline -1
001A .dbline 30
001A ; void Delay(unsigned int n)
001A ; {
001A .dbline 32
001A ; unsigned int p;
001A ; for(p = 0; p < n; p++)
001A 4427 clr R20
001C 5527 clr R21
001E 03C0 xjmp L10
0020 L7:
0020 .dbline 33
0020 .dbline 34
0020 EFDF xcall _delay_1ms
0022 .dbline 35
0022 L8:
0022 .dbline 32
0022 4F5F subi R20,255 ; offset = 1
0024 5F4F sbci R21,255
0026 L10:
0026 .dbline 32
0026 4617 cp R20,R22
0028 5707 cpc R21,R23
002A D0F3 brlo L7
002C .dbline -2
002C .dbline 36
002C ; {
002C ; delay_1ms();
002C ; }
002C ; }
002C L6:
002C 0E940000 xcall pop_gset2
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r p 20 i
0032 .dbsym r n 22 i
0032 .dbend
0032 .dbfunc e port_init _port_init fV
.even
0032 _port_init::
0032 .dbline -1
0032 .dbline 39
0032 ;
0032 ; void port_init(void)
0032 ; {
0032 .dbline 40
0032 ; PORTA = 0x00;
0032 2224 clr R2
0034 2BBA out 0x1b,R2
0036 .dbline 41
0036 ; DDRA = 0xFF;
0036 8FEF ldi R24,255
0038 8ABB out 0x1a,R24
003A .dbline 42
003A ; PORTB = 0xF0;
003A 80EF ldi R24,240
003C 88BB out 0x18,R24
003E .dbline 43
003E ; DDRB = 0x00;
003E 27BA out 0x17,R2
0040 .dbline 44
0040 ; PORTC = 0x7F;
0040 8FE7 ldi R24,127
0042 85BB out 0x15,R24
0044 .dbline 45
0044 ; DDRC = 0xFF;
0044 8FEF ldi R24,255
0046 84BB out 0x14,R24
0048 .dbline 46
0048 ; PORTD = 0x04;
0048 84E0 ldi R24,4
004A 82BB out 0x12,R24
004C .dbline 47
004C ; DDRD = 0xFA;
004C 8AEF ldi R24,250
004E 81BB out 0x11,R24
0050 .dbline 48
0050 ; PORTE = 0x07;
0050 87E0 ldi R24,7
0052 87B9 out 0x7,R24
0054 .dbline 49
0054 ; DDRE = 0x07;
0054 86B9 out 0x6,R24
0056 .dbline -2
0056 .dbline 50
0056 ; }
0056 L11:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbend
0058 .dbfunc e watchdog_init _watchdog_init fV
.even
0058 _watchdog_init::
0058 .dbline -1
0058 .dbline 55
0058 ;
0058 ; //Watchdog initialisation
0058 ; // prescale: 2048K cycles
0058 ; void watchdog_init(void)
0058 ; {
0058 .dbline 56
0058 ; WDR(); //this prevents a timout on enabling
0058 A895 wdr
005A .dbline 57
005A ; WDTCR= 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
005A 8FE0 ldi R24,15
005C 81BD out 0x21,R24
005E .dbline -2
005E .dbline 58
005E ; }
005E L12:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbend
0060 .dbfunc e timer1_init _timer1_init fV
.even
0060 _timer1_init::
0060 .dbline -1
0060 .dbline 65
0060 ;
0060 ; //TIMER1 initialisation - prescale:256
0060 ; // WGM: 0) Normal, TOP=0xFFFF
0060 ; // desired value: 50Hz
0060 ; // actual value: 50.000Hz (0.0%)
0060 ; void timer1_init(void)
0060 ; {
0060 .dbline 66
0060 ; TCCR1B= 0x00; //stop
0060 2224 clr R2
0062 2EBC out 0x2e,R2
0064 .dbline 67
0064 ; TCNT1H= 0xFB; //setup
0064 8BEF ldi R24,251
0066 8DBD out 0x2d,R24
0068 .dbline 68
0068 ; TCNT1L= 0x1E;
0068 8EE1 ldi R24,30
006A 8CBD out 0x2c,R24
006C .dbline 69
006C ; OCR1AH= 0x04;
006C 84E0 ldi R24,4
006E 8BBD out 0x2b,R24
0070 .dbline 70
0070 ; OCR1AL= 0xE2;
0070 82EE ldi R24,226
0072 8ABD out 0x2a,R24
0074 .dbline 71
0074 ; OCR1BH= 0x04;
0074 84E0 ldi R24,4
0076 89BD out 0x29,R24
0078 .dbline 72
0078 ; OCR1BL= 0xE2;
0078 82EE ldi R24,226
007A 88BD out 0x28,R24
007C .dbline 73
007C ; TCCR1A= 0x00;
007C 2FBC out 0x2f,R2
007E .dbline 74
007E ; TCCR1B= 0x04; //start Timer
007E 84E0 ldi R24,4
0080 8EBD out 0x2e,R24
0082 .dbline -2
0082 .dbline 75
0082 ; }
0082 L13:
0082 .dbline 0 ; func end
0082 0895 ret
0084 .dbend
.area vector(rom, abs)
.org 60
003C 0C944200 jmp _timer1_ovf_isr
.area text(rom, con, rel)
0084 .dbfile D:\candesignnow\CAN162.c
0084 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
0084 _timer1_ovf_isr::
0084 2A92 st -y,R2
0086 3A92 st -y,R3
0088 8A93 st -y,R24
008A 9A93 st -y,R25
008C EA93 st -y,R30
008E 2FB6 in R2,0x3f
0090 2A92 st -y,R2
0092 .dbline -1
0092 .dbline 79
0092 .dbline 81
0092 8BEF ldi R24,251
0094 8DBD out 0x2d,R24
0096 .dbline 82
0096 8EE1 ldi R24,30
0098 8CBD out 0x2c,R24
009A .dbline 83
009A 81E0 ldi R24,1
009C 80930400 sts _timer_ok,R24
00A0 .dbline 84
00A0 80910000 lds R24,_count
00A4 90910100 lds R25,_count+1
00A8 0196 adiw R24,1
00AA 90930100 sts _count+1,R25
00AE 80930000 sts _count,R24
00B2 .dbline 85
00B2 8E31 cpi R24,30
00B4 E0E0 ldi R30,0
00B6 9E07 cpc R25,R30
00B8 51F4 brne L15
00BA .dbline 86
00BA .dbline 87
00BA 2224 clr R2
00BC 3324 clr R3
00BE 30920100 sts _count+1,R3
00C2 20920000 sts _count,R2
00C6 .dbline 88
00C6 80E1 ldi R24,16
00C8 22B2 in R2,0x12
00CA 2826 eor R2,R24
00CC 22BA out 0x12,R2
00CE .dbline 89
00CE L15:
00CE .dbline -2
00CE .dbline 91
00CE ;
00CE ; #pragma interrupt_handler timer1_ovf_isr:16
00CE ; void timer1_ovf_isr(void)
00CE ; {
00CE ; //TIMER1 has overflowed
00CE ; TCNT1H= 0xFB; //reload counter high value
00CE ; TCNT1L= 0x1E; //reload counter low value
00CE ; timer_ok = 1;
00CE ; count++;
00CE ; if(count == 30)
00CE ; {
00CE ; count = 0;
00CE ; PORTD ^= (1<<PD4); //程序在运行
00CE ; }
00CE ;
00CE ; }
00CE L14:
00CE 2990 ld R2,y+
00D0 2FBE out 0x3f,R2
00D2 E991 ld R30,y+
00D4 9991 ld R25,y+
00D6 8991 ld R24,y+
00D8 3990 ld R3,y+
00DA 2990 ld R2,y+
00DC .dbline 0 ; func end
00DC 1895 reti
00DE .dbend
.area vector(rom, abs)
.org 4
0004 0C946F00 jmp _int0_isr
.area text(rom, con, rel)
00DE .dbfile D:\candesignnow\CAN162.c
00DE .dbfunc e int0_isr _int0_isr fV
00DE ; can_status -> R22
00DE ; reg -> R20
00DE ; CompCount -> R22
.even
00DE _int0_isr::
00DE 0E940000 xcall push_lset
00E2 0E940000 xcall push_gset2
00E6 .dbline -1
00E6 .dbline 122
00E6 ; /*
00E6 ; //TIMER0 initialisation - prescale:256
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -