📄 at90can128.lis
字号:
.module AT90CAN128.C
.area text(rom, con, rel)
0000 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.area data(ram, con, rel)
0000 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0000 _CS::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0001 .dbsym e CS _CS c
0001 _CHA::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0002 .dbsym e CHA _CHA c
0002 _LED::
0002 .blkb 2
.area idata
0002 0000 .byte 0,0
.area data(ram, con, rel)
0004 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0004 .blkb 2
.area idata
0004 0000 .byte 0,0
.area data(ram, con, rel)
0006 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0006 .blkb 1
.area idata
0006 00 .byte 0
.area data(ram, con, rel)
0007 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0007 .dbsym e LED _LED A[5:5]c
0007 _send_mark::
0007 .blkb 1
.area idata
0007 01 .byte 1
.area data(ram, con, rel)
0008 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0008 .dbsym e send_mark _send_mark c
0008 _display_mark::
0008 .blkb 1
.area idata
0008 01 .byte 1
.area data(ram, con, rel)
0009 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0009 .dbsym e display_mark _display_mark c
0009 _send_time::
0009 .blkb 1
.area idata
0009 00 .byte 0
.area data(ram, con, rel)
000A .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
000A .dbsym e send_time _send_time c
000A _display_time::
000A .blkb 1
.area idata
000A 00 .byte 0
.area data(ram, con, rel)
000B .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
000B .dbsym e display_time _display_time c
.area text(rom, con, rel)
0000 .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
0000 .dbfunc e PORT_Init _PORT_Init fV
.even
0000 _PORT_Init::
0000 .dbline -1
0000 .dbline 15
0000 ; #define _MAIN_H
0000 ; #include "AT90CAN128.H"
0000 ;
0000 ; uint8 CS = 0;
0000 ; uint8 volatile CHA = 0;
0000 ;
0000 ; BOOL LED[5] = {FALSE,FALSE,FALSE,FALSE,FALSE};
0000 ; BOOL volatile send_mark = TRUE;
0000 ; BOOL volatile display_mark = TRUE;
0000 ; uint8 send_time = 0;
0000 ; uint8 display_time = 0;
0000 ;
0000 ;
0000 ; void PORT_Init(void)
0000 ; {
0000 .dbline 16
0000 ; PORTA = 0xFF;
0000 8FEF ldi R24,255
0002 82B9 out 0x2,R24
0004 .dbline 17
0004 ; DDRA = 0xFF; //数码管
0004 81B9 out 0x1,R24
0006 .dbline 19
0006 ;
0006 ; PORTB = 0xFF;
0006 85B9 out 0x5,R24
0008 .dbline 20
0008 ; DDRB = 0x00;
0008 2224 clr R2
000A 24B8 out 0x4,R2
000C .dbline 22
000C ;
000C ; PORTC = 0xFF; //m103 output only
000C 88B9 out 0x8,R24
000E .dbline 23
000E ; DDRC = 0xFF;
000E 87B9 out 0x7,R24
0010 .dbline 25
0010 ;
0010 ; PORTD = 0xFF;//PD4
0010 8BB9 out 0xb,R24
0012 .dbline 26
0012 ; DDRD = 0x10;
0012 80E1 ldi R24,16
0014 8AB9 out 0xa,R24
0016 .dbline 28
0016 ;
0016 ; PORTE = 0xFF;
0016 8FEF ldi R24,255
0018 8EB9 out 0xe,R24
001A .dbline 29
001A ; DDRE = 0x00;
001A 2DB8 out 0xd,R2
001C .dbline 31
001C ;
001C ; PORTF = 0xFF;
001C 81BB out 0x11,R24
001E .dbline 32
001E ; DDRF = 0x00;
001E 20BA out 0x10,R2
0020 .dbline 34
0020 ;
0020 ; PORTG = 0xFF;
0020 84BB out 0x14,R24
0022 .dbline 35
0022 ; DDRG = 0x00;
0022 23BA out 0x13,R2
0024 .dbline 40
0024 ; //=======================================================================
0024 ; //ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC将立即中止正在进
0024 ; //行的转换。
0024 ; //=======================================================================
0024 ; ADCSRA = (0 << ADEN); // 关闭数/模转换器
0024 20927A00 sts 122,R2
0028 .dbline 48
0028 ; //=======================================================================
0028 ; //ACD 置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。这
0028 ; //可以减少器件工作模式及空闲模式下的功耗。改变ACD 位时,必须清零ACSR 寄存器的
0028 ; //ACIE 位来禁止模拟比较器中断。否则ACD 改变时可能会产生中断。
0028 ; //当ACIE 位被置"1” 且状态寄存器中的全局中断标志I 也被置位时,模拟比较器中断被激
0028 ; //活。否则中断被禁止。
0028 ; //=======================================================================
0028 ; ACSR = (1 << ACD) | (0 << ACIE); // 关闭模拟比较器
0028 80E8 ldi R24,128
002A 80BF out 0x30,R24
002C .dbline 52
002C ; //=======================================================================
002C ; // EEWE复位值不定
002C ; //=======================================================================
002C ; EECR = 0;
002C 2FBA out 0x1f,R2
002E .dbline -2
002E L3:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbend
0030 .dbfunc e TIMER0_Init _TIMER0_Init fV
.even
0030 _TIMER0_Init::
0030 .dbline -1
0030 .dbline 67
0030 ; }
0030 ;
0030 ;
0030 ; //////////////////////////////////////////////////////////////////////
0030 ; //TIMER0 initialize - prescale:1024
0030 ; // WGM: CTC
0030 ; // desired value: 1mSec
0030 ; // actual value: 1.019mSec (-1.9%)
0030 ; // 定时器0=2毫秒=寄存器比较值11059200*2/1024/1000-1=21.6-1=20.6=0x35
0030 ; //--------------------------------------------------------------------
0030 ; //FOC0A WGM00 COM0A1 COM0A0 WGM01 CS02 CS01 CS00
0030 ; // 0 1 1 0 1
0030 ; //////////////////////////////////////////////////////////////////////
0030 ; void TIMER0_Init(void)
0030 ; {
0030 .dbline 68
0030 ; TCCR0 = 0x00; //stop
0030 2224 clr R2
0032 24BC out 0x24,R2
0034 .dbline 69
0034 ; ASSR = 0x00; //set async mode
0034 2092B600 sts 182,R2
0038 .dbline 70
0038 ; TCNT0 = 0xF9; //set count
0038 89EF ldi R24,249
003A 86BD out 0x26,R24
003C .dbline 71
003C ; OCR0 = 0x07;
003C 87E0 ldi R24,7
003E 87BD out 0x27,R24
0040 .dbline 72
0040 ; TCCR0 = 0x0D; //start timer
0040 8DE0 ldi R24,13
0042 84BD out 0x24,R24
0044 .dbline 73
0044 ; TIMSK0 = (1 << OCIE0); // 使能T0=自动重装中断(1<<TOIE0)|
0044 82E0 ldi R24,2
0046 80936E00 sts 110,R24
004A .dbline -2
004A L4:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbend
004C .dbfunc e TIMER2_Init _TIMER2_Init fV
.even
004C _TIMER2_Init::
004C .dbline -1
004C .dbline 89
004C ; }
004C ;
004C ;
004C ; //////////////////////////////////////////////////////////////////////
004C ; //TIMER2 initialize - prescale:1024
004C ; // WGM: CTC
004C ; // desired value: 5mSec
004C ; // actual value: 5.000mSec (0.0%)
004C ; // 256-11059200*5/1024/1000/10=256-54=202=0xCA(5毫秒)
004C ; // 定时器2=10毫秒=寄存器比较值11059200*10/1024/1000-1=108-1=107=0x6B
004C ; //--------------------------------------------------------------------
004C ; //FOC2A WGM20 COM2A1 COM2A0 WGM21 CS22 CS21 CS20
004C ; // 0 1 1 1 1
004C ; //////////////////////////////////////////////////////////////////////
004C ; void TIMER2_Init(void)
004C ; {
004C .dbline 90
004C ; TCCR2 = 0x00; //stop
004C 2224 clr R2
004E 2092B000 sts 176,R2
0052 .dbline 91
0052 ; TCNT2 = 0xD9; //setup
0052 89ED ldi R24,217
0054 8093B200 sts 178,R24
0058 .dbline 92
0058 ; OCR2 = 0x27;
0058 87E2 ldi R24,39
005A 8093B300 sts 179,R24
005E .dbline 93
005E ; TCCR2 = 0x0F; //start
005E 8FE0 ldi R24,15
0060 8093B000 sts 176,R24
0064 .dbline 94
0064 ; TIMSK2 = (1 << OCIE2); // 使能T2=自动重装中断(1<<TOIE0)|
0064 82E0 ldi R24,2
0066 80937000 sts 112,R24
006A .dbline -2
006A L5:
006A .dbline 0 ; func end
006A 0895 ret
006C .dbend
006C .dbfunc e Watchdog_Init _Watchdog_Init fV
.even
006C _Watchdog_Init::
006C .dbline -1
006C .dbline 99
006C ; }
006C ;
006C ;
006C ; void Watchdog_Init(void)
006C ; {
006C .dbline 100
006C ; WDR(); // 看门狗计数清零
006C A895 wdr
006E .dbline 101
006E ; WDTCR = (1 << WDE) | (1 << WDP2) | (1 << WDP1) | (0 << WDP0); // 使能watchdog,并且,采用128K分频,典型溢出时间5V时1S
006E 8EE0 ldi R24,14
0070 80936000 sts 96,R24
0074 .dbline -2
0074 L6:
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbend
0076 .dbfunc e ExChange _ExChange fc
0076 ; K -> R10
0076 ; K_Lo -> R20
0076 ; K_Hi -> R22
0076 ; KK2 -> R12
0076 ; KK1 -> R14
0076 ; i -> R10
0076 ; num -> R16
.even
0076 _ExChange::
0076 0E940000 xcall push_xgsetF0FC
007A .dbline -1
007A .dbline 116
007A ; }
007A ;
007A ;
007A ; //////////////////////////////////////////////////////////////////////
007A ; // a = PA7(pa0)
007A ; // b = PA6(pa1)
007A ; // c = PA5(pa2)
007A ; // d = PA4(pa3)
007A ; // e = PA3(pa4)
007A ; // f = PA2(pa5)
007A ; // g = PA1(pa6);
007A ; // h = PA0(pa7)
007A ; //////////////////////////////////////////////////////////////////////
007A ; uint8 ExChange(uint8 num)
007A ; {
007A .dbline 118
007A ; uint8 i;
007A ; uint8 KK1 = num;
007A E02E mov R14,R16
007C .dbline 119
007C ; uint8 KK2 = num;
007C C02E mov R12,R16
007E .dbline 120
007E ; uint8 K_Hi = 0;
007E 6627 clr R22
0080 .dbline 121
0080 ; uint8 K_Lo = 0;
0080 4427 clr R20
0082 .dbline 127
0082 ; uint8 K;
0082 ;
0082 ; //-----------------------------------------------------------------
0082 ; //bit0-->bit7 //bit1-->bit6 //bit2-->bit5 //bit3-->bit4
0082 ; //-----------------------------------------------------------------
0082 ; for (i=0;i<4;i++)
0082 AA24 clr R10
0084 06C0 xjmp L11
0086 L8:
0086 .dbline 128
0086 ; {
0086 .dbline 129
0086 ; K_Hi <<= 1;
0086 660F lsl R22
0088 .dbline 130
0088 ; if (KK1 & 0x01)
0088 E0FE sbrs R14,0
008A 01C0 rjmp L12
008C X0:
008C .dbline 131
008C ; K_Hi |= 0x01;
008C 6160 ori R22,1
008E L12:
008E .dbline 132
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -