📄 at90can128.s
字号:
.module AT90CAN128.C
.area text(rom, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
_CS::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbsym e CS _CS c
_CHA::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbsym e CHA _CHA c
_LED::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbsym e LED _LED A[5:5]c
_send_mark::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbsym e send_mark _send_mark c
_display_mark::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbsym e display_mark _display_mark c
_send_time::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbsym e send_time _send_time c
_display_time::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbsym e display_time _display_time c
.area text(rom, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
.dbfunc e PORT_Init _PORT_Init fV
.even
_PORT_Init::
.dbline -1
.dbline 15
; #define _MAIN_H
; #include "AT90CAN128.H"
;
; uint8 CS = 0;
; uint8 volatile CHA = 0;
;
; BOOL LED[5] = {FALSE,FALSE,FALSE,FALSE,FALSE};
; BOOL volatile send_mark = TRUE;
; BOOL volatile display_mark = TRUE;
; uint8 send_time = 0;
; uint8 display_time = 0;
;
;
; void PORT_Init(void)
; {
.dbline 16
; PORTA = 0xFF;
ldi R24,255
out 0x2,R24
.dbline 17
; DDRA = 0xFF; //数码管
out 0x1,R24
.dbline 19
;
; PORTB = 0xFF;
out 0x5,R24
.dbline 20
; DDRB = 0x00;
clr R2
out 0x4,R2
.dbline 22
;
; PORTC = 0xFF; //m103 output only
out 0x8,R24
.dbline 23
; DDRC = 0xFF;
out 0x7,R24
.dbline 25
;
; PORTD = 0xFF;//PD4
out 0xb,R24
.dbline 26
; DDRD = 0x10;
ldi R24,16
out 0xa,R24
.dbline 28
;
; PORTE = 0xFF;
ldi R24,255
out 0xe,R24
.dbline 29
; DDRE = 0x00;
out 0xd,R2
.dbline 31
;
; PORTF = 0xFF;
out 0x11,R24
.dbline 32
; DDRF = 0x00;
out 0x10,R2
.dbline 34
;
; PORTG = 0xFF;
out 0x14,R24
.dbline 35
; DDRG = 0x00;
out 0x13,R2
.dbline 40
; //=======================================================================
; //ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC将立即中止正在进
; //行的转换。
; //=======================================================================
; ADCSRA = (0 << ADEN); // 关闭数/模转换器
sts 122,R2
.dbline 48
; //=======================================================================
; //ACD 置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。这
; //可以减少器件工作模式及空闲模式下的功耗。改变ACD 位时,必须清零ACSR 寄存器的
; //ACIE 位来禁止模拟比较器中断。否则ACD 改变时可能会产生中断。
; //当ACIE 位被置"1” 且状态寄存器中的全局中断标志I 也被置位时,模拟比较器中断被激
; //活。否则中断被禁止。
; //=======================================================================
; ACSR = (1 << ACD) | (0 << ACIE); // 关闭模拟比较器
ldi R24,128
out 0x30,R24
.dbline 52
; //=======================================================================
; // EEWE复位值不定
; //=======================================================================
; EECR = 0;
out 0x1f,R2
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TIMER0_Init _TIMER0_Init fV
.even
_TIMER0_Init::
.dbline -1
.dbline 67
; }
;
;
; //////////////////////////////////////////////////////////////////////
; //TIMER0 initialize - prescale:1024
; // WGM: CTC
; // desired value: 1mSec
; // actual value: 1.019mSec (-1.9%)
; // 定时器0=2毫秒=寄存器比较值11059200*2/1024/1000-1=21.6-1=20.6=0x35
; //--------------------------------------------------------------------
; //FOC0A WGM00 COM0A1 COM0A0 WGM01 CS02 CS01 CS00
; // 0 1 1 0 1
; //////////////////////////////////////////////////////////////////////
; void TIMER0_Init(void)
; {
.dbline 68
; TCCR0 = 0x00; //stop
clr R2
out 0x24,R2
.dbline 69
; ASSR = 0x00; //set async mode
sts 182,R2
.dbline 70
; TCNT0 = 0xF9; //set count
ldi R24,249
out 0x26,R24
.dbline 71
; OCR0 = 0x07;
ldi R24,7
out 0x27,R24
.dbline 72
; TCCR0 = 0x0D; //start timer
ldi R24,13
out 0x24,R24
.dbline 73
; TIMSK0 = (1 << OCIE0); // 使能T0=自动重装中断(1<<TOIE0)|
ldi R24,2
sts 110,R24
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TIMER2_Init _TIMER2_Init fV
.even
_TIMER2_Init::
.dbline -1
.dbline 89
; }
;
;
; //////////////////////////////////////////////////////////////////////
; //TIMER2 initialize - prescale:1024
; // WGM: CTC
; // desired value: 5mSec
; // actual value: 5.000mSec (0.0%)
; // 256-11059200*5/1024/1000/10=256-54=202=0xCA(5毫秒)
; // 定时器2=10毫秒=寄存器比较值11059200*10/1024/1000-1=108-1=107=0x6B
; //--------------------------------------------------------------------
; //FOC2A WGM20 COM2A1 COM2A0 WGM21 CS22 CS21 CS20
; // 0 1 1 1 1
; //////////////////////////////////////////////////////////////////////
; void TIMER2_Init(void)
; {
.dbline 90
; TCCR2 = 0x00; //stop
clr R2
sts 176,R2
.dbline 91
; TCNT2 = 0xD9; //setup
ldi R24,217
sts 178,R24
.dbline 92
; OCR2 = 0x27;
ldi R24,39
sts 179,R24
.dbline 93
; TCCR2 = 0x0F; //start
ldi R24,15
sts 176,R24
.dbline 94
; TIMSK2 = (1 << OCIE2); // 使能T2=自动重装中断(1<<TOIE0)|
ldi R24,2
sts 112,R24
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Watchdog_Init _Watchdog_Init fV
.even
_Watchdog_Init::
.dbline -1
.dbline 99
; }
;
;
; void Watchdog_Init(void)
; {
.dbline 100
; WDR(); // 看门狗计数清零
wdr
.dbline 101
; WDTCR = (1 << WDE) | (1 << WDP2) | (1 << WDP1) | (0 << WDP0); // 使能watchdog,并且,采用128K分频,典型溢出时间5V时1S
ldi R24,14
sts 96,R24
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ExChange _ExChange fc
; K -> R10
; K_Lo -> R20
; K_Hi -> R22
; KK2 -> R12
; KK1 -> R14
; i -> R10
; num -> R16
.even
_ExChange::
xcall push_xgsetF0FC
.dbline -1
.dbline 116
; }
;
;
; //////////////////////////////////////////////////////////////////////
; // a = PA7(pa0)
; // b = PA6(pa1)
; // c = PA5(pa2)
; // d = PA4(pa3)
; // e = PA3(pa4)
; // f = PA2(pa5)
; // g = PA1(pa6);
; // h = PA0(pa7)
; //////////////////////////////////////////////////////////////////////
; uint8 ExChange(uint8 num)
; {
.dbline 118
; uint8 i;
; uint8 KK1 = num;
mov R14,R16
.dbline 119
; uint8 KK2 = num;
mov R12,R16
.dbline 120
; uint8 K_Hi = 0;
clr R22
.dbline 121
; uint8 K_Lo = 0;
clr R20
.dbline 127
; uint8 K;
;
; //-----------------------------------------------------------------
; //bit0-->bit7 //bit1-->bit6 //bit2-->bit5 //bit3-->bit4
; //-----------------------------------------------------------------
; for (i=0;i<4;i++)
clr R10
xjmp L11
L8:
.dbline 128
; {
.dbline 129
; K_Hi <<= 1;
lsl R22
.dbline 130
; if (KK1 & 0x01)
sbrs R14,0
rjmp L12
X0:
.dbline 131
; K_Hi |= 0x01;
ori R22,1
L12:
.dbline 132
; KK1 >>= 1;
lsr R14
.dbline 133
; }
L9:
.dbline 127
inc R10
L11:
.dbline 127
mov R24,R10
cpi R24,4
brlo L8
X1:
.dbline 137
; //-----------------------------------------------------------------
; //bit7-->bit0 //bit6-->bit1 //bit5-->bit2 //bit4-->bit3
; //-----------------------------------------------------------------
; for (i=0;i<4;i++)
clr R10
xjmp L17
L14:
.dbline 138
; {
.dbline 139
; K_Lo <<= 1;
lsl R20
.dbline 140
; if (KK2 & 0x10)
sbrs R12,4
rjmp L18
X2:
.dbline 141
; K_Lo |= 0x01;
ori R20,1
L18:
.dbline 142
; KK2 >>= 1;
lsr R12
.dbline 143
; }
L15:
.dbline 137
inc R10
L17:
.dbline 137
mov R24,R10
cpi R24,4
brlo L14
X3:
.dbline 144
; K = ((K_Hi << 4) | K_Lo);
mov R24,R22
andi R24,#0x0F
swap R24
mov R10,R24
or R10,R20
.dbline 145
; return (K);
mov R16,R10
.dbline -2
L7:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r K 10 c
.dbsym r K_Lo 20 c
.dbsym r K_Hi 22 c
.dbsym r KK2 12 c
.dbsym r KK1 14 c
.dbsym r i 10 c
.dbsym r num 16 c
.dbend
.dbfunc e DISPLAY_LED _DISPLAY_LED fV
.even
_DISPLAY_LED::
.dbline -1
.dbline 150
; }
;
;
; void DISPLAY_LED(void)
; {
.dbline 151
; if (LED[0])
lds R2,_LED
tst R2
breq L21
X4:
.dbline 152
; LED1_ON();
cbi 0x8,4
xjmp L22
L21:
.dbline 154
; else
; LED1_OFF();
sbi 0x8,4
L22:
.dbline 156
;
; if (LED[1])
lds R2,_LED+1
tst R2
breq L23
X5:
.dbline 157
; LED2_ON();
cbi 0x8,3
xjmp L24
L23:
.dbline 159
; else
; LED2_OFF();
sbi 0x8,3
L24:
.dbline 161
;
; if (LED[2])
lds R2,_LED+2
tst R2
breq L26
X6:
.dbline 162
; LED3_ON();
cbi 0x8,2
xjmp L27
L26:
.dbline 164
; else
; LED3_OFF();
sbi 0x8,2
L27:
.dbline 166
;
; if (LED[3])
lds R2,_LED+3
tst R2
breq L29
X7:
.dbline 167
; LED4_ON();
cbi 0x8,1
xjmp L30
L29:
.dbline 169
; else
; LED4_OFF();
sbi 0x8,1
L30:
.dbline 171
;
; if (LED[4])
lds R2,_LED+4
tst R2
breq L32
X8:
.dbline 172
; LED5_ON();
cbi 0x8,0
xjmp L33
L32:
.dbline 174
; else
; LED5_OFF();
sbi 0x8,0
L33:
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 64
jmp _TIMER0_COMP_ISR
.area text(rom, con, rel)
.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -