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

📄 lesson10.s

📁 用TMS320F2808芯片
💻 S
字号:
	.module lesson10.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
	.area vector(rom, abs)
	.org 36
	rjmp _uart_rx
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
	.dbsym e flag _flag c
_Data_Len::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
	.dbsym e Data_Len _Data_Len c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;             ms -> R16,R17
	.even
_delay::
	rcall push_xgsetF000
	.dbline -1
	.dbline 16
; #include <iom88v.h>
; #include <macros.h>
; #define  uchar unsigned char
; #define  uint  unsigned int
; 
; //晶振 7.3728MHZ
; #define  mclk   7372800	   
; // #pragma interrupt_handler uart_rx:12
; #pragma interrupt_handler uart_rx:iv_USART0_RXC
; uchar rdata,flag=0;
; uchar Rec_Data[27];
; uchar Data_Len =0,i;
; uchar adcL,adcH;
; uint  adresult;
; void delay(uint ms)	//延时函数
; {
	.dbline 18
;         uint i,j;
; 	for(i=0;i<ms;i++)
	clr R20
	clr R21
	rjmp L5
L2:
	.dbline 19
; 	   {
	.dbline 20
; 	   for(j=0;j<1100;j++);
	clr R22
	clr R23
	rjmp L9
L6:
	.dbline 20
L7:
	.dbline 20
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 20
	cpi R22,76
	ldi R30,4
	cpc R23,R30
	brlo L6
X0:
	.dbline 21
;        }
L3:
	.dbline 18
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 18
	cp R20,R16
	cpc R21,R17
	brlo L2
X1:
	.dbline -2
L1:
	.dbline 0 ; func end
	rjmp pop_xgsetF000
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e uart_init _uart_init fV
;           baud -> R10,R11
	.even
_uart_init::
	rcall push_xgsetF00C
	movw R10,R16
	.dbline -1
	.dbline 27
; } 
; 
; //0D 0A 3E 0D 0A 52 65 61 64 20 46 77 64 20 33 3E 0D 0A 20 39 33 31 36 37 3F 20 20
; //0D 0A 3E 0D 0A 52 65 61 64 20 46 6C 6F 77 20 31 3E 0D 0A 20 35 34 2E 39 32 30 3F 20 20
; void uart_init(uint baud)	//串口初始化
; {
	.dbline 29
; 
;     UCSR0B=0x00; 
	clr R2
	sts 193,R2
	.dbline 30
;    UCSR0A=0x00; 		    //控制寄存器清零
	sts 192,R2
	.dbline 31
;    UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);   
	ldi R24,6
	sts 194,R24
	.dbline 34
;                                                         //选择UCSRC,异步模式,禁止                        
;                                                      //   校验,1位停止位,8位数据位
;    baud=mclk/16/baud-1	;   //波特率最大为65K
	movw R2,R10
	clr R4
	clr R5
	ldi R20,0
	ldi R21,8
	ldi R22,7
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	rcall div32s
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R2,R16
	movw R4,R18
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R10,R2
	.dbline 35
;    UBRR0L=baud; 					     	  
	sts 196,R10
	.dbline 36
;    UBRR0H=baud>>8; 		   //设置波特率
	mov R2,R3
	clr R3
	sts 197,R2
	.dbline 37
;    UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0); 
	ldi R24,152
	sts 193,R24
	.dbline 39
;                                                        //接收、发送使能,接收中断使能
;    SREG=BIT(7);	                //全局中断开放
	ldi R24,128
	out 0x3f,R24
	.dbline 40
;    DDRD|=0X02;	                //配置TX为输出(很重要)
	sbi 0xa,1
	.dbline -2
L10:
	.dbline 0 ; func end
	rjmp pop_xgsetF00C
	.dbsym r baud 10 i
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 45
; 
; }
; 
; void adc_init(void)
; {
	.dbline 46
;  ADCSRA = 0x00; //disable adc
	clr R2
	sts 122,R2
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_sendB _uart_sendB fV
;           data -> R16
	.even
_uart_sendB::
	.dbline -1
	.dbline 50
;  //ADMUX = 0x46;  //选择AVCC为参考,采集电压右对齐,1110 1.1V
; }
; void uart_sendB(uchar data)	//发送字符
; {
L13:
	.dbline 51
;    while(!(UCSR0A&(BIT(UDRE0)))) ;
L14:
	.dbline 51
	lds R2,192
	sbrs R2,5
	rjmp L13
X2:
	.dbline 52
;    UDR0=data;
	sts 198,R16
L16:
	.dbline 53
;    while(!(UCSR0A&(BIT(TXC0))));
L17:
	.dbline 53
	lds R2,192
	sbrs R2,6
	rjmp L16
X3:
	.dbline 54
;    UCSR0A|=BIT(TXC0);
	lds R24,192
	ori R24,64
	sts 192,R24
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e uart_rx _uart_rx fV
	.even
_uart_rx::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 57
; }
; void uart_rx()			//接收字符
; {
	.dbline 58
;     UCSR0B&=~BIT(RXCIE0);
	lds R24,193
	andi R24,127
	sts 193,R24
	.dbline 59
; 	rdata=UDR0;
	lds R2,198
	sts _rdata,R2
	.dbline 61
; 	//flag=1;
; 	Data_Len++;
	lds R24,_Data_Len
	subi R24,255    ; addi 1
	sts _Data_Len,R24
	.dbline 62
; 	UCSR0B|=BIT(RXCIE0);
	lds R24,193
	ori R24,128
	sts 193,R24
	.dbline -2
L19:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 65
; }
; void main()
; {
	.dbline 68
;     //uchar i=4;
; 	//uchar j='a';
;     uart_init(4800);	//初始化串口
	ldi R16,4800
	ldi R17,18
	rcall _uart_init
	.dbline 70
; 
; 	adc_init();			//初始化ADC
	rcall _adc_init
	rjmp L22
L21:
	.dbline 73
; 	
; 	while(1)
; 	{
	.dbline 75
; 	
; 	   if(rdata==0xaa)	//开始ADC转换标志
	lds R24,_rdata
	cpi R24,170
	breq X10
	rjmp L24
X10:
X4:
	.dbline 76
; 	   {
	.dbline 77
; 	   	  rdata=0x00;
	clr R2
	sts _rdata,R2
	.dbline 79
; 		  //****************************************************
; 		  ADMUX = 0x46;  //选择AVCC为参考,采集电压右对齐 6通道
	ldi R24,70
	sts 124,R24
	.dbline 81
; 		  //delay(100);
; 		  ADCSRA =0x84; //0b11000100	 8分频
	ldi R24,132
	sts 122,R24
	.dbline 82
; 		  ADCSRA |=BIT(ADSC);			 //开始转换
	lds R24,122
	ori R24,64
	sts 122,R24
L26:
	.dbline 84
; 		  
; 		  while(!(ADCSRA&(1<<ADIF)));
L27:
	.dbline 84
	lds R2,122
	sbrs R2,4
	rjmp L26
X5:
	.dbline 87
; 		  
; 		  //while(ADCSRA&(1<<ADSC)); //为1等待
; 		  adcL=ADCL;
	lds R2,120
	sts _adcL,R2
	.dbline 88
; 		  adcH=ADCH;
	lds R2,121
	sts _adcH,R2
	.dbline 89
; 		  ADCSRA |=BIT(1<<ADIF);
	ldi R17,16
	ldi R16,1
	rcall lsl8
	lds R2,122
	or R2,R16
	sts 122,R2
	.dbline 93
; 		  //delay(100);
; 		  
; 		  
; 		  ADCSRA |=BIT(ADSC);			 //开始转换第二次,第一次的不准确
	lds R24,122
	ori R24,64
	sts 122,R24
L29:
	.dbline 95
; 		  
; 		  while(!(ADCSRA&(1<<ADIF)));
L30:
	.dbline 95
	lds R2,122
	sbrs R2,4
	rjmp L29
X6:
	.dbline 98
; 		  
; 		  //while(ADCSRA&(1<<ADSC)); //为1等待
; 		  adcL=ADCL;
	lds R2,120
	sts _adcL,R2
	.dbline 99
; 		  adcH=ADCH;
	lds R2,121
	sts _adcH,R2
	.dbline 100
; 		  ADCSRA |=BIT(1<<ADIF);
	ldi R17,16
	ldi R16,1
	rcall lsl8
	lds R2,122
	or R2,R16
	sts 122,R2
	.dbline 102
; 		  
; 		  uart_sendB(adcH);
	lds R16,_adcH
	rcall _uart_sendB
	.dbline 103
; 		  uart_sendB(adcL);
	lds R16,_adcL
	rcall _uart_sendB
	.dbline 106
; 		  
; 		  //****************************************************
; 		  ADMUX = 0x47;  //选择AVCC为参考,采集电压右对齐 7通道
	ldi R24,71
	sts 124,R24
	.dbline 108
; 		  //delay(100);
; 		  ADCSRA =0x84; //0b11000100	 8分频
	ldi R24,132
	sts 122,R24
	.dbline 109
; 		  ADCSRA |=BIT(ADSC);			 //开始转换
	lds R24,122
	ori R24,64
	sts 122,R24
L32:
	.dbline 111
; 		  
; 		  while(!(ADCSRA&(1<<ADIF)));
L33:
	.dbline 111
	lds R2,122
	sbrs R2,4
	rjmp L32
X7:
	.dbline 114
; 		  
; 		  //while(ADCSRA&(1<<ADSC)); //为1等待
; 		  adcL=ADCL;
	lds R2,120
	sts _adcL,R2
	.dbline 115
; 		  adcH=ADCH;
	lds R2,121
	sts _adcH,R2
	.dbline 116
; 		  ADCSRA |=BIT(1<<ADIF);
	ldi R17,16
	ldi R16,1
	rcall lsl8
	lds R2,122
	or R2,R16
	sts 122,R2
	.dbline 120
; 		  
; 		  //delay(100);
; 		  
; 		  ADCSRA |=BIT(ADSC);			 //开始转换
	lds R24,122
	ori R24,64
	sts 122,R24
L35:
	.dbline 122
; 		  
; 		  while(!(ADCSRA&(1<<ADIF)));
L36:
	.dbline 122
	lds R2,122
	sbrs R2,4
	rjmp L35
X8:
	.dbline 125
; 		  
; 		  //while(ADCSRA&(1<<ADSC)); //为1等待
; 		  adcL=ADCL;
	lds R2,120
	sts _adcL,R2
	.dbline 126
; 		  adcH=ADCH;
	lds R2,121
	sts _adcH,R2
	.dbline 127
; 		  ADCSRA |=BIT(1<<ADIF);
	ldi R17,16
	ldi R16,1
	rcall lsl8
	lds R2,122
	or R2,R16
	sts 122,R2
	.dbline 130
; 		  //delay(100);
; 
; 		  uart_sendB(adcH);
	lds R16,_adcH
	rcall _uart_sendB
	.dbline 131
; 		  uart_sendB(adcL);
	lds R16,_adcL
	rcall _uart_sendB
	.dbline 133
; 		 
; 	   }
L24:
	.dbline 135
; 	   
; 	}
L22:
	.dbline 72
	rjmp L21
X9:
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
_adresult::
	.blkb 2
	.dbsym e adresult _adresult i
_adcH::
	.blkb 1
	.dbsym e adcH _adcH c
_adcL::
	.blkb 1
	.dbsym e adcL _adcL c
_i::
	.blkb 1
	.dbsym e i _i c
_Rec_Data::
	.blkb 27
	.dbsym e Rec_Data _Rec_Data A[27:27]c
_rdata::
	.blkb 1
	.dbsym e rdata _rdata c
; 	
; }

⌨️ 快捷键说明

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