📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\时钟芯片\1302\1302-162\main.c
.area data(ram, con, rel)
.dbfile D:\时钟芯片\1302\1302-162\main.c
_flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\时钟芯片\1302\1302-162\main.c
.dbsym e flag _flag c
_n::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\时钟芯片\1302\1302-162\main.c
.dbsym e n _n c
.area text(rom, con, rel)
.dbfile D:\时钟芯片\1302\1302-162\main.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 14
; //ICC-AVR application builder : 2005-11-2 16:28:30
; // Target : 8515
; // Crystal: 4.0000Mhz
; #include <io8515v.h>
; #include <macros.h>
; #include <162-1302.h>
; #include <function.h>
; uchar temh_d;
; uchar teml_d;
; uchar temm_d;
; uchar flag=0;
; uchar n=0;
; void port_init(void)
; {
.dbline 15
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 16
; DDRA = 0xFF;
ldi R24,255
out 0x1a,R24
.dbline 17
; PORTB = 0xFF;
out 0x18,R24
.dbline 18
; DDRB = 0xFF;
out 0x17,R24
.dbline 19
; PORTC = 0xFF;
out 0x15,R24
.dbline 20
; DDRC = 0xFF;
out 0x14,R24
.dbline 21
; PORTD = 0x00;
out 0x12,R2
.dbline 22
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 25
; } //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 27
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 28
; port_init();
rcall _port_init
.dbline 29
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 30
; GIMSK = 0x40;
ldi R24,64
out 0x3b,R24
.dbline 31
; TIMSK = 0x00;
out 0x39,R2
.dbline 32
; SEI(); //re-enable interrupts
sei
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nms _delay_nms fV
; a -> R20
; b -> R22
; n -> R16
.even
_delay_nms::
rcall push_gset2
.dbline -1
.dbline 36
; //all peripherals are now initialized
; }
; void delay_nms(uchar n)
; {
.dbline 39
; unsigned char a, b;
;
; for (a = 1; a<n; a++)
ldi R20,1
rjmp L7
L4:
.dbline 40
; for (b = 1; b<10; b++)
ldi R22,1
rjmp L11
L8:
.dbline 41
L9:
.dbline 40
inc R22
L11:
.dbline 40
cpi R22,10
brlo L8
L5:
.dbline 39
inc R20
L7:
.dbline 39
cp R20,R16
brlo L4
.dbline -2
L3:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r a 20 c
.dbsym r b 22 c
.dbsym r n 16 c
.dbend
.dbfunc e delay_ns _delay_ns fV
; b -> R20
; n -> R22
.even
_delay_ns::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 44
; ;
; }
; void delay_ns(uchar n)
; { unsigned char b;
.dbline 45
; for(b=0;b<n;b++)
clr R20
rjmp L16
L13:
.dbline 46
ldi R16,200
rcall _delay_nms
L14:
.dbline 45
inc R20
L16:
.dbline 45
cp R20,R22
brlo L13
.dbline -2
L12:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r b 20 c
.dbsym r n 22 c
.dbend
.area vector(rom, abs)
.org 2
rjmp _int0_isr
.area text(rom, con, rel)
.dbfile D:\时钟芯片\1302\1302-162\main.c
.dbfunc e int0_isr _int0_isr fV
; t -> R20
; store -> R20,R21
; user_code -> R12,R13
; data_code -> R22,R23
; i -> R10
.even
_int0_isr::
rcall push_lset
rcall push_gset4
sbiw R28,2
.dbline -1
.dbline 50
; delay_nms(200);
; }
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 53
; //external interupt on INT0
; uchar i;
; uint user_code=0;
clr R12
clr R13
.dbline 54
; uint data_code=0,store;
clr R22
clr R23
.dbline 55
; CLI(); //关闭中断
cli
.dbline 57
; //**********************目的是检测在3毫秒内如果出现高电平就退出解码程序
; for(i=0;i<3;i++)
clr R10
rjmp L21
L18:
.dbline 58
; {
.dbline 59
; delay_nms(90); //延时1ms
ldi R16,90
rcall _delay_nms
.dbline 60
; if(PIND&0X04)
in R24,0x10
andi R24,4
breq L22
.dbline 61
; {
.dbline 62
; goto ret;
rjmp L24
L22:
.dbline 64
L19:
.dbline 57
inc R10
L21:
.dbline 57
mov R24,R10
cpi R24,3
brlo L18
L25:
.dbline 66
L26:
.dbline 66
; }
; }
; //**********************等高电平出现,再延时4.7ms,跳过结果码
; while(!(PIND&004));
in R24,0x10
andi R24,4
breq L25
L28:
.dbline 67
L29:
.dbline 67
; while(PIND&0X04);
in R24,0x10
andi R24,4
brne L28
.dbline 69
; //**********************开始接收用户码
; for(i=0;i<16;i++)
clr R10
rjmp L34
X0:
.dbline 70
; {
L35:
.dbline 71
L36:
.dbline 71
; while(!(PIND&0X04));
in R24,0x10
andi R24,4
breq L35
.dbline 72
; delay_nms(90); //延时1.05ms
ldi R16,90
rcall _delay_nms
.dbline 73
; if(PIND&0X04)
in R24,0x10
andi R24,4
breq L38
.dbline 74
; {
.dbline 75
; user_code|=(1<<i);
mov R18,R10
clr R19
ldi R16,1
ldi R17,0
rcall lsl16
or R12,R16
or R13,R17
.dbline 77
;
; }
rjmp L39
L38:
.dbline 79
; else
; {
.dbline 80
; user_code&=~(1<<i);
mov R18,R10
clr R19
ldi R16,1
ldi R17,0
rcall lsl16
mov R2,R16
mov R3,R17
com R2
com R3
and R12,R2
and R13,R3
.dbline 81
; }
L39:
.dbline 82
L32:
.dbline 69
inc R10
L34:
.dbline 69
mov R24,R10
cpi R24,16
brlo L36
.dbline 85
; }
;
; //**********************开始接收数据
; for(i=0;i<16;i++)
clr R10
rjmp L43
X1:
.dbline 86
; {
L44:
.dbline 87
L45:
.dbline 87
; while(!(PIND&0X04));
in R24,0x10
andi R24,4
breq L44
.dbline 88
; delay_nms(90); //延时1.05ms
ldi R16,90
rcall _delay_nms
.dbline 89
; if(PIND&0X04)
in R24,0x10
andi R24,4
breq L47
.dbline 90
; {
.dbline 91
; data_code|=(1<<i);
mov R18,R10
clr R19
ldi R16,1
ldi R17,0
rcall lsl16
or R22,R16
or R23,R17
.dbline 93
;
; }
rjmp L48
L47:
.dbline 95
; else
; {
.dbline 96
; data_code&=~(1<<i);
mov R18,R10
clr R19
ldi R16,1
ldi R17,0
rcall lsl16
mov R2,R16
mov R3,R17
com R2
com R3
and R22,R2
and R23,R3
.dbline 97
; }
L48:
.dbline 98
L41:
.dbline 85
inc R10
L43:
.dbline 85
mov R24,R10
cpi R24,16
brlo L45
.dbline 99
; }
; store=data_code; //采集到数据码
mov R20,R22
mov R21,R23
.dbline 100
; delay_ns(240);
ldi R16,240
rcall _delay_ns
.dbline 103
; //延时50ms,不接收连续码
; //设置开关
; if(store==0x0901)
cpi R22,1
ldi R30,9
cpc R23,R30
brne L49
.dbline 104
; {
.dbline 105
; flag^=0X01;
ldi R24,1
lds R2,_flag
eor R2,R24
sts _flag,R2
.dbline 106
; }
L49:
.dbline 108
; //设置时间
; if(flag)
lds R2,_flag
tst R2
brne X8
rjmp L51
X8:
.dbline 109
; {
.dbline 111
; uchar t;
; LCD_write_string(8,1,"s");
ldi R24,<L53
ldi R25,>L53
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,8
rcall _LCD_write_string
.dbline 112
; switch(store)
cpi R20,65
ldi R30,2
cpc R21,R30
brne X9
rjmp L69
X9:
ldi R24,577
ldi R25,2
cp R24,R20
cpc R25,R21
brge X10
rjmp L74
X10:
L73:
cpi R20,1
ldi R30,130
cpc R21,R30
brne X11
rjmp L72
X11:
ldi R24,-32255
ldi R25,-126
cp R24,R20
cpc R25,R21
brlt L76
L75:
cpi R20,129
ldi R30,128
cpc R21,R30
brne X12
rjmp L66
X12:
cpi R20,129
ldi R30,128
cpc R21,R30
brge X13
rjmp L54
X13:
L77:
cpi R20,1
ldi R30,129
cpc R21,R30
brne X14
rjmp L68
X14:
rjmp L54
L76:
cpi R20,65
ldi R30,0
cpc R21,R30
brne X15
rjmp L65
X15:
ldi R24,65
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L79
L78:
cpi R20,1
ldi R30,132
cpc R21,R30
brne X16
rjmp L57
X16:
rjmp L54
L79:
cpi R20,65
ldi R30,1
cpc R21,R30
brne X17
rjmp L67
X17:
rjmp L54
L74:
cpi R20,65
ldi R30,5
cpc R21,R30
brne X18
rjmp L71
X18:
ldi R24,1345
ldi R25,5
cp R24,R20
cpc R25,R21
brlt L81
L80:
cpi R20,129
ldi R30,2
cpc R21,R30
brne X19
rjmp L70
X19:
cpi R20,129
ldi R30,2
cpc R21,R30
brge X20
rjmp L54
X20:
L82:
cpi R20,65
ldi R30,4
cpc R21,R30
brne X21
rjmp L63
X21:
rjmp L54
L81:
cpi R20,1
ldi R30,9
cpc R21,R30
breq L56
ldi R24,2305
ldi R25,9
cp R24,R20
cpc R25,R21
brlt L84
L83:
cpi R20,65
ldi R30,8
cpc R21,R30
breq L60
rjmp L54
L84:
cpi R20,1
ldi R30,64
cpc R21,R30
brne X22
rjmp L64
X22:
rjmp L54
X2:
.dbline 113
; {
L56:
.dbline 114
; case 0x0901 :LCD_set_xy(8,1);LCD_write_char('s');n=0;LCD_set_xy(9,1);
ldi R18,1
ldi R16,8
rcall _LCD_set_xy
.dbline 114
ldi R16,115
rcall _LCD_write_char
.dbline 114
clr R2
sts _n,R2
.dbline 114
ldi R18,1
ldi R16,9
rcall _LCD_set_xy
.dbline 115
lds R16,_n
subi R16,208 ; addi 48
rcall _LCD_write_char
.dbline 115
rjmp L24
X3:
.dbline 115
; LCD_write_char(n+48);goto ret;break;
L57:
.dbline 116
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 116
ldi R24,10
lds R2,_n
cp R24,R2
brsh L58
.dbline 116
clr R2
sts _n,R2
L58:
.dbline 116
; case 0x8401 :n++;if(n>10) n=0; LCD_set_xy(9,1);
ldi R18,1
ldi R16,9
rcall _LCD_set_xy
.dbline 117
lds R16,_n
subi R16,208 ; addi 48
rcall _LCD_write_char
.dbline 117
rjmp L24
X4:
.dbline 117
; LCD_write_char(n+48); goto ret;break;
L60:
.dbline 118
lds R24,_n
subi R24,1
sts _n,R24
.dbline 118
tst R24
brne L61
.dbline 118
ldi R24,10
sts _n,R24
L61:
.dbline 118
; case 0x0841 :n=n-1;if(n==0) n=10; LCD_set_xy(9,1);
ldi R18,1
ldi R16,9
rcall _LCD_set_xy
.dbline 119
lds R16,_n
subi R16,208 ; addi 48
rcall _LCD_write_char
.dbline 119
rjmp L24
X5:
.dbline 119
; LCD_write_char(n+48); goto ret;break;
L63:
.dbline 120
; case 0x0441 :t=0;break;
clr R20
.dbline 120
rjmp L55
L64:
.dbline 121
; case 0x4001 :t=1;break;
ldi R20,1
.dbline 121
rjmp L55
L65:
.dbline 122
; case 0x0041 :t=2;break;
ldi R20,2
.dbline 122
rjmp L55
L66:
.dbline 123
; case 0x8081 :t=3;break;
ldi R20,3
.dbline 123
rjmp L55
L67:
.dbline 124
; case 0x0141 :t=4;break;
ldi R20,4
.dbline 124
rjmp L55
L68:
.dbline 125
; case 0x8101 :t=5;break;
ldi R20,5
.dbline 125
rjmp L55
L69:
.dbline 126
; case 0x0241 :t=6;break;
ldi R20,6
.dbline 126
rjmp L55
L70:
.dbline 127
; case 0x0281 :t=7;break;
ldi R20,7
.dbline 127
rjmp L55
L71:
.dbline 128
; case 0x0541 :t=8;break;
ldi R20,8
.dbline 128
rjmp L55
L72:
.dbline 129
; case 0x8201 :t=9;break;
ldi R20,9
.dbline 129
L54:
L55:
.dbline 132
; }
;
; switch(n)
lds R22,_n
clr R23
cpi R22,0
cpc R22,R23
brne X23
rjmp L88
X23:
X6:
cpi R22,1
ldi R30,0
cpc R23,R30
brne X24
rjmp L89
X24:
cpi R22,2
ldi R30,0
cpc R23,R30
brne X25
rjmp L90
X25:
cpi R22,3
ldi R30,0
cpc R23,R30
brne X26
rjmp L91
X26:
cpi R22,4
ldi R30,0
cpc R23,R30
brne X27
rjmp L92
X27:
cpi R22,5
ldi R30,0
cpc R23,R30
brne X28
rjmp L93
X28:
cpi R22,6
ldi R30,0
cpc R23,R30
brne X29
rjmp L94
X29:
cpi R22,7
ldi R30,0
cpc R23,R30
brne X30
rjmp L95
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -