?? m16.lis
字號:
.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處顯示數(shù)字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轉(zhuǎn)換后的值
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) ; //設(shè)置對應的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 ; //允許轉(zhuǎn)換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處顯示數(shù)字num
0148 ; {//將num轉(zhuǎn)化成五個BCD碼存放在全局數(shù)組BCD[5]中
0148 .dbline 69
0148 ; uchar i ;
0148 ; for(i=5 ;i>0 ;i--) //將NUM數(shù)據(jù)轉(zhuǎn)化成ASCII碼,如521會轉(zhuǎn)化為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轉(zhuǎn)換成數(shù)組存放,但還沒有加上小數(shù)點
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 + -