⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at90can128.s

📁 不可多得的atmel公司canbus通讯程序(at90can128)
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -