📄 can162.lis
字号:
00E6 ; // WGM: Normal
00E6 ; // desired value: 1000Hz
00E6 ; // actual value: 1008.065Hz (0.8%)
00E6 ; void timer0_init(void)
00E6 ; {
00E6 ; TCCR0= 0x00; //stop
00E6 ; TCNT0= 0xFE; //set count
00E6 ; OCR0= 0x3E; //set compare value
00E6 ; TCCR0= 0x04; //start timer
00E6 ; TIMSK = 0x02;
00E6 ; }
00E6 ;
00E6 ; #pragma interrupt_handler timer0_ovf_isr:18
00E6 ; void timer0_ovf_isr(void)
00E6 ; {
00E6 ; TCNT0= 0xFE; //reload counter value
00E6 ; timer_ok = 1;
00E6 ; count++;
00E6 ; if(count == 1)
00E6 ; {
00E6 ; count = 0;
00E6 ; PORTD ^= (1<<PD4); //程序在运行
00E6 ; }
00E6 ; }*/
00E6 ;
00E6 ; #pragma interrupt_handler int0_isr:2
00E6 ; //中断处理可以考虑放外边
00E6 ; void int0_isr(void)
00E6 ; {
00E6 .dbline 126
00E6 ; unsigned char reg;
00E6 ; unsigned char CompCount;
00E6 ; unsigned char can_status;
00E6 ; CLI(); //关CPU中断
00E6 F894 cli
00E8 .dbline 127
00E8 ; RevFlag = 1;
00E8 81E0 ldi R24,1
00EA 80930200 sts _RevFlag,R24
00EE .dbline 128
00EE ; reg = read_sja(IER); //保存SJA1000的中断允许状态
00EE 04E0 ldi R16,4
00F0 0E940000 xcall _read_sja
00F4 402F mov R20,R16
00F6 .dbline 129
00F6 ; write_sja(IER, 0x00); //重设中断允许状态为不允许任何中断
00F6 2227 clr R18
00F8 04E0 ldi R16,4
00FA 0E940000 xcall _write_sja
00FE .dbline 130
00FE ; can_status = CanReceive(); //接收消息
00FE 0E940000 xcall _CanReceive
0102 602F mov R22,R16
0104 .dbline 131
0104 ; if(can_status == 0x01)
0104 0130 cpi R16,1
0106 C9F4 brne L18
0108 .dbline 132
0108 ; {
0108 .dbline 133
0108 ; for(CompCount = 5; CompCount < 13; CompCount++) //检查接收到的数据是否正确
0108 65E0 ldi R22,5
010A 14C0 xjmp L23
010C L20:
010C .dbline 134
010C ; {
010C .dbline 135
010C ; if(RX_Buffer[CompCount] != TX_Buffer[CompCount])
010C 80E0 ldi R24,<_TX_Buffer
010E 90E0 ldi R25,>_TX_Buffer
0110 E62F mov R30,R22
0112 FF27 clr R31
0114 E80F add R30,R24
0116 F91F adc R31,R25
0118 2080 ldd R2,z+0
011A 80E0 ldi R24,<_RX_Buffer
011C 90E0 ldi R25,>_RX_Buffer
011E E62F mov R30,R22
0120 FF27 clr R31
0122 E80F add R30,R24
0124 F91F adc R31,R25
0126 3080 ldd R3,z+0
0128 3214 cp R3,R2
012A 19F0 breq L24
012C .dbline 136
012C ; {
012C .dbline 137
012C ; RevFlag = 0; //发现有不一致时,则清0标志位
012C 2224 clr R2
012E 20920200 sts _RevFlag,R2
0132 .dbline 138
0132 ; }
0132 L24:
0132 .dbline 139
0132 L21:
0132 .dbline 133
0132 6395 inc R22
0134 L23:
0134 .dbline 133
0134 6D30 cpi R22,13
0136 50F3 brlo L20
0138 .dbline 140
0138 ; }
0138 ; }
0138 02C0 xjmp L19
013A L18:
013A .dbline 142
013A ; else
013A ; Init_CAN(); //如果不是正确接收,则重新初始化
013A 0E940000 xcall _Init_CAN
013E L19:
013E .dbline 143
013E ; write_sja(IER, reg); //重新写回中断允许模式
013E 242F mov R18,R20
0140 04E0 ldi R16,4
0142 0E940000 xcall _write_sja
0146 .dbline 144
0146 ; SEI();
0146 7894 sei
0148 .dbline -2
0148 .dbline 145
0148 ; }
0148 L17:
0148 0E940000 xcall pop_gset2
014C 0E940000 xcall pop_lset
0150 .dbline 0 ; func end
0150 1895 reti
0152 .dbsym r can_status 22 c
0152 .dbsym r reg 20 c
0152 .dbsym r CompCount 22 c
0152 .dbend
0152 .dbfunc e init_devices _init_devices fV
.even
0152 _init_devices::
0152 .dbline -1
0152 .dbline 150
0152 ;
0152 ; // **Section [PCHINT1] not found**
0152 ; //call this routine to initialise all peripherals
0152 ; void init_devices(void)
0152 ; {
0152 .dbline 152
0152 ; //stop errant interrupts until set up
0152 ; CLI(); //disable all interrupts
0152 F894 cli
0154 .dbline 153
0154 ; port_init();
0154 6EDF xcall _port_init
0156 .dbline 154
0156 ; watchdog_init();
0156 80DF xcall _watchdog_init
0158 .dbline 157
0158 ; //timer1_init();
0158 ;
0158 ; MCUCR = 0x82;
0158 82E8 ldi R24,130
015A 85BF out 0x35,R24
015C .dbline 158
015C ; EMCUCR = 0x00;
015C 2224 clr R2
015E 26BE out 0x36,R2
0160 .dbline 160
0160 ; //GIMSK= 0x00;
0160 ; TIMSK = 0x80; //timer interrupt sources
0160 80E8 ldi R24,128
0162 89BF out 0x39,R24
0164 .dbline 162
0164 ; //ETIMSK = 0x00;
0164 ; GICR = 0x40;
0164 80E4 ldi R24,64
0166 8BBF out 0x3b,R24
0168 .dbline 165
0168 ; //PCMSK0 = 0x00;
0168 ; //PCMSK1 = 0x00;
0168 ; SEI(); //re-enable interrupts
0168 7894 sei
016A .dbline -2
016A .dbline 167
016A ; //all peripherals are now initialised
016A ; }
016A L26:
016A .dbline 0 ; func end
016A 0895 ret
016C .dbend
016C .dbfunc e main _main fV
.even
016C _main::
016C .dbline -1
016C .dbline 170
016C ;
016C ; void main(void)
016C ; {
016C .dbline 171
016C ; init_devices();
016C F2DF xcall _init_devices
016E .dbline 172
016E ; WDR();
016E A895 wdr
0170 .dbline 176
0170 ;
0170 ; //Delay(1000);
0170 ;
0170 ; Init_CAN(); //CAN初始化
0170 0E940000 xcall _Init_CAN
0174 .dbline 177
0174 ; WDR();
0174 A895 wdr
0176 .dbline 178
0176 ; timer1_init();
0176 74DF xcall _timer1_init
0178 .dbline 179
0178 ; WDR();
0178 A895 wdr
017A 24C0 xjmp L29
017C L28:
017C .dbline 182
017C ;
017C ; while(1)
017C ; {
017C .dbline 183
017C ; PORTD |= (1<<PD1);//初始化成功
017C 919A sbi 0x12,1
017E .dbline 184
017E ; WDR();
017E A895 wdr
0180 .dbline 185
0180 ; if(timer_ok == 1)
0180 80910400 lds R24,_timer_ok
0184 8130 cpi R24,1
0186 91F4 brne L31
0188 .dbline 186
0188 ; {
0188 .dbline 187
0188 ; timer_ok = 0;
0188 2224 clr R2
018A 20920400 sts _timer_ok,R2
018E .dbline 188
018E ; timer_count++;
018E 80910300 lds R24,_timer_count
0192 8F5F subi R24,255 ; addi 1
0194 80930300 sts _timer_count,R24
0198 .dbline 190
0198 ;
0198 ; if(timer_count == 60)
0198 8C33 cpi R24,60
019A 41F4 brne L33
019C .dbline 191
019C ; {
019C .dbline 192
019C ; timer_count = 0;
019C 20920300 sts _timer_count,R2
01A0 .dbline 194
01A0 ; //TCCR1B = 0x00;
01A0 ; CanTransmit(); //发送数据
01A0 0E940000 xcall _CanTransmit
01A4 .dbline 195
01A4 ; PORTD ^= (1<<PD3);
01A4 88E0 ldi R24,8
01A6 22B2 in R2,0x12
01A8 2826 eor R2,R24
01AA 22BA out 0x12,R2
01AC .dbline 197
01AC ; //TCCR1B = 0x04;
01AC ; }
01AC L33:
01AC .dbline 199
01AC ;
01AC ; }
01AC L31:
01AC .dbline 202
01AC ; //Delay(50);
01AC ; //Delay(100);
01AC ; WDR();
01AC A895 wdr
01AE .dbline 203
01AE ; if(RevFlag == 1) //如果正确接收到数据
01AE 80910200 lds R24,_RevFlag
01B2 8130 cpi R24,1
01B4 39F4 brne L35
01B6 .dbline 204
01B6 ; {
01B6 .dbline 205
01B6 ; RevFlag = 0;
01B6 2224 clr R2
01B8 20920200 sts _RevFlag,R2
01BC .dbline 206
01BC ; PORTD ^= (1<<PD5);
01BC 80E2 ldi R24,32
01BE 22B2 in R2,0x12
01C0 2826 eor R2,R24
01C2 22BA out 0x12,R2
01C4 .dbline 208
01C4 ; //write_sja(CMR, 0x04);
01C4 ; }
01C4 L35:
01C4 .dbline 210
01C4 L29:
01C4 .dbline 181
01C4 DBCF xjmp L28
01C6 X0:
01C6 .dbline -2
01C6 .dbline 211
01C6 ;
01C6 ; }
01C6 ; }
01C6 L27:
01C6 .dbline 0 ; func end
01C6 0895 ret
01C8 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\candesignnow\CAN162.c
0000 _count::
0000 .blkb 2
0002 .dbsym e count _count i
0002 _RevFlag::
0002 .blkb 1
0003 .dbsym e RevFlag _RevFlag c
0003 _timer_count::
0003 .blkb 1
0004 .dbsym e timer_count _timer_count c
0004 _timer_ok::
0004 .blkb 1
0005 .dbsym e timer_ok _timer_ok c
0005 _RX_Buffer::
0005 .blkb 13
0012 .dbsym e RX_Buffer _RX_Buffer A[13:13]c
0012 _TX_Buffer::
0012 .blkb 13
001F .dbsym e TX_Buffer _TX_Buffer A[13:13]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -