📄 disp.s
字号:
.module disp.c
.area data(ram, con, rel)
_disp_table::
.blkb 2
.area idata
.byte 63,6
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 91,'O
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 'f,'m
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 125,7
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 127,'o
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 'w,124
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 57,94
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 'y,'q
.area data(ram, con, rel)
.dbfile E:\avrc\disp.c
.dbsym e disp_table _disp_table A[16:16]c
.area text(rom, con, rel)
.dbfile E:\avrc\disp.c
.dbfunc e main _main fV
; i -> <dead>
; j -> R20,R21
.even
_main::
.dbline -1
.dbline 15
; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
; #include <macros.h>
; #include <stdio.h>
; #define uchar unsigned char
; #define uint unsigned int
; void send_byte(uchar x);
; void disp_led(uchar buffer,uchar control);
; void delay_1ms(void);
; void delay_nms(unsigned int n);
; uchar disp_table[16] = {
; 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; uint count;
; void main(void)
; {
.dbline 18
; uint i;
; int j;
; OSCCAL=0X9d;//系统时钟校准,不同的芯片和不同的频率,
ldi R24,157
out 0x31,R24
.dbline 19
; DDRB=0x03; //定义B口的PB0、PB1为输出口
ldi R24,3
out 0x17,R24
.dbline 20
; DDRC=0x30;
ldi R24,48
out 0x14,R24
.dbline 21
; WDR(); //看门狗计数清零
wdr
.dbline 22
; WDTCR=0x0F; //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S
ldi R24,15
out 0x21,R24
.dbline 23
; ADCSRA=0X00;
clr R2
out 0x6,R2
.dbline 24
; ADCSRA = 0x00;
out 0x6,R2
.dbline 25
; ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
ldi R24,195
out 0x7,R24
.dbline 26
; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
ldi R24,206
out 0x6,R24
.dbline 27
; SEI();
sei
.dbline 29
; //PORTB=0B00000001; //PB0口输出高电平,PB1口输出低电平,绿灯亮
; delay_nms(5000); //延时5秒
ldi R16,5000
ldi R17,19
rcall _delay_nms
.dbline 30
; PORTB=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮
ldi R24,2
out 0x18,R24
.dbline 31
; delay_nms(5000); //延时5秒
ldi R16,5000
ldi R17,19
rcall _delay_nms
.dbline 32
; disp_led(4,0);
clr R18
ldi R16,4
rcall _disp_led
rjmp L3
L2:
.dbline 34
; while(1)
; {
.dbline 35
; PORTB=0B00000010;
ldi R24,2
out 0x18,R24
.dbline 36
; delay_nms(100);
ldi R16,100
ldi R17,0
rcall _delay_nms
.dbline 37
; j=((25600/1023)*(ADCH*256+ADCL))/1000;
in R18,0x5
clr R19
ldi R16,256
ldi R17,1
rcall empy16s
movw R18,R16
in R2,0x4
clr R3
add R18,R2
adc R19,R3
ldi R16,25
ldi R17,0
rcall empy16s
ldi R18,1000
ldi R19,3
rcall div16s
movw R20,R16
.dbline 38
; count=j;
sts _count+1,R21
sts _count,R20
.dbline 39
; if(j>24)
ldi R24,24
ldi R25,0
cp R24,R16
cpc R25,R17
brge L5
.dbline 40
; PORTB=0B00000011; //翻转PB0和PB1口
ldi R24,3
out 0x18,R24
L5:
.dbline 41
ldi R18,1
clr R16
rcall _disp_led
.dbline 42
L3:
.dbline 33
rjmp L2
X0:
.dbline -2
.dbline 43
; disp_led(0,1);
; }
; }
L1:
.dbline 0 ; func end
ret
.dbsym l i 1 i
.dbsym r j 20 I
.dbend
.dbfunc e send_byte _send_byte fV
; i -> R20
; x -> R22
.even
_send_byte::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 45
; void send_byte(uchar x)
; {
.dbline 47
; uchar i;
; for(i=0;i<8;i++)
clr R20
rjmp L11
L8:
.dbline 48
; {
.dbline 49
; PORTC=0<<5;
clr R2
out 0x15,R2
.dbline 50
; if((x&(1<<(7-i))))
ldi R17,7
sub R17,R20
ldi R16,1
rcall lsl8
mov R2,R22
and R2,R16
breq L12
.dbline 51
; PORTC=1<<4;
ldi R24,16
out 0x15,R24
rjmp L13
L12:
.dbline 53
; else
; PORTC=0<<4;
clr R2
out 0x15,R2
L13:
.dbline 54
ldi R24,32
out 0x15,R24
.dbline 55
L9:
.dbline 47
inc R20
L11:
.dbline 47
cpi R20,8
brlo L8
.dbline -2
.dbline 56
; PORTC=1<<5;
; }
; }
L7:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r x 22 c
.dbend
.dbfunc e disp_led _disp_led fV
; temp -> y+0
; tempcount -> R20,R21
; i -> R22
; control -> R20
; buffer -> R10
.even
_disp_led::
rcall push_gset3
mov R20,R18
mov R10,R16
sbiw R28,6
.dbline -1
.dbline 58
; void disp_led(uchar buffer,uchar control)
; {
.dbline 61
; uchar i,temp[6];
; uint tempcount;
; switch(control)
clr R21
cpi R20,0
cpc R20,R21
breq L18
X1:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L23
rjmp L15
X2:
.dbline 62
; {
L18:
.dbline 64
; case 0: //test
; {
.dbline 65
; for(i=0;i<11;i++)
clr R22
rjmp L22
L19:
.dbline 66
ldi R18,10
ldi R19,0
mov R16,R10
clr R17
rcall mod16s
movw R30,R16
ldi R24,<_disp_table
ldi R25,>_disp_table
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _send_byte
L20:
.dbline 65
inc R22
L22:
.dbline 65
cpi R22,11
brlo L19
.dbline 67
; send_byte(disp_table[buffer%10]);//显示数字
; break;
rjmp L16
L23:
.dbline 70
; }
; case 1: //display count
; {
.dbline 71
; tempcount=count;
lds R20,_count
lds R21,_count+1
.dbline 72
; for(i=0;i<6;i++)
clr R22
rjmp L27
L24:
.dbline 73
.dbline 74
ldi R18,10
ldi R19,0
movw R16,R20
rcall mod16u
movw R24,R28
mov R30,R22
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 75
ldi R18,10
ldi R19,0
movw R16,R20
rcall div16u
movw R20,R16
.dbline 76
L25:
.dbline 72
inc R22
L27:
.dbline 72
cpi R22,6
brlo L24
.dbline 77
; {
; temp[i]=tempcount%10;
; tempcount/=10;
; }
; send_byte(disp_table[buffer/10]);
ldi R18,10
ldi R19,0
mov R16,R10
clr R17
rcall div16s
movw R30,R16
ldi R24,<_disp_table
ldi R25,>_disp_table
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _send_byte
.dbline 78
; send_byte(disp_table[buffer%10]);
ldi R18,10
ldi R19,0
mov R16,R10
clr R17
rcall mod16s
movw R30,R16
ldi R24,<_disp_table
ldi R25,>_disp_table
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _send_byte
.dbline 79
; send_byte(0x00);
clr R16
rcall _send_byte
.dbline 80
; send_byte(0x00);
clr R16
rcall _send_byte
.dbline 81
; send_byte(0x00);
clr R16
rcall _send_byte
.dbline 82
; for(i=0;i<6;i++)
clr R22
rjmp L31
L28:
.dbline 83
mov R2,R22
clr R3
ldi R30,5
ldi R31,0
sub R30,R2
sbc R31,R3
movw R24,R28
add R30,R24
adc R31,R25
ldd R30,z+0
clr R31
ldi R24,<_disp_table
ldi R25,>_disp_table
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _send_byte
L29:
.dbline 82
inc R22
L31:
.dbline 82
cpi R22,6
brlo L28
.dbline 84
; send_byte(disp_table[temp[5-i]]);
; break;
L15:
L16:
.dbline 87
; }
; }
; PORTC=1<<4;
ldi R24,16
out 0x15,R24
.dbline -2
.dbline 88
; }
L14:
adiw R28,6
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l temp 0 A[6:6]c
.dbsym r tempcount 20 i
.dbsym r i 22 c
.dbsym r control 20 c
.dbsym r buffer 10 c
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 90
; void delay_1ms(void)//1ms延时函数
; {
.dbline 92
; unsigned int i;
; for (i=0;i<150;i++)
clr R16
clr R17
rjmp L36
L33:
.dbline 93
.dbline 94
wdr
.dbline 95
L34:
.dbline 92
subi R16,255 ; offset = 1
sbci R17,255
L36:
.dbline 92
cpi R16,150
ldi R30,0
cpc R17,R30
brlo L33
.dbline -2
.dbline 96
; {
; WDR();
; }
; }
L32:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 98
; void delay_nms(unsigned int n)//延时n毫秒
; {
.dbline 100
; unsigned int i;
; for (i=0;i<n;i++)//执行n次1毫秒延时
clr R20
clr R21
rjmp L41
L38:
.dbline 101
rcall _delay_1ms
L39:
.dbline 100
subi R20,255 ; offset = 1
sbci R21,255
L41:
.dbline 100
cp R20,R22
cpc R21,R23
brlo L38
.dbline 102
; delay_1ms();
; WDR();
wdr
.dbline -2
.dbline 103
; }
L37:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.area vector(rom, abs)
.org 28
rjmp _adc_isr
.area text(rom, con, rel)
.dbfile E:\avrc\disp.c
.dbfunc e adc_isr _adc_isr fV
.even
_adc_isr::
st -y,R24
in R24,0x3f
st -y,R24
.dbline -1
.dbline 107
; //ADC完成中断
; #pragma interrupt_handler adc_isr:iv_ADC
; void adc_isr(void)
; {
.dbline 108
; ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
ldi R24,195
out 0x7,R24
.dbline 109
; ADCSRA|=(1<<ADSC);//启动AD转换
sbi 0x6,6
.dbline -2
.dbline 110
; }
L42:
ld R24,y+
out 0x3f,R24
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.area bss(ram, con, rel)
.dbfile E:\avrc\disp.c
_count::
.blkb 2
.dbsym e count _count i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -