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

📄 m128.s

📁 ewts avr驱动程序 角速度传感器 104为秒
💻 S
字号:
	.module m128.c
	.area lit(rom, con, rel)
_DisV::
	.byte 'V,58,0
	.dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m128.c
	.dbsym e DisV _DisV A[3:3]kc
_DisP::
	.byte 'P,58,0
	.dbsym e DisP _DisP A[3:3]kc
	.area text(rom, con, rel)
	.dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m128.c
	.dbfunc e asc_tran1 _asc_tran1 fV
;          asc_p -> y+4
;              y -> R20
;              x -> R22
	.even
_asc_tran1::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 34
; #include <iom128v.h>
; #define uchar unsigned char
; #define uint unsigned int
; #define LcdBus PORTA
; #define BIT(i) (1<<i)
; #define rs 2 //LCD端口定义
; #define rw 3
; #define en 4 
; 
; const char DisV[]={"V:"} ;//灵敏度
; const char DisP[]={"P:"} ;//精确度
;  
; void LcdIni(void) ;
; void WrOp(uchar dat) ;
; void WrDat(uchar dat) ;
; void ChkBusy(void) ;
; void DisText(uchar addr,uchar *text) ;
; void DisTextConst(uchar addr,uchar const *text) ;
; void ShowNum(uchar addr,uint num) ;   //在addr处显示数字num
; int AdcVal(uchar n) ;
; void delayms(uint n) ;
; int AdcValPro(uchar n) ;
; char BCD[6] ;   //十位二进制的显示码分别是千百十个位的显示
; int Adc[3] ;    //存放Adc转换后的值
; 
; 
; 
; 
; 
; 
; /*          传送ASCII字母到LCD            */
; /*          x:0x00~0x0f y:0~64            */	
; void asc_tran1(unsigned char x,unsigned char y,unsigned char *asc_p)
;     {
	.dbline 35
; 	 x+=4;
	subi R22,252    ; addi 4
	.dbline 37
; 	 //while((*asc_p)!=0)
; 	    {
	.dbline 38
; 		 ocmj_write(0xf1);
	ldi R16,241
	ldi R17,0
	xcall _ocmj_write
	.dbline 39
; 		 ocmj_write(x);
	mov R16,R22
	clr R17
	xcall _ocmj_write
	.dbline 40
; 		 ocmj_write(y);
	mov R16,R20
	clr R17
	xcall _ocmj_write
	.dbline 41
; 		 ocmj_write(*asc_p);
	ldd R30,y+4
	ldd R31,y+5
	ldd R16,z+0
	clr R17
	xcall _ocmj_write
	.dbline 42
; 		 asc_p++;
	ldd R24,y+4
	ldd R25,y+5
	adiw R24,1
	std y+5,R25
	std y+4,R24
	.dbline 43
; 		 if (x<0x13) 
	cpi R22,19
	brsh L2
	.dbline 44
; 		    x++;
	inc R22
	xjmp L3
L2:
	.dbline 46
; 		 else
; 		   {
	.dbline 47
; 		    x=0x04;
	ldi R22,4
	.dbline 48
; 			y+=8;		    
	subi R20,248    ; addi 8
	.dbline 49
; 		   }	
L3:
	.dbline 50
; 		}	
	.dbline -2
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l asc_p 4 pc
	.dbsym r y 20 c
	.dbsym r x 22 c
	.dbend
	.area lit(rom, con, rel)
L5:
	.byte 48,49
	.byte 50,51
	.byte 52,53
	.byte 54,55
	.byte 56,57
	.area text(rom, con, rel)
	.dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m128.c
	.dbfunc e main _main fV
;           code -> y+2
;              a -> R20,R21
;              i -> R22,R23
;              x -> R10,R11
	.even
_main::
	sbiw R28,12
	.dbline -1
	.dbline 53
; 	}
; void main(void)
; {int x=0,a=0,i=0;
	.dbline 53
	clr R10
	clr R11
	.dbline 53
	clr R20
	clr R21
	.dbline 53
	clr R22
	clr R23
	.dbline 54
; char code[]={'0','1','2','3','4','5','6','7','8','9',};
	ldi R24,<L5
	ldi R25,>L5
	movw R30,R28
	adiw R30,2
	ldi R16,10
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 55
; ocmj_init();//初始化	
	xcall _ocmj_init
	.dbline 56
; ocmj_write(0xf4);//清屏
	ldi R16,244
	ldi R17,0
	xcall _ocmj_write
	.dbline 57
; hz_tran(3,0,"数模转换");//传送内部汉字
	ldi R24,<L6
	ldi R25,>L6
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	ldi R16,3
	ldi R17,0
	xcall _hz_tran
	xjmp L8
L7:
	.dbline 59
;   while(1)
;   {
	.dbline 61
;   
;   		x=(int )AdcVal(1);
	ldi R16,1
	xcall _AdcVal
	movw R10,R16
	.dbline 62
; 		for(i=0;i<7;i++)
	clr R22
	clr R23
L10:
	.dbline 63
	.dbline 63
	ldi R18,10
	ldi R19,0
	movw R16,R10
	xcall mod16s
	movw R20,R16
	.dbline 64
	movw R24,R28
	adiw R24,2
	movw R2,R20
	add R2,R24
	adc R3,R25
	std y+1,R3
	std y+0,R2
	ldi R18,50
	ldi R16,10
	sub R16,R22
	sbc R17,R23
	xcall _asc_tran1
	.dbline 65
	ldi R18,10
	ldi R19,0
	movw R16,R10
	xcall div16s
	movw R10,R16
	.dbline 66
L11:
	.dbline 62
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 62
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	brlt L10
	.dbline 67
	clr R10
	clr R11
	.dbline 72
L8:
	.dbline 58
	xjmp L7
X0:
	.dbline -2
L4:
	adiw R28,12
	.dbline 0 ; func end
	ret
	.dbsym l code 2 A[10:10]c
	.dbsym r a 20 I
	.dbsym r i 22 I
	.dbsym r x 10 I
	.dbend
	.dbfunc e AdcVal _AdcVal fI
;              k -> R22
;              i -> R12
;            tmp -> R10,R11
;              n -> R20
	.even
_AdcVal::
	xcall push_gset4
	mov R20,R16
	.dbline -1
	.dbline 76
; 		{a=x%10;
; 		 asc_tran1(10-i,50,& code[a]);
; 		 x=x/10;
; 		}
; 		x=0;
; /* ADCSRA = 0x00; //disable adc
;  ADMUX = 0x00; //select adc input 0
;  ACSR  = 0x80;
;  ADCSRA = 0x86;*/
;   }
; }
; 
; int AdcVal(uchar n)
; {//软件滤波
	.dbline 78
;  uchar i,k ;
;  uint tmp=0 ;
	clr R10
	clr R11
	.dbline 79
;  for(i=0 ;i<20 ;i++)
	clr R12
	xjmp L18
L15:
	.dbline 80
	mov R16,R20
	xcall _AdcValPro
	movw R2,R10
	add R2,R16
	adc R3,R17
	lsr R3
	ror R2
	movw R10,R2
L16:
	.dbline 79
	inc R12
L18:
	.dbline 79
	mov R24,R12
	cpi R24,20
	brlo L15
	.dbline 81
;   tmp=(tmp+AdcValPro(n))/2 ;
;  k=tmp>Adc[n] ? (tmp-Adc[n]):(Adc[n]-tmp) ;
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_Adc
	ldi R25,>_Adc
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	cp R2,R10
	cpc R3,R11
	brsh L19
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_Adc
	ldi R25,>_Adc
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	movw R22,R10
	sub R22,R2
	sbc R23,R3
	xjmp L20
L19:
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_Adc
	ldi R25,>_Adc
	add R30,R24
	adc R31,R25
	ldd R22,z+0
	ldd R23,z+1
	sub R22,R10
	sbc R23,R11
L20:
	.dbline 82
;  Adc[n]=k>5 ? tmp:Adc[n] ;
	ldi R24,5
	cp R24,R22
	brsh L21
	movw R22,R10
	xjmp L22
L21:
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_Adc
	ldi R25,>_Adc
	add R30,R24
	adc R31,R25
	ldd R22,z+0
	ldd R23,z+1
L22:
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_Adc
	ldi R25,>_Adc
	add R30,R24
	adc R31,R25
	std z+1,R23
	std z+0,R22
	.dbline 83
;  return Adc[n] ;
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_Adc
	ldi R25,>_Adc
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	.dbline -2
L14:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r k 22 c
	.dbsym r i 12 c
	.dbsym r tmp 10 i
	.dbsym r n 20 c
	.dbend
	.dbfunc e AdcValPro _AdcValPro fI
;           dat0 -> R20
;           dat1 -> R22
;            val -> R10,R11
;              n -> R20
	.even
_AdcValPro::
	xcall push_gset3
	mov R20,R16
	.dbline -1
	.dbline 87
; }
; 
; int AdcValPro(uchar n)
; {//返回第N个ADC的值从0到7
	.dbline 90
;  uchar dat1,dat0 ;
;  int val ;
;  DDRA &=~BIT(n) ;  //设置对应的ADC口为输入
	ldi R16,1
	mov R17,R20
	xcall lsl8
	mov R2,R16
	com R2
	in R3,0x1a
	and R3,R2
	out 0x1a,R3
	.dbline 91
;  PORTA &=~BIT(n) ;
	ldi R16,1
	mov R17,R20
	xcall lsl8
	mov R2,R16
	com R2
	in R3,0x1b
	and R3,R2
	out 0x1b,R3
	.dbline 92
;  ADMUX=0x40+n ;  //选择AVCC,选择第N个ADC
	mov R24,R20
	subi R24,192    ; addi 64
	out 0x7,R24
	.dbline 93
;  ADCSRA=0xc0 ;  //允许转换ADEN,ADSC
	ldi R24,192
	out 0x6,R24
L24:
	.dbline 94
L25:
	.dbline 94
;  while(ADCSRA & BIT(ADSC)) ;   //
	sbic 0x6,6
	rjmp L24
	.dbline 95
;  dat1=ADCH ;
	in R22,0x5
	.dbline 96
;  dat0=ADCL ;
	in R20,0x4
	.dbline 97
;  val=ADCH*256+ADCL ;
	in R18,0x5
	clr R19
	ldi R16,256
	ldi R17,1
	xcall empy16s
	movw R10,R16
	in R2,0x4
	clr R3
	add R10,R2
	adc R11,R3
	.dbline 98
;  ADCSRA=0x00 ;
	clr R2
	out 0x6,R2
	.dbline 99
; return val ;
	movw R16,R10
	.dbline -2
L23:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r dat0 20 c
	.dbsym r dat1 22 c
	.dbsym r val 10 I
	.dbsym r n 20 c
	.dbend
	.dbfunc e ShowNum _ShowNum fV
;              i -> R20
;            num -> R22,R23
;           addr -> R10
	.even
_ShowNum::
	xcall push_gset3
	movw R22,R18
	mov R10,R16
	.dbline -1
	.dbline 103
; }
; 
; void ShowNum(uchar addr,uint num)   //在addr处显示数字num
; {//将num转化成五个BCD码存放在全局数组BCD[5]中
	.dbline 105
;  uchar i ;
;  for(i=5 ;i>0 ;i--)       //将NUM数据转化成ASCII码,如521会转化为00521
	ldi R20,5
	xjmp L31
L28:
	.dbline 106
	.dbline 107
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall mod16u
	movw R24,R16
	adiw R24,48
	ldi R30,<_BCD-1
	ldi R31,>_BCD-1
	mov R26,R20
	clr R27
	add R26,R30
	adc R27,R31
	st x,R24
	.dbline 108
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall div16u
	movw R22,R16
	.dbline 109
L29:
	.dbline 105
	dec R20
L31:
	.dbline 105
	clr R2
	cp R2,R20
	brlo L28
	.dbline 110
;  {
;           BCD[i-1]=(uchar)(num%10+0x30) ;     //取出最低位
;           num/=10 ;                           //去掉最低位
;     }
;     i=0 ;
	clr R20
	.dbline 112
; // while(BCD ==0x30 && i<4) BCD[i++]=' ' ;    //NUM转换成数组存放,但还没有加上小数点
;  BCD[5]='\0' ;
	sts _BCD+5,R2
	.dbline 113
;  DisText(addr,BCD+1) ;
	ldi R18,<_BCD+1
	ldi R19,>_BCD+1
	mov R16,R10
	xcall _DisText
	.dbline -2
L27:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r num 22 i
	.dbsym r addr 10 c
	.dbend
	.dbfunc e DisText _DisText fV
;              p -> R20,R21
;           addr -> R22
	.even
_DisText::
	xcall push_gset2
	movw R20,R18
	mov R22,R16
	.dbline -1
	.dbline 117
; }
; 
; void DisText(uchar addr,uchar *p)
; {
	.dbline 118
;  WrOp(addr) ;
	mov R16,R22
	xcall _WrOp
	xjmp L37
L36:
	.dbline 119
	movw R30,R20
	ld R16,Z+
	movw R20,R30
	xcall _WrDat
L37:
	.dbline 119
;  while(*p !='\0')WrDat(*(p++)) ;
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L36
	.dbline -2
L35:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pc
	.dbsym r addr 22 c
	.dbend
	.dbfunc e DisTextConst _DisTextConst fV
;              p -> R20,R21
;           addr -> R22
	.even
_DisTextConst::
	xcall push_gset2
	movw R20,R18
	mov R22,R16
	.dbline -1
	.dbline 123
; }
; 
; void DisTextConst(uchar addr,uchar const *p)
; {
	.dbline 124
;  WrOp(addr) ;
	mov R16,R22
	xcall _WrOp
	xjmp L41
L40:
	.dbline 125
	movw R2,R20
	subi R20,255  ; offset = 1
	sbci R21,255
	movw R30,R2
	lpm R16,Z
	xcall _WrDat
L41:
	.dbline 125
;  while(*p !='\0')WrDat(*(p++)) ;
	movw R30,R20
	lpm R30,Z
	tst R30
	brne L40
	.dbline -2
L39:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pkc
	.dbsym r addr 22 c
	.dbend
	.dbfunc e LcdIni _LcdIni fV
;              i -> R20,R21
	.even
_LcdIni::
	xcall push_gset1
	.dbline -1
	.dbline 129
; }
; 
; void LcdIni()
; {
	.dbline 131
;     uint i ;
;  DDRD=0XFF ;   //设置PA输出
	ldi R24,255
	out 0x11,R24
	.dbline 132
;  PORTD=0XFF ;   //全部加上上拉电阻
	out 0x12,R24
	.dbline 133
;  DDRC=0XFF ;   //设置PC为输出
	out 0x14,R24
	.dbline 134
;  PORTC=0XFF ;   //全部加上上拉电阻
	out 0x15,R24
	.dbline 135
;  WrOp(0x38) ;   
	ldi R16,56
	xcall _WrOp
	.dbline 136
;  WrOp(0x06) ;   //光标加1
	ldi R16,6
	xcall _WrOp
	.dbline 137
;  WrOp(0x0c) ;   //开显示
	ldi R16,12
	xcall _WrOp
	.dbline 138
;  WrOp(0x01) ;
	ldi R16,1
	xcall _WrOp
	.dbline 139
	clr R20
	clr R21
	xjmp L47
L44:
	.dbline 139
L45:
	.dbline 139
	subi R20,255  ; offset = 1
	sbci R21,255
L47:
	.dbline 139
;  for(i=0 ;i<5000 ;i++) ;
	cpi R20,136
	ldi R30,19
	cpc R21,R30
	brlo L44
	.dbline -2
L43:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbend
	.dbfunc e WrOp _WrOp fV
;              i -> R20
;            dat -> R20
	.even
_WrOp::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 143
; }
; 
; void WrOp(uchar dat)
; {
	.dbline 145
;  uchar i ;
;  ChkBusy() ;
	xcall _ChkBusy
	.dbline 146
;  PORTD &=~BIT(rs) ; //RS=0
	cbi 0x12,2
	.dbline 147
;  PORTD &=~BIT(rw) ; //RW=0
	cbi 0x12,3
	.dbline 148
;  PORTD &=~BIT(en) ; //EN=0
	cbi 0x12,4
	.dbline 149
;  PORTC =dat ;   //送数据
	out 0x15,R20
	.dbline 150
;  PORTD |=BIT(en) ; //EN=1
	sbi 0x12,4
	.dbline 151
	ldi R20,1
	xjmp L52
L49:
	.dbline 151
L50:
	.dbline 151
	inc R20
L52:
	.dbline 151
;  for(i=1 ;i ;i++) ;  //延时
	tst R20
	brne L49
	.dbline 152
;  PORTD &=~BIT(en) ; //EN=0
	cbi 0x12,4
	.dbline -2
L48:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r dat 20 c
	.dbend
	.dbfunc e WrDat _WrDat fV
;              i -> R20
;            dat -> R20
	.even
_WrDat::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 156
; }
; 
; void WrDat(uchar dat)
; {
	.dbline 158
;  uchar i ;
;  ChkBusy() ;
	xcall _ChkBusy
	.dbline 159
;  PORTD |=BIT(rs) ; //rs=1
	sbi 0x12,2
	.dbline 160
;  PORTD &=~BIT(rw) ; //rw=0
	cbi 0x12,3
	.dbline 161
;  PORTD &=~BIT(en) ; //en=0
	cbi 0x12,4
	.dbline 162
;  PORTC=dat ;   //送数据
	out 0x15,R20
	.dbline 163
;  PORTD |=BIT(en) ; //en=1
	sbi 0x12,4
	.dbline 164
	ldi R20,1
	xjmp L57
L54:
	.dbline 164
L55:
	.dbline 164
	inc R20
L57:
	.dbline 164
;  for(i=1 ;i ;i++) ;  //延时
	tst R20
	brne L54
	.dbline 165
;  PORTD &=~BIT(en) ; //en=0
	cbi 0x12,4
	.dbline -2
L53:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r dat 20 c
	.dbend
	.dbfunc e ChkBusy _ChkBusy fV
	.even
_ChkBusy::
	.dbline -1
	.dbline 169
; }
; 
; void ChkBusy()
; {
	.dbline 170
;  DDRC=0X00 ;   //设置为输入
	clr R2
	out 0x14,R2
	.dbline 171
;  PORTC=0X00 ;   //不设置上拉电阻
	out 0x15,R2
	.dbline 172
;  PORTD &=~BIT(rs) ; //RS=0
	cbi 0x12,2
	.dbline 173
;  PORTD |=BIT(rw) ; //RW=1
	sbi 0x12,3
	.dbline 174
;  PORTD |=BIT(en) ; //EN=1
	sbi 0x12,4
L59:
	.dbline 175
L60:
	.dbline 175
;  while(PINC & 0x80) ; //送数据
	sbic 0x13,7
	rjmp L59
	.dbline 176
;  PORTD &=~BIT(en) ; //en=0
	cbi 0x12,4
	.dbline 177
;  DDRC=0xff ;   //设置为输出
	ldi R24,255
	out 0x14,R24
	.dbline -2
L58:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delayms _delayms fV
;              i -> R20,R21
;              j -> R22
;              n -> R16,R17
	.even
_delayms::
	xcall push_gset2
	.dbline -1
	.dbline 181
; }
; 
; void delayms(uint n)
; {
	.dbline 184
;   uchar j ;
;  uint i ;
;   for(i=0 ;i<n ;i++)
	clr R20
	clr R21
	xjmp L66
L63:
	.dbline 185
	clr R22
	xjmp L70
L67:
	.dbline 185
L68:
	.dbline 185
	inc R22
L70:
	.dbline 185
	cpi R22,250
	brlo L67
L64:
	.dbline 184
	subi R20,255  ; offset = 1
	sbci R21,255
L66:
	.dbline 184
	cp R20,R16
	cpc R21,R17
	brlo L63
	.dbline -2
L62:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 c
	.dbsym r n 16 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m128.c
_Adc::
	.blkb 6
	.dbsym e Adc _Adc A[6:3]I
_BCD::
	.blkb 6
	.dbsym e BCD _BCD A[6:6]c
	.area data(ram, con, rel)
	.dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m128.c
L6:
	.blkb 9
	.area idata
	.byte 202,253,196,163,215,170,187,187,0
	.area data(ram, con, rel)
	.dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m128.c

⌨️ 快捷键说明

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