📄 disp.lis
字号:
.module disp.c
.area data(ram, con, rel)
0000 _disp_table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A 777C .byte 'w,124
.area data(ram, con, rel)
000C .blkb 2
.area idata
000C 395E .byte 57,94
.area data(ram, con, rel)
000E .blkb 2
.area idata
000E 7971 .byte 'y,'q
.area data(ram, con, rel)
0010 .dbfile E:\avrc\disp.c
0010 .dbsym e disp_table _disp_table A[16:16]c
.area text(rom, con, rel)
0000 .dbfile E:\avrc\disp.c
0000 .dbfunc e main _main fV
0000 ; i -> <dead>
0000 ; j -> R20,R21
.even
0000 _main::
0000 .dbline -1
0000 .dbline 15
0000 ; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
0000 ; #include <macros.h>
0000 ; #include <stdio.h>
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; void send_byte(uchar x);
0000 ; void disp_led(uchar buffer,uchar control);
0000 ; void delay_1ms(void);
0000 ; void delay_nms(unsigned int n);
0000 ; uchar disp_table[16] = {
0000 ; 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0000 ; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
0000 ; uint count;
0000 ; void main(void)
0000 ; {
0000 .dbline 18
0000 ; uint i;
0000 ; int j;
0000 ; OSCCAL=0X9d;//系统时钟校准,不同的芯片和不同的频率,
0000 8DE9 ldi R24,157
0002 81BF out 0x31,R24
0004 .dbline 19
0004 ; DDRB=0x03; //定义B口的PB0、PB1为输出口
0004 83E0 ldi R24,3
0006 87BB out 0x17,R24
0008 .dbline 20
0008 ; DDRC=0x30;
0008 80E3 ldi R24,48
000A 84BB out 0x14,R24
000C .dbline 21
000C ; WDR(); //看门狗计数清零
000C A895 wdr
000E .dbline 22
000E ; WDTCR=0x0F; //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S
000E 8FE0 ldi R24,15
0010 81BD out 0x21,R24
0012 .dbline 23
0012 ; ADCSRA=0X00;
0012 2224 clr R2
0014 26B8 out 0x6,R2
0016 .dbline 24
0016 ; ADCSRA = 0x00;
0016 26B8 out 0x6,R2
0018 .dbline 25
0018 ; ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
0018 83EC ldi R24,195
001A 87B9 out 0x7,R24
001C .dbline 26
001C ; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
001C 8EEC ldi R24,206
001E 86B9 out 0x6,R24
0020 .dbline 27
0020 ; SEI();
0020 7894 sei
0022 .dbline 29
0022 ; //PORTB=0B00000001; //PB0口输出高电平,PB1口输出低电平,绿灯亮
0022 ; delay_nms(5000); //延时5秒
0022 08E8 ldi R16,5000
0024 13E1 ldi R17,19
0026 C3D0 rcall _delay_nms
0028 .dbline 30
0028 ; PORTB=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮
0028 82E0 ldi R24,2
002A 88BB out 0x18,R24
002C .dbline 31
002C ; delay_nms(5000); //延时5秒
002C 08E8 ldi R16,5000
002E 13E1 ldi R17,19
0030 BED0 rcall _delay_nms
0032 .dbline 32
0032 ; disp_led(4,0);
0032 2227 clr R18
0034 04E0 ldi R16,4
0036 40D0 rcall _disp_led
0038 24C0 rjmp L3
003A L2:
003A .dbline 34
003A ; while(1)
003A ; {
003A .dbline 35
003A ; PORTB=0B00000010;
003A 82E0 ldi R24,2
003C 88BB out 0x18,R24
003E .dbline 36
003E ; delay_nms(100);
003E 04E6 ldi R16,100
0040 10E0 ldi R17,0
0042 B5D0 rcall _delay_nms
0044 .dbline 37
0044 ; j=((25600/1023)*(ADCH*256+ADCL))/1000;
0044 25B1 in R18,0x5
0046 3327 clr R19
0048 00E0 ldi R16,256
004A 11E0 ldi R17,1
004C 00D0 rcall empy16s
004E 9801 movw R18,R16
0050 24B0 in R2,0x4
0052 3324 clr R3
0054 220D add R18,R2
0056 331D adc R19,R3
0058 09E1 ldi R16,25
005A 10E0 ldi R17,0
005C 00D0 rcall empy16s
005E 28EE ldi R18,1000
0060 33E0 ldi R19,3
0062 00D0 rcall div16s
0064 A801 movw R20,R16
0066 .dbline 38
0066 ; count=j;
0066 50930100 sts _count+1,R21
006A 40930000 sts _count,R20
006E .dbline 39
006E ; if(j>24)
006E 88E1 ldi R24,24
0070 90E0 ldi R25,0
0072 8017 cp R24,R16
0074 9107 cpc R25,R17
0076 14F4 brge L5
0078 .dbline 40
0078 ; PORTB=0B00000011; //翻转PB0和PB1口
0078 83E0 ldi R24,3
007A 88BB out 0x18,R24
007C L5:
007C .dbline 41
007C 21E0 ldi R18,1
007E 0027 clr R16
0080 1BD0 rcall _disp_led
0082 .dbline 42
0082 L3:
0082 .dbline 33
0082 DBCF rjmp L2
0084 X0:
0084 .dbline -2
0084 .dbline 43
0084 ; disp_led(0,1);
0084 ; }
0084 ; }
0084 L1:
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbsym l i 1 i
0086 .dbsym r j 20 I
0086 .dbend
0086 .dbfunc e send_byte _send_byte fV
0086 ; i -> R20
0086 ; x -> R22
.even
0086 _send_byte::
0086 00D0 rcall push_gset2
0088 602F mov R22,R16
008A .dbline -1
008A .dbline 45
008A ; void send_byte(uchar x)
008A ; {
008A .dbline 47
008A ; uchar i;
008A ; for(i=0;i<8;i++)
008A 4427 clr R20
008C 11C0 rjmp L11
008E L8:
008E .dbline 48
008E ; {
008E .dbline 49
008E ; PORTC=0<<5;
008E 2224 clr R2
0090 25BA out 0x15,R2
0092 .dbline 50
0092 ; if((x&(1<<(7-i))))
0092 17E0 ldi R17,7
0094 141B sub R17,R20
0096 01E0 ldi R16,1
0098 00D0 rcall lsl8
009A 262E mov R2,R22
009C 2022 and R2,R16
009E 19F0 breq L12
00A0 .dbline 51
00A0 ; PORTC=1<<4;
00A0 80E1 ldi R24,16
00A2 85BB out 0x15,R24
00A4 02C0 rjmp L13
00A6 L12:
00A6 .dbline 53
00A6 ; else
00A6 ; PORTC=0<<4;
00A6 2224 clr R2
00A8 25BA out 0x15,R2
00AA L13:
00AA .dbline 54
00AA 80E2 ldi R24,32
00AC 85BB out 0x15,R24
00AE .dbline 55
00AE L9:
00AE .dbline 47
00AE 4395 inc R20
00B0 L11:
00B0 .dbline 47
00B0 4830 cpi R20,8
00B2 68F3 brlo L8
00B4 .dbline -2
00B4 .dbline 56
00B4 ; PORTC=1<<5;
00B4 ; }
00B4 ; }
00B4 L7:
00B4 00D0 rcall pop_gset2
00B6 .dbline 0 ; func end
00B6 0895 ret
00B8 .dbsym r i 20 c
00B8 .dbsym r x 22 c
00B8 .dbend
00B8 .dbfunc e disp_led _disp_led fV
00B8 ; temp -> y+0
00B8 ; tempcount -> R20,R21
00B8 ; i -> R22
00B8 ; control -> R20
00B8 ; buffer -> R10
.even
00B8 _disp_led::
00B8 00D0 rcall push_gset3
00BA 422F mov R20,R18
00BC A02E mov R10,R16
00BE 2697 sbiw R28,6
00C0 .dbline -1
00C0 .dbline 58
00C0 ; void disp_led(uchar buffer,uchar control)
00C0 ; {
00C0 .dbline 61
00C0 ; uchar i,temp[6];
00C0 ; uint tempcount;
00C0 ; switch(control)
00C0 5527 clr R21
00C2 4030 cpi R20,0
00C4 4507 cpc R20,R21
00C6 29F0 breq L18
00C8 X1:
00C8 4130 cpi R20,1
00CA E0E0 ldi R30,0
00CC 5E07 cpc R21,R30
00CE 99F0 breq L23
00D0 5EC0 rjmp L15
00D2 X2:
00D2 .dbline 62
00D2 ; {
00D2 L18:
00D2 .dbline 64
00D2 ; case 0: //test
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -