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

📄 m16.lis

📁 ewts avr驱动程序 角速度传感器 104为秒
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module m16.c
                        .area lit(rom, con, rel)
 0000           _DisV::
 0000 563A00            .byte 'V,58,0
 0003                   .dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m16.c
 0003                   .dbsym e DisV _DisV A[3:3]kc
 0003           _DisP::
 0003 503A00            .byte 'P,58,0
 0006                   .dbsym e DisP _DisP A[3:3]kc
                        .area text(rom, con, rel)
 0000                   .dbfile D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m16.c
 0000                   .dbfunc e main _main fV
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 26
 0000           ; #include <iom16v.h>
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; #define LcdBus PORTA
 0000           ; #define BIT(i) (1<<i)
 0000           ; #define rs 2 //LCD端口定义
 0000           ; #define rw 3
 0000           ; #define en 4 
 0000           ; 
 0000           ; const char DisV[]={"V:"} ;//灵敏度
 0000           ; const char DisP[]={"P:"} ;//精确度
 0000           ;  
 0000           ; void LcdIni(void) ;
 0000           ; void WrOp(uchar dat) ;
 0000           ; void WrDat(uchar dat) ;
 0000           ; void ChkBusy(void) ;
 0000           ; void DisText(uchar addr,uchar *text) ;
 0000           ; void DisTextConst(uchar addr,uchar const *text) ;
 0000           ; void ShowNum(uchar addr,uint num) ;   //在addr处显示数字num
 0000           ; int AdcVal(uchar n) ;
 0000           ; void delayms(uint n) ;
 0000           ; int AdcValPro(uchar n) ;
 0000           ; char BCD[6] ;   //十位二进制的显示码分别是千百十个位的显示
 0000           ; int Adc[3] ;    //存放Adc转换后的值
 0000           ; void main(void)
 0000           ; {
 0000                   .dbline 27
 0000           ;   LcdIni() ;
 0000 EDD0              xcall _LcdIni
 0002                   .dbline 28
 0002           ;   DisTextConst(0x80,DisV) ;
 0002 20E0              ldi R18,<_DisV
 0004 30E0              ldi R19,>_DisV
 0006 00E8              ldi R16,128
 0008 D5D0              xcall _DisTextConst
 000A                   .dbline 29
 000A           ;   DisTextConst(0xc0,DisP) ;
 000A 20E0              ldi R18,<_DisP
 000C 30E0              ldi R19,>_DisP
 000E 00EC              ldi R16,192
 0010 D1D0              xcall _DisTextConst
 0012 0AC0              xjmp L3
 0014           L2:
 0014                   .dbline 32
 0014                   .dbline 33
 0014 01E0              ldi R16,1
 0016 0AD0              xcall _AdcVal
 0018 9801              movw R18,R16
 001A 02E8              ldi R16,130
 001C 91D0              xcall _ShowNum
 001E                   .dbline 34
 001E 02E0              ldi R16,2
 0020 05D0              xcall _AdcVal
 0022 9801              movw R18,R16
 0024 02EC              ldi R16,194
 0026 8CD0              xcall _ShowNum
 0028                   .dbline 35
 0028           L3:
 0028                   .dbline 31
 0028 F5CF              xjmp L2
 002A           X0:
 002A                   .dbline -2
 002A           L1:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbend
 002C                   .dbfunc e AdcVal _AdcVal fI
 002C           ;              k -> R22
 002C           ;              i -> R12
 002C           ;            tmp -> R10,R11
 002C           ;              n -> R20
                        .even
 002C           _AdcVal::
 002C 0E940000          xcall push_gset4
 0030 402F              mov R20,R16
 0032                   .dbline -1
 0032                   .dbline 39
 0032           ; 
 0032           ;   while(1)
 0032           ;   {
 0032           ;    ShowNum(0x82,AdcVal(1)) ;
 0032           ;    ShowNum(0xC2,AdcVal(2)) ;
 0032           ;   }
 0032           ; }
 0032           ; 
 0032           ; int AdcVal(uchar n)
 0032           ; {//软件滤波
 0032                   .dbline 41
 0032           ;  uchar i,k ;
 0032           ;  uint tmp=0 ;
 0032 AA24              clr R10
 0034 BB24              clr R11
 0036                   .dbline 42
 0036           ;  for(i=0 ;i<20 ;i++)
 0036 CC24              clr R12
 0038 09C0              xjmp L9
 003A           L6:
 003A                   .dbline 43
 003A 042F              mov R16,R20
 003C 51D0              xcall _AdcValPro
 003E 1501              movw R2,R10
 0040 200E              add R2,R16
 0042 311E              adc R3,R17
 0044 3694              lsr R3
 0046 2794              ror R2
 0048 5101              movw R10,R2
 004A           L7:
 004A                   .dbline 42
 004A C394              inc R12
 004C           L9:
 004C                   .dbline 42
 004C 8C2D              mov R24,R12
 004E 8431              cpi R24,20
 0050 A0F3              brlo L6
 0052                   .dbline 44
 0052           ;   tmp=(tmp+AdcValPro(n))/2 ;
 0052           ;  k=tmp>Adc[n] ? (tmp-Adc[n]):(Adc[n]-tmp) ;
 0052 82E0              ldi R24,2
 0054 849F              mul R24,R20
 0056 F001              movw R30,R0
 0058 80E0              ldi R24,<_Adc
 005A 90E0              ldi R25,>_Adc
 005C E80F              add R30,R24
 005E F91F              adc R31,R25
 0060 2080              ldd R2,z+0
 0062 3180              ldd R3,z+1
 0064 2A14              cp R2,R10
 0066 3B04              cpc R3,R11
 0068 68F4              brsh L10
 006A 82E0              ldi R24,2
 006C 849F              mul R24,R20
 006E F001              movw R30,R0
 0070 80E0              ldi R24,<_Adc
 0072 90E0              ldi R25,>_Adc
 0074 E80F              add R30,R24
 0076 F91F              adc R31,R25
 0078 2080              ldd R2,z+0
 007A 3180              ldd R3,z+1
 007C B501              movw R22,R10
 007E 6219              sub R22,R2
 0080 7309              sbc R23,R3
 0082 0BC0              xjmp L11
 0084           L10:
 0084 82E0              ldi R24,2
 0086 849F              mul R24,R20
 0088 F001              movw R30,R0
 008A 80E0              ldi R24,<_Adc
 008C 90E0              ldi R25,>_Adc
 008E E80F              add R30,R24
 0090 F91F              adc R31,R25
 0092 6081              ldd R22,z+0
 0094 7181              ldd R23,z+1
 0096 6A19              sub R22,R10
 0098 7B09              sbc R23,R11
 009A           L11:
 009A                   .dbline 45
 009A           ;  Adc[n]=k>5 ? tmp:Adc[n] ;
 009A 85E0              ldi R24,5
 009C 8617              cp R24,R22
 009E 10F4              brsh L12
 00A0 B501              movw R22,R10
 00A2 09C0              xjmp L13
 00A4           L12:
 00A4 82E0              ldi R24,2
 00A6 849F              mul R24,R20
 00A8 F001              movw R30,R0
 00AA 80E0              ldi R24,<_Adc
 00AC 90E0              ldi R25,>_Adc
 00AE E80F              add R30,R24
 00B0 F91F              adc R31,R25
 00B2 6081              ldd R22,z+0
 00B4 7181              ldd R23,z+1
 00B6           L13:
 00B6 82E0              ldi R24,2
 00B8 849F              mul R24,R20
 00BA F001              movw R30,R0
 00BC 80E0              ldi R24,<_Adc
 00BE 90E0              ldi R25,>_Adc
 00C0 E80F              add R30,R24
 00C2 F91F              adc R31,R25
 00C4 7183              std z+1,R23
 00C6 6083              std z+0,R22
 00C8                   .dbline 46
 00C8           ;  return Adc[n] ;
 00C8 82E0              ldi R24,2
 00CA 849F              mul R24,R20
 00CC F001              movw R30,R0
 00CE 80E0              ldi R24,<_Adc
 00D0 90E0              ldi R25,>_Adc
 00D2 E80F              add R30,R24
 00D4 F91F              adc R31,R25
 00D6 0081              ldd R16,z+0
 00D8 1181              ldd R17,z+1
 00DA                   .dbline -2
 00DA           L5:
 00DA 0E940000          xcall pop_gset4
 00DE                   .dbline 0 ; func end
 00DE 0895              ret
 00E0                   .dbsym r k 22 c
 00E0                   .dbsym r i 12 c
 00E0                   .dbsym r tmp 10 i
 00E0                   .dbsym r n 20 c
 00E0                   .dbend
 00E0                   .dbfunc e AdcValPro _AdcValPro fI
 00E0           ;           dat0 -> R20
 00E0           ;           dat1 -> R22
 00E0           ;            val -> R10,R11
 00E0           ;              n -> R20
                        .even
 00E0           _AdcValPro::
 00E0 0E940000          xcall push_gset3
 00E4 402F              mov R20,R16
 00E6                   .dbline -1
 00E6                   .dbline 50
 00E6           ; }
 00E6           ; 
 00E6           ; int AdcValPro(uchar n)
 00E6           ; {//返回第N个ADC的值从0到7
 00E6                   .dbline 53
 00E6           ;  uchar dat1,dat0 ;
 00E6           ;  int val ;
 00E6           ;  DDRA &=~BIT(n) ;  //设置对应的ADC口为输入
 00E6 01E0              ldi R16,1
 00E8 142F              mov R17,R20
 00EA 0E940000          xcall lsl8
 00EE 202E              mov R2,R16
 00F0 2094              com R2
 00F2 3AB2              in R3,0x1a
 00F4 3220              and R3,R2
 00F6 3ABA              out 0x1a,R3
 00F8                   .dbline 54
 00F8           ;  PORTA &=~BIT(n) ;
 00F8 01E0              ldi R16,1
 00FA 142F              mov R17,R20
 00FC 0E940000          xcall lsl8
 0100 202E              mov R2,R16
 0102 2094              com R2
 0104 3BB2              in R3,0x1b
 0106 3220              and R3,R2
 0108 3BBA              out 0x1b,R3
 010A                   .dbline 55
 010A           ;  ADMUX=0x40+n ;  //选择AVCC,选择第N个ADC
 010A 842F              mov R24,R20
 010C 805C              subi R24,192    ; addi 64
 010E 87B9              out 0x7,R24
 0110                   .dbline 56
 0110           ;  ADCSRA=0xc0 ;  //允许转换ADEN,ADSC
 0110 80EC              ldi R24,192
 0112 86B9              out 0x6,R24
 0114           L15:
 0114                   .dbline 57
 0114           L16:
 0114                   .dbline 57
 0114           ;  while(ADCSRA & BIT(ADSC)) ;   //
 0114 3699              sbic 0x6,6
 0116 FECF              rjmp L15
 0118                   .dbline 58
 0118           ;  dat1=ADCH ;
 0118 65B1              in R22,0x5
 011A                   .dbline 59
 011A           ;  dat0=ADCL ;
 011A 44B1              in R20,0x4
 011C                   .dbline 60
 011C           ;  val=ADCH*256+ADCL ;
 011C 25B1              in R18,0x5
 011E 3327              clr R19
 0120 00E0              ldi R16,256
 0122 11E0              ldi R17,1
 0124 0E940000          xcall empy16s
 0128 5801              movw R10,R16
 012A 24B0              in R2,0x4
 012C 3324              clr R3
 012E A20C              add R10,R2
 0130 B31C              adc R11,R3
 0132                   .dbline 62
 0132           ;  
 0132           ; DDRB=0xff;
 0132 8FEF              ldi R24,255
 0134 87BB              out 0x17,R24
 0136                   .dbline 63
 0136           ; PORTB=val;       return val ;
 0136 A8BA              out 0x18,R10
 0138                   .dbline 63
 0138 8501              movw R16,R10
 013A                   .dbline -2
 013A           L14:
 013A 0E940000          xcall pop_gset3
 013E                   .dbline 0 ; func end
 013E 0895              ret
 0140                   .dbsym r dat0 20 c
 0140                   .dbsym r dat1 22 c
 0140                   .dbsym r val 10 I
 0140                   .dbsym r n 20 c
 0140                   .dbend
 0140                   .dbfunc e ShowNum _ShowNum fV
 0140           ;              i -> R20
 0140           ;            num -> R22,R23
 0140           ;           addr -> R10
                        .even
 0140           _ShowNum::
 0140 0E940000          xcall push_gset3
 0144 B901              movw R22,R18
 0146 A02E              mov R10,R16
 0148                   .dbline -1
 0148                   .dbline 67
 0148           ; }
 0148           ; 
 0148           ; void ShowNum(uchar addr,uint num)   //在addr处显示数字num
 0148           ; {//将num转化成五个BCD码存放在全局数组BCD[5]中
 0148                   .dbline 69
 0148           ;  uchar i ;
 0148           ;  for(i=5 ;i>0 ;i--)       //将NUM数据转化成ASCII码,如521会转化为00521
 0148 45E0              ldi R20,5
 014A 15C0              xjmp L22
 014C           L19:
 014C                   .dbline 70
 014C                   .dbline 71
 014C 2AE0              ldi R18,10
 014E 30E0              ldi R19,0
 0150 8B01              movw R16,R22
 0152 0E940000          xcall mod16u
 0156 C801              movw R24,R16
 0158 C096              adiw R24,48
 015A E0E0              ldi R30,<_BCD-1
 015C F0E0              ldi R31,>_BCD-1
 015E A42F              mov R26,R20
 0160 BB27              clr R27
 0162 AE0F              add R26,R30
 0164 BF1F              adc R27,R31
 0166 8C93              st x,R24
 0168                   .dbline 72
 0168 2AE0              ldi R18,10
 016A 30E0              ldi R19,0
 016C 8B01              movw R16,R22
 016E 0E940000          xcall div16u
 0172 B801              movw R22,R16
 0174                   .dbline 73
 0174           L20:
 0174                   .dbline 69
 0174 4A95              dec R20
 0176           L22:
 0176                   .dbline 69
 0176 2224              clr R2
 0178 2416              cp R2,R20
 017A 40F3              brlo L19
 017C                   .dbline 74
 017C           ;  {
 017C           ;           BCD[i-1]=(uchar)(num%10+0x30) ;     //取出最低位
 017C           ;           num/=10 ;                           //去掉最低位
 017C           ;     }
 017C           ;     i=0 ;
 017C 4427              clr R20
 017E                   .dbline 76
 017E           ; // while(BCD ==0x30 && i<4) BCD[i++]=' ' ;    //NUM转换成数组存放,但还没有加上小数点
 017E           ;  BCD[5]='\0' ;
 017E 20920B00          sts _BCD+5,R2
 0182                   .dbline 77
 0182           ;  DisText(addr,BCD+1) ;
 0182 20E0              ldi R18,<_BCD+1

⌨️ 快捷键说明

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