📄 ad.s
字号:
.module ad.c
.area text(rom, con, rel)
.dbfile D:\AVR\AD/HD7279.C
.dbfunc e init_7279 _init_7279 fV
; tmr -> R20,R21
.even
_init_7279::
xcall push_gset1
.dbline -1
.dbline 170
; //ICC-AVR application builder : 2005-6-21 15:56:32
; // Target : M16
; // Crystal: 8.0000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
; #include "HD7279.C"
; #include "TIMEDELAY.C"
; unsigned int adc_rel;
; unsigned int adc_old;
; unsigned char ad_mux;
;
;
;
;
; void port_init(void)
; {
; PORTA = 0xFF;
; DDRA = 0x00;
; PORTB = 0xFF;
; DDRB = 0x00;
; PORTC = 0xFF; //m103 output only
; DDRC = 0x1E;
; PORTD = 0xFF;
; DDRD = 0x00;
; }
;
; //ADC initialisation
; // Conversion time: 104uS
; void adc_init(void)
; {
; PORTA = 0X00;
; PORTA = 0Xff;
;
; ADCSR = 0x00; //disable adc
; ADMUX = ( 0<< REFS0 )|( 0<< REFS1 )|ad_mux & 0x0f; //select adc input 0 //00000000
; ACSR = ( 1<< ACD);
; ADCSR = (1 << ADEN ) |( 1 << ADSC ) |( 1 << ADIE ) | BIT( ADPS2)| BIT( ADPS1);
; }
;
; void bubble_sort(int *x, int n)
; {
; int j, k, h, t;
;
; for (h=n-1; h>0; h=k) /*循环到没有比较范围*/
; {
; for (j=0, k=0; j<h; j++) /*每次预置k=0,循环扫描后更新k*/
; {
; if (*(x+j) > *(x+j+1)) /*大的放在后面,小的放到前面*/
; {
; t = *(x+j);
; *(x+j) = *(x+j+1);
; *(x+j+1) = t; /*完成交换*/
; k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/
; }
; }
; }
; }
;
;
; int adc()
; {
; int result[12];
; long sum = 0;
; char i;
; for( i = 0; i < 12; i ++ ) //中值数字滤波
; {
; delay_ms( 1 );
; ADCSRA |= BIT( ADSC );
; while( !( ADCSRA & BIT( ADIF ) ) );
; ADCSRA &= ~BIT( ADIF );
; result[ i ] = ADC;
; }
; bubble_sort( result, 12 );
; for( i = 1; i < 11; i ++ )
; sum += result[ i ];
; return (int)( sum / 10 );
; }
;
;
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
;
; //conversion complete, read value (int) using...
; CLI();
; ADMUX = ( 0<< REFS0 )|( 0 << REFS1 )|ad_mux & 0x0f;
; //adc_rel = ADC & 0X03FF;
; adc_rel=adc();
;
;
; //if( adc_old != adc_rel)
; if (ad_mux==0)
; {
; dis_data(0,3,adc_rel);
; //write7279(DECODE0+4,0x80+ad_mux);
; adc_old = adc_rel;
; }
; //else dis_data( 0,4, adc_rel);
; else
; {
; dis_data(4,7,adc_rel);
; //write7279(DECODE0+4,0x80+ad_mux);
; adc_old = adc_rel;
; }
;
;
; if(ad_mux<1)
; ad_mux++;
; else
; ad_mux=0;
;
;
; ADCSR |= BIT( ADSC);
; SEI();
;
; }
;
;
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
; port_init();
; adc_init();
;
; MCUCR = 0x00;
; GICR = 0x00;
; TIMSK = 0x00; //timer interrupt sources
; SEI(); //re-enable interrupts
; //all peripherals are now initialised
; }
;
; //
; void main(void)
; {
; int i;
; ad_mux = 0x00;
; adc_old = 0x0000;
; init_devices();
; init_7279();
; //insert your functional code here...
;
; ADCSR |= BIT( ADSC );
; while(1)
; {
; // dis_data(0,3,1234);
; // dis_data(4,7,5678);
; }
;
; }
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
.dbline 173
;
;
;
sbi 0x14,1
.dbline 174
;
sbi 0x14,2
.dbline 175
;
sbi 0x14,3
.dbline 176
;
cbi 0x14,4
.dbline 178
;
;
sbi 0x15,1
.dbline 179
;
sbi 0x15,2
.dbline 180
;
sbi 0x15,3
.dbline 181
;
sbi 0x15,4
.dbline 183
clr R20
clr R21
xjmp L5
L2:
.dbline 183
L3:
.dbline 183
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 183
;
;
cpi R20,0
ldi R30,240
cpc R21,R30
brlo L2
.dbline 185
;
;
ldi R16,164
xcall _send_byte
.dbline -2
.dbline 187
;
;
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r tmr 20 i
.dbend
.dbfunc e write7279 _write7279 fV
; dta -> R20
; cmd -> R22
.even
_write7279::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 197
;
;
;
;
;
;
;
;
;
;
.dbline 198
;
mov R16,R22
xcall _send_byte
.dbline 199
;
mov R16,R20
xcall _send_byte
.dbline -2
.dbline 200
;
L6:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r dta 20 c
.dbsym r cmd 22 c
.dbend
.dbfunc e read7279 _read7279 fc
.even
_read7279::
.dbline -1
.dbline 210
;
;
;
;
;
;
;
;
;
;
.dbline 211
;
ldi R16,21
xcall _send_byte
.dbline 212
;
.dbline -2
L7:
.dbline 0 ; func end
xjmp _receive_byte
.dbend
.dbfunc e get_key7279 _get_key7279 fc
; KeyNum -> R20
.even
_get_key7279::
xcall push_gset1
.dbline -1
.dbline 224
;
;
;
;
;
;
;
;
;
;
;
;
L9:
.dbline 226
L10:
.dbline 226
;
;
sbic 0x13,4
rjmp L9
.dbline 228
;
;
ldi R16,1
ldi R17,0
xcall _delay10ms
.dbline 230
;
;
xcall _read7279
.dbline 232
;
;
xcall _num_change7279
mov R20,R16
.dbline 234
;
;
ldi R16,1
ldi R17,0
xcall _delay10ms
L12:
.dbline 236
L13:
.dbline 236
;
;
sbis 0x13,4
rjmp L12
.dbline 238
;
;
mov R16,R20
.dbline -2
L8:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r KeyNum 20 c
.dbend
.dbfunc e long_delay _long_delay fV
; i -> R16
.even
_long_delay::
.dbline -1
.dbline 245
;
;
;
;
;
;
;
.dbline 247
clr R16
xjmp L19
L16:
.dbline 247
L17:
.dbline 247
inc R16
L19:
.dbline 247
;
;
cpi R16,80
brlo L16
.dbline -2
.dbline 248
;
L15:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e short_delay _short_delay fV
; i -> R16
.even
_short_delay::
.dbline -1
.dbline 252
;
;
;
;
.dbline 254
clr R16
xjmp L24
L21:
.dbline 254
L22:
.dbline 254
inc R16
L24:
.dbline 254
;
;
cpi R16,46
brlo L21
.dbline -2
.dbline 255
;
L20:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e delay10ms _delay10ms fV
; i -> R20
; j -> R22
; k -> R10
; count -> R16,R17
.even
_delay10ms::
xcall push_gset3
.dbline -1
.dbline 259
;
;
;
;
.dbline 261
;
;
clr R20
xjmp L29
L26:
.dbline 262
;
clr R22
xjmp L33
L30:
.dbline 263
clr R10
xjmp L37
L34:
.dbline 263
L35:
.dbline 263
inc R10
L37:
.dbline 263
mov R24,R10
cpi R24,100
brlo L34
L31:
.dbline 262
inc R22
L33:
.dbline 262
cpi R22,100
brlo L30
L27:
.dbline 261
inc R20
L29:
.dbline 261
mov R2,R20
clr R3
cp R2,R16
cpc R3,R17
brlo L26
.dbline -2
.dbline 264
;
;
L25:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbsym r k 10 c
.dbsym r count 16 i
.dbend
.dbfunc e send_byte _send_byte fV
; i -> R20
; out_byte -> R22
.even
_send_byte::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 274
;
;
;
;
;
;
;
;
;
;
.dbline 277
;
;
;
cbi 0x15,2
.dbline 278
;
cbi 0x15,1
.dbline 279
;
xcall _long_delay
.dbline 281
;
;
clr R20
xjmp L42
L39:
.dbline 282
;
.dbline 283
;
sbrs R22,7
rjmp L43
.dbline 284
;
.dbline 285
;
sbi 0x15,3
.dbline 286
;
xjmp L44
L43:
.dbline 288
;
;
.dbline 289
;
cbi 0x15,3
.dbline 290
;
L44:
.dbline 291
sbi 0x15,2
.dbline 292
xcall _short_delay
.dbline 293
cbi 0x15,2
.dbline 294
xcall _short_delay
.dbline 295
lsl R22
.dbline 296
L40:
.dbline 281
inc R20
L42:
.dbline 281
cpi R20,8
brlo L39
.dbline 297
;
;
;
;
;
;
;
sbi 0x15,3
.dbline -2
.dbline 298
;
L38:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r out_byte 22 c
.dbend
.dbfunc e receive_byte _receive_byte fc
; i -> R20
; in_byte -> R22
.even
_receive_byte::
xcall push_gset2
.dbline -1
.dbline 308
;
;
;
;
;
;
;
;
;
;
.dbline 311
;
;
;
sbi 0x15,2
.dbline 313
;
;
cbi 0x14,3
.dbline 315
;
;
xcall _long_delay
.dbline 317
;
;
clr R20
xjmp L49
L46:
.dbline 318
;
.dbline 319
;
sbi 0x15,2
.dbline 320
;
xcall _short_delay
.dbline 321
;
lsl R22
.dbline 322
;
sbis 0x13,3
rjmp L50
.dbline 323
;
.dbline 324
;
ori R22,1
.dbline 325
;
L50:
.dbline 326
cbi 0x15,2
.dbline 327
xcall _short_delay
.dbline 329
L47:
.dbline 317
inc R20
L49:
.dbline 317
cpi R20,8
brlo L46
.dbline 330
;
;
;
;
;
sbi 0x14,3
.dbline 331
;
mov R16,R22
.dbline -2
L45:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r in_byte 22 c
.dbend
.dbfunc e num_change7279 _num_change7279 fc
.area func_lit(rom, con, rel)
L72:
.word `L59
.word `L58
.word `L57
.word `L56
.word `L53
.word `L53
.word `L53
.word `L53
.word `L63
.word `L62
.word `L61
.word `L60
.word `L53
.word `L53
.word `L53
.word `L53
.word `L67
.word `L66
.word `L65
.word `L64
.word `L53
.word `L53
.word `L53
.word `L53
.word `L71
.word `L70
.word `L69
.word `L68
.area text(rom, con, rel)
.dbfile D:\AVR\AD/HD7279.C
; X -> R20
.even
_num_change7279::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 342
;
;
;
;
;
;
;
;
;
;
;
.dbline 343
;
clr R21
cpi R20,0
ldi R30,0
cpc R21,R30
brge X1
xjmp L53
X1:
ldi R24,27
ldi R25,0
cp R24,R20
cpc R25,R21
brge X2
xjmp L53
X2:
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<L72
ldi R25,>L72
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X0:
.dbline 344
;
L56:
.dbline 345
;
ldi R16,1
xjmp L52
L57:
.dbline 346
;
ldi R16,2
xjmp L52
L58:
.dbline 347
;
ldi R16,3
xjmp L52
L59:
.dbline 348
;
ldi R16,4
xjmp L52
L60:
.dbline 349
;
ldi R16,5
xjmp L52
L61:
.dbline 350
;
ldi R16,6
xjmp L52
L62:
.dbline 351
;
ldi R16,7
xjmp L52
L63:
.dbline 352
;
ldi R16,8
xjmp L52
L64:
.dbline 353
;
ldi R16,9
xjmp L52
L65:
.dbline 354
;
clr R16
xjmp L52
L66:
.dbline 355
;
ldi R16,10
xjmp L52
L67:
.dbline 356
;
ldi R16,11
xjmp L52
L68:
.dbline 357
;
ldi R16,12
xjmp L52
L69:
.dbline 358
;
ldi R16,13
xjmp L52
L70:
.dbline 359
;
ldi R16,14
xjmp L52
L71:
.dbline 360
;
ldi R16,15
xjmp L52
L53:
.dbline 361
;
ldi R16,255
.dbline -2
L52:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r X 20 c
.dbend
.dbfunc e dis_data _dis_data fV
; temp_char -> R10
; i -> R12
; num -> y+10
; dig_end -> R14
; dig_start -> R10
.even
_dis_data::
xcall push_gset5
mov R14,R18
mov R10,R16
.dbline -1
.dbline 496
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
.dbline 499
;
;
;
mov R12,R10
xjmp L77
L74:
.dbline 500
.dbline 501
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -