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

📄 m16pwm-led.s

📁 电动车控制器
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module m16pwm-led.c
	.area data(ram, con, rel)
_AdResult::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e AdResult _AdResult c
_SpeedMode::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e SpeedMode _SpeedMode c
_SpeedVal::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e SpeedVal _SpeedVal c
_M8Mode::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e M8Mode _M8Mode c
_LedTab::
	.blkb 2
	.area idata
	.byte 235,'A
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.blkb 2
	.area idata
	.byte 179,186
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.blkb 2
	.area idata
	.byte 'x,218
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.blkb 2
	.area idata
	.byte 219,168
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.blkb 2
	.area idata
	.byte 251,250
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.blkb 2
	.area idata
	.byte 249,251
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.blkb 2
	.area idata
	.byte 195,235
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.blkb 2
	.area idata
	.byte 211,209
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e LedTab _LedTab A[16:16]c
_LedBuf::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e LedBuf _LedBuf A[2:2]c
_LedDp::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e LedDp _LedDp c
_UartBufCount::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e UartBufCount _UartBufCount c
_LRledReg::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbsym e LRledReg _LRledReg c
	.area text(rom, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 44
; ////////////////////////////////////////////////////////////////////////////////
; //ICC-AVR application builder : 2006-8-1 上午 08:05:37
; // Target : M16
; // Crystal: 16.0000Mhz
; // ADc2采集转把信号
; ////////////////////////////////////////////////////////////////////////////////
; #include <iom16v.h>
; #include <macros.h>
; 
; #define fre 125
; #define uchar     unsigned char
; #define uint      unsigned int
; unsigned char  kk;
; int k;
; uchar temp_data,hour_data,minut_data,second_data,second_flag;
; uchar AdResult=0;
; uchar SpeedMode=0;//SpeedMode=0 手动模式;SpeedMode=0x55 巡航模式
; uchar SpeedVal=0;//保存当前速度参数,用于巡航模式
; uchar M8Mode=0x0;//M8控制字=Rev,Rev,Rev,RevMode,Rev,Rev,LEFT_LED,RIGHT_LED
; uchar LedTab[16]={0xEB,0x41,0xB3,0xBA,0x78,0xDA,0xDB,0xA8,0xFB,0xFA,
;                              0xF9,0xFB,0xC3,0xEB,0xD3,0xD1};
; uchar LedBuf[2]={0,0};	
; uchar LedDp=0;
; uchar UartBuf[10],UartBufCount=0;
; uchar LRledReg=0;						 
; 
; 
; ////////////////////////////////////////////////////////////////////////////////
; //function declare
; void port_init(void);
; void uart0_init(void);
; void uart0_rx_isr(void);
; void uart0_tx(uchar tdata);
; void tx_pack(void);
; void timer1_init(void);
; void timer1_comp_isr(void);
; void led_display(uchar delay);
; void HexToDec(uchar hex,uchar dec);
; void ms_delay(uint delay);
; void init_devices(void);
; void adc_init(void);   
; ////////////////////////////////////////////////////////////////////////////////
; void port_init(void)
; {
	.dbline 45
;  PORTA = 0xFF;
	ldi R24,255
	out 0x1b,R24
	.dbline 46
;  DDRA  = 0xFB; //PA2=ADC2,输入
	ldi R24,251
	out 0x1a,R24
	.dbline 47
;  PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 48
;  DDRB  = 0x1F; //数码管片选信号,低有效,常态为高,PB4=LED-dp
	ldi R24,31
	out 0x17,R24
	.dbline 49
;  PORTC = 0xFF; //m103 output only
	ldi R24,255
	out 0x15,R24
	.dbline 50
;  DDRC  = 0x00; //PC0,1=RL_in
	clr R2
	out 0x14,R2
	.dbline 51
;  PORTD = 0x9F;
	ldi R24,159
	out 0x12,R24
	.dbline 52
;  DDRD  = 0x78;
	ldi R24,120
	out 0x11,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 61
; }
; 
; 
; //TIMER1 initialisation - prescale:1
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 1Sec
; // actual value:  1.000Sec (0.0%)
; void timer1_init(void)
; {
	.dbline 62
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 63
;  TCNT1H = 0xC2; //setup
	ldi R24,194
	out 0x2d,R24
	.dbline 64
;  TCNT1L = 0xF7;
	ldi R24,247
	out 0x2c,R24
	.dbline 65
;  OCR1AH = 0x3D;
	ldi R24,61
	out 0x2b,R24
	.dbline 66
;  OCR1AL = 0x09;
	ldi R24,9
	out 0x2a,R24
	.dbline 67
;  OCR1BH = 0x3D;
	ldi R24,61
	out 0x29,R24
	.dbline 68
;  OCR1BL = 0x09;
	ldi R24,9
	out 0x28,R24
	.dbline 71
;  //OCR1CH = $OCR1CH$;
;  //OCR1CL = $OCR1CL$;
;  ICR1H  = 0x3D;
	ldi R24,61
	out 0x27,R24
	.dbline 72
;  ICR1L  = 0x09;
	ldi R24,9
	out 0x26,R24
	.dbline 73
;  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 74
;  TCCR1B = 0x05; //start Timer
	ldi R24,5
	out 0x2e,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 85
; }
; /*************************************************************************** 
;                                                   
; ****************************************************************************/ 
; //UART0 initialize
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; // char size: 8 bit
; // parity: Disabled
; void uart0_init(void)
; {
	.dbline 86
;  UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 87
;  UCSRA = 0x00;
	out 0xb,R2
	.dbline 88
;  UCSRC = BIT(URSEL) | 0x06;
	ldi R24,134
	out 0x20,R24
	.dbline 89
;  UBRRL = 0x67; //set baud rate lo
	ldi R24,103
	out 0x9,R24
	.dbline 90
;  UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 91
;  UCSRB = 0x98;
	ldi R24,152
	out 0xa,R24
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 44
	jmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;        voldata -> R20
	.even
_uart0_rx_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	xcall push_gset1
	.dbline -1
	.dbline 98
; }
; /*************************************************************************** 
;                                                  
; ****************************************************************************/ 
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; {
	.dbline 101
;   uchar voldata;
;  //uart has received a character in UDR
;     UartBuf[UartBufCount++]= UDR;
	lds R2,_UartBufCount
	clr R3
	mov R24,R2
	subi R24,255    ; addi 1
	sts _UartBufCount,R24
	ldi R24,<_UartBuf
	ldi R25,>_UartBuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	in R2,0xc
	std z+0,R2
	.dbline 102
; 	if(UartBuf[0]==0xaa)//包头
	lds R24,_UartBuf
	cpi R24,170
	brne L5
	.dbline 103
; 	{
	.dbline 105
; 	//UartBuf[3]=Rev,Rev,Rev,Rev,Rev,Rev,LEFT_LED,RIGHT_LED	
; 	     if(UartBufCount>4)
	ldi R24,4
	lds R2,_UartBufCount
	cp R24,R2
	brsh L6
	.dbline 106
; 		 {
	.dbline 107
; 		    if( ((UartBuf[1]+UartBuf[2])==0xff)&&
	lds R2,_UartBuf+2
	lds R24,_UartBuf+1
	add R24,R2
	cpi R24,255
	brne L9
	lds R2,_UartBuf+4
	lds R24,_UartBuf+3
	add R24,R2
	cpi R24,255
	brne L9
	.dbline 109
; 				((UartBuf[3]+UartBuf[4])==0xff) ) 
; 			{				
	.dbline 110
; 				LedBuf[0]=UartBuf[1];//SpeedVal
	lds R2,_UartBuf+1
	sts _LedBuf,R2
	.dbline 111
; 				voldata=UartBuf[3];
	lds R20,_UartBuf+3
	.dbline 112
; 				if(voldata<105)voldata=105; //电压范围21~29.5,每个码表示0.2V
	cpi R20,105
	brsh L17
	.dbline 112
	ldi R20,105
L17:
	.dbline 114
; 				// result=100*((tmpvol/5)-21)/(29.5-21)
; 				LedBuf[1]=40*(voldata-105)/17;//+24V
	ldi R24,40
	mul R24,R20
	movw R16,R0
	subi R16,104
	sbci R17,16
	ldi R18,17
	ldi R19,0
	xcall div16s
	sts _LedBuf+1,R16
	.dbline 116
; 				  				   					
; 		    }
L9:
	.dbline 117
; 		    UartBufCount=0;			
	clr R2
	sts _UartBufCount,R2
	.dbline 118
; 	     }	    
	.dbline 119
; 	}
	xjmp L6
L5:
	.dbline 120
	clr R2
	sts _UartBufCount,R2
L6:
	.dbline -2
L4:
	xcall pop_gset1
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	.dbline 0 ; func end
	reti
	.dbsym r voldata 20 c
	.dbend
	.dbfunc e uart0_tx _uart0_tx fV
;          tdata -> R16
	.even
_uart0_tx::
	.dbline -1
	.dbline 126
; 	else UartBufCount=0;   
; }
; /*************************************************************************** 
;                                                     
; ****************************************************************************/ 
; void uart0_tx(uchar tdata)
; {
L21:
	.dbline 127
L22:
	.dbline 127
;    while(!(UCSRA & (1<<UDRE) ));
	sbis 0xb,5
	rjmp L21
	.dbline 128
;    UDR = tdata;
	out 0xc,R16
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbsym r tdata 16 c
	.dbend
	.dbfunc e tx_pack _tx_pack fV
	.even
_tx_pack::
	.dbline -1
	.dbline 131
; }
; void tx_pack(void)
; {
	.dbline 133
;   
; 	uart0_tx(0xaa);
	ldi R16,170
	xcall _uart0_tx
	.dbline 134
; 	if(SpeedMode)
	lds R2,_SpeedMode
	tst R2
	breq L25
	.dbline 135
; 	{   //巡航模式
	.dbline 136
; 	    uart0_tx(SpeedVal);
	lds R16,_SpeedVal
	xcall _uart0_tx
	.dbline 137
; 	    uart0_tx(0xff-SpeedVal);		
	lds R2,_SpeedVal
	clr R3
	ldi R16,255
	sub R16,R2
	sbc R17,R3
	xcall _uart0_tx
	.dbline 138
; 	}	
	xjmp L26
L25:
	.dbline 140
; 	else
; 	{   //手动模式
	.dbline 141
; 	    uart0_tx(AdResult);
	lds R16,_AdResult
	xcall _uart0_tx
	.dbline 142
; 	    uart0_tx(0xff-AdResult);	
	lds R2,_AdResult
	clr R3
	ldi R16,255
	sub R16,R2
	sbc R17,R3
	xcall _uart0_tx
	.dbline 143
; 	}
L26:
	.dbline 144
; 	uart0_tx(M8Mode);
	lds R16,_M8Mode
	xcall _uart0_tx
	.dbline 145
; 	uart0_tx(0xff-M8Mode);
	lds R2,_M8Mode
	clr R3
	ldi R16,255
	sub R16,R2
	sbc R17,R3
	xcall _uart0_tx
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _int0_isr
	.area text(rom, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	st -y,R2
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 152
; }
; /*************************************************************************** 
;           用于手动模式和巡航模式的选择                                    
; ****************************************************************************/ 
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 154
;  //external interupt on INT0
;      if(SpeedMode)
	lds R2,_SpeedMode
	tst R2
	breq L28
	.dbline 155
; 	 {
	.dbline 156
; 	     SpeedMode=0;//手动模式
	clr R2
	sts _SpeedMode,R2
	.dbline 157
; 		 LedDp=0;
	sts _LedDp,R2
	.dbline 158
; 	 }	 
	xjmp L29
L28:
	.dbline 160
	.dbline 161
	ldi R24,85
	sts _SpeedMode,R24
	.dbline 162
	ldi R24,1
	sts _LedDp,R24
	.dbline 163
	lds R2,_AdResult
	sts _SpeedVal,R2
	.dbline 164
L29:
	.dbline -2
L27:
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 170
; 	 else
; 	 {
; 	     SpeedMode=0x55;//巡航模式
; 		 LedDp=0x01;
; 		 SpeedVal=AdResult;
; 	 }
; }
; /*************************************************************************** 
;                                                     A/D初始化 
; ****************************************************************************/ 
; void adc_init(void) 
; { 
	.dbline 171
;  ADCSRA =0x0; //关闭AD 
	clr R2
	out 0x6,R2
	.dbline 172
;  ADMUX = (1<<REFS0)|(1<<ADLAR)|(1<<MUX1); //选择外部参考电源 ADC2 左对齐 
	ldi R24,98
	out 0x7,R24
	.dbline 173
;  ACSR = (1<<ACD); //关闭模拟比较器 
	ldi R24,128
	out 0x8,R24
	.dbline 174
;  ADCSRA = (1<<ADEN)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);//中断允许 32分频 
	ldi R24,157
	out 0x6,R24
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 56
	jmp _Adc_isr
	.area text(rom, con, rel)
	.dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
	.dbfunc e Adc_isr _Adc_isr fV
;         ad_tmp -> R20,R21
	.even
_Adc_isr::
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R30
	in R16,0x3f
	st -y,R16
	xcall push_gset1
	.dbline -1
	.dbline 181
; } 
; /*************************************************************************** 
;                                                     A/D中断处理 
; ****************************************************************************/ 
; #pragma interrupt_handler Adc_isr:15
; void Adc_isr(void) 
; { 
	.dbline 183
;    uint ad_tmp;
;    ad_tmp=ADCH; //读取高位数据(左对齐)
	in R20,0x5
	clr R21
	.dbline 184
;    if(ad_tmp>0xd0)ad_tmp=0xd0;
	ldi R24,208

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -