📄 ad.lis
字号:
.module ad.c
.area text(rom, con, rel)
0000 .dbfile D:\AVR\AD/HD7279.C
0000 .dbfunc e init_7279 _init_7279 fV
0000 ; tmr -> R20,R21
.even
0000 _init_7279::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 170
0004 ; //ICC-AVR application builder : 2005-6-21 15:56:32
0004 ; // Target : M16
0004 ; // Crystal: 8.0000Mhz
0004 ;
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #include "HD7279.C"
0004 ; #include "TIMEDELAY.C"
0004 ; unsigned int adc_rel;
0004 ; unsigned int adc_old;
0004 ; unsigned char ad_mux;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ; void port_init(void)
0004 ; {
0004 ; PORTA = 0xFF;
0004 ; DDRA = 0x00;
0004 ; PORTB = 0xFF;
0004 ; DDRB = 0x00;
0004 ; PORTC = 0xFF; //m103 output only
0004 ; DDRC = 0x1E;
0004 ; PORTD = 0xFF;
0004 ; DDRD = 0x00;
0004 ; }
0004 ;
0004 ; //ADC initialisation
0004 ; // Conversion time: 104uS
0004 ; void adc_init(void)
0004 ; {
0004 ; PORTA = 0X00;
0004 ; PORTA = 0Xff;
0004 ;
0004 ; ADCSR = 0x00; //disable adc
0004 ; ADMUX = ( 0<< REFS0 )|( 0<< REFS1 )|ad_mux & 0x0f; //select adc input 0 //00000000
0004 ; ACSR = ( 1<< ACD);
0004 ; ADCSR = (1 << ADEN ) |( 1 << ADSC ) |( 1 << ADIE ) | BIT( ADPS2)| BIT( ADPS1);
0004 ; }
0004 ;
0004 ; void bubble_sort(int *x, int n)
0004 ; {
0004 ; int j, k, h, t;
0004 ;
0004 ; for (h=n-1; h>0; h=k) /*循环到没有比较范围*/
0004 ; {
0004 ; for (j=0, k=0; j<h; j++) /*每次预置k=0,循环扫描后更新k*/
0004 ; {
0004 ; if (*(x+j) > *(x+j+1)) /*大的放在后面,小的放到前面*/
0004 ; {
0004 ; t = *(x+j);
0004 ; *(x+j) = *(x+j+1);
0004 ; *(x+j+1) = t; /*完成交换*/
0004 ; k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/
0004 ; }
0004 ; }
0004 ; }
0004 ; }
0004 ;
0004 ;
0004 ; int adc()
0004 ; {
0004 ; int result[12];
0004 ; long sum = 0;
0004 ; char i;
0004 ; for( i = 0; i < 12; i ++ ) //中值数字滤波
0004 ; {
0004 ; delay_ms( 1 );
0004 ; ADCSRA |= BIT( ADSC );
0004 ; while( !( ADCSRA & BIT( ADIF ) ) );
0004 ; ADCSRA &= ~BIT( ADIF );
0004 ; result[ i ] = ADC;
0004 ; }
0004 ; bubble_sort( result, 12 );
0004 ; for( i = 1; i < 11; i ++ )
0004 ; sum += result[ i ];
0004 ; return (int)( sum / 10 );
0004 ; }
0004 ;
0004 ;
0004 ; #pragma interrupt_handler adc_isr:15
0004 ; void adc_isr(void)
0004 ; {
0004 ;
0004 ; //conversion complete, read value (int) using...
0004 ; CLI();
0004 ; ADMUX = ( 0<< REFS0 )|( 0 << REFS1 )|ad_mux & 0x0f;
0004 ; //adc_rel = ADC & 0X03FF;
0004 ; adc_rel=adc();
0004 ;
0004 ;
0004 ; //if( adc_old != adc_rel)
0004 ; if (ad_mux==0)
0004 ; {
0004 ; dis_data(0,3,adc_rel);
0004 ; //write7279(DECODE0+4,0x80+ad_mux);
0004 ; adc_old = adc_rel;
0004 ; }
0004 ; //else dis_data( 0,4, adc_rel);
0004 ; else
0004 ; {
0004 ; dis_data(4,7,adc_rel);
0004 ; //write7279(DECODE0+4,0x80+ad_mux);
0004 ; adc_old = adc_rel;
0004 ; }
0004 ;
0004 ;
0004 ; if(ad_mux<1)
0004 ; ad_mux++;
0004 ; else
0004 ; ad_mux=0;
0004 ;
0004 ;
0004 ; ADCSR |= BIT( ADSC);
0004 ; SEI();
0004 ;
0004 ; }
0004 ;
0004 ;
0004 ;
0004 ; //call this routine to initialise all peripherals
0004 ; void init_devices(void)
0004 ; {
0004 ; //stop errant interrupts until set up
0004 ; CLI(); //disable all interrupts
0004 ; port_init();
0004 ; adc_init();
0004 ;
0004 ; MCUCR = 0x00;
0004 ; GICR = 0x00;
0004 ; TIMSK = 0x00; //timer interrupt sources
0004 ; SEI(); //re-enable interrupts
0004 ; //all peripherals are now initialised
0004 ; }
0004 ;
0004 ; //
0004 ; void main(void)
0004 ; {
0004 ; int i;
0004 ; ad_mux = 0x00;
0004 ; adc_old = 0x0000;
0004 ; init_devices();
0004 ; init_7279();
0004 ; //insert your functional code here...
0004 ;
0004 ; ADCSR |= BIT( ADSC );
0004 ; while(1)
0004 ; {
0004 ; // dis_data(0,3,1234);
0004 ; // dis_data(4,7,5678);
0004 ; }
0004 ;
0004 ; }
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 .dbline 173
0004 ;
0004 ;
0004 ;
0004 A19A sbi 0x14,1
0006 .dbline 174
0006 ;
0006 A29A sbi 0x14,2
0008 .dbline 175
0008 ;
0008 A39A sbi 0x14,3
000A .dbline 176
000A ;
000A A498 cbi 0x14,4
000C .dbline 178
000C ;
000C ;
000C A99A sbi 0x15,1
000E .dbline 179
000E ;
000E AA9A sbi 0x15,2
0010 .dbline 180
0010 ;
0010 AB9A sbi 0x15,3
0012 .dbline 181
0012 ;
0012 AC9A sbi 0x15,4
0014 .dbline 183
0014 4427 clr R20
0016 5527 clr R21
0018 02C0 xjmp L5
001A L2:
001A .dbline 183
001A L3:
001A .dbline 183
001A 4F5F subi R20,255 ; offset = 1
001C 5F4F sbci R21,255
001E L5:
001E .dbline 183
001E ;
001E ;
001E 4030 cpi R20,0
0020 E0EF ldi R30,240
0022 5E07 cpc R21,R30
0024 D0F3 brlo L2
0026 .dbline 185
0026 ;
0026 ;
0026 04EA ldi R16,164
0028 48D0 xcall _send_byte
002A .dbline -2
002A .dbline 187
002A ;
002A ;
002A L1:
002A 0E940000 xcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r tmr 20 i
0030 .dbend
0030 .dbfunc e write7279 _write7279 fV
0030 ; dta -> R20
0030 ; cmd -> R22
.even
0030 _write7279::
0030 0E940000 xcall push_gset2
0034 422F mov R20,R18
0036 602F mov R22,R16
0038 .dbline -1
0038 .dbline 197
0038 ;
0038 ;
0038 ;
0038 ;
0038 ;
0038 ;
0038 ;
0038 ;
0038 ;
0038 ;
0038 .dbline 198
0038 ;
0038 062F mov R16,R22
003A 3FD0 xcall _send_byte
003C .dbline 199
003C ;
003C 042F mov R16,R20
003E 3DD0 xcall _send_byte
0040 .dbline -2
0040 .dbline 200
0040 ;
0040 L6:
0040 0E940000 xcall pop_gset2
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbsym r dta 20 c
0046 .dbsym r cmd 22 c
0046 .dbend
0046 .dbfunc e read7279 _read7279 fc
.even
0046 _read7279::
0046 .dbline -1
0046 .dbline 210
0046 ;
0046 ;
0046 ;
0046 ;
0046 ;
0046 ;
0046 ;
0046 ;
0046 ;
0046 ;
0046 .dbline 211
0046 ;
0046 05E1 ldi R16,21
0048 38D0 xcall _send_byte
004A .dbline 212
004A ;
004A .dbline -2
004A L7:
004A .dbline 0 ; func end
004A 50C0 xjmp _receive_byte
004C .dbend
004C .dbfunc e get_key7279 _get_key7279 fc
004C ; KeyNum -> R20
.even
004C _get_key7279::
004C 0E940000 xcall push_gset1
0050 .dbline -1
0050 .dbline 224
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 L9:
0050 .dbline 226
0050 L10:
0050 .dbline 226
0050 ;
0050 ;
0050 9C99 sbic 0x13,4
0052 FECF rjmp L9
0054 .dbline 228
0054 ;
0054 ;
0054 01E0 ldi R16,1
0056 10E0 ldi R17,0
0058 18D0 xcall _delay10ms
005A .dbline 230
005A ;
005A ;
005A F5DF xcall _read7279
005C .dbline 232
005C ;
005C ;
005C 5ED0 xcall _num_change7279
005E 402F mov R20,R16
0060 .dbline 234
0060 ;
0060 ;
0060 01E0 ldi R16,1
0062 10E0 ldi R17,0
0064 12D0 xcall _delay10ms
0066 L12:
0066 .dbline 236
0066 L13:
0066 .dbline 236
0066 ;
0066 ;
0066 9C9B sbis 0x13,4
0068 FECF rjmp L12
006A .dbline 238
006A ;
006A ;
006A 042F mov R16,R20
006C .dbline -2
006C L8:
006C 0E940000 xcall pop_gset1
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r KeyNum 20 c
0072 .dbend
0072 .dbfunc e long_delay _long_delay fV
0072 ; i -> R16
.even
0072 _long_delay::
0072 .dbline -1
0072 .dbline 245
0072 ;
0072 ;
0072 ;
0072 ;
0072 ;
0072 ;
0072 ;
0072 .dbline 247
0072 0027 clr R16
0074 01C0 xjmp L19
0076 L16:
0076 .dbline 247
0076 L17:
0076 .dbline 247
0076 0395 inc R16
0078 L19:
0078 .dbline 247
0078 ;
0078 ;
0078 0035 cpi R16,80
007A E8F3 brlo L16
007C .dbline -2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -