📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_mark::
.blkb 2
.area idata
.word 1500
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e mark _mark I
_flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e flag _flag c
_flagh::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e flagh _flagh c
_sec::
.blkb 1
.area idata
.byte 60
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e sec _sec c
_sec0::
.blkb 1
.area idata
.byte 3
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e sec0 _sec0 c
_acount::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e acount _acount c
_LEDFC::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e LEDFC _LEDFC c
_SPFC::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e SPFC _SPFC c
_ADcon::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e ADcon _ADcon c
_bcount::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e bcount _bcount c
_addr::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e addr _addr c
_dipcount::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e dipcount _dipcount c
_minu15::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e minu15 _minu15 c
_minu30::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e minu30 _minu30 c
_BITCOUNTER::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbsym e BITCOUNTER _BITCOUNTER c
.area lit(rom, con, rel)
_MAXDURATION::
.byte 20
.dbsym e MAXDURATION _MAXDURATION kc
_CODELANGTH::
.byte 24
.dbsym e CODELANGTH _CODELANGTH kc
_diptable::
.byte 63,6
.byte 91,'O
.byte 'f,'m
.byte 125,7
.byte 127,'o
.byte 'n,'y
.byte 'm
.dbsym e diptable _diptable A[13:13]kc
.area text(rom, con, rel)
.dbfile E:\abol\file\EMD\programme/main.h
.dbfile E:\abol\file\EMD\programme\main.c
.dbfunc e init_pin _init_pin fV
.even
_init_pin::
.dbline -1
.dbline 29
; /********************************************************/
; /* ABOL */
; /* 868MHZ数码管显示接收器 */
; /* 作者:于朝晖 2008-5-24 9:30:00 */
; /* 目标MCU:MEGA48 晶振:INT RC 8MHZ */
; /* 文件名称:main.c 主函数 */
; /* 编译:ICC-AVR application builder */
; /* 当前版本: 1.0 */
; /* 修改日期: 2008.5.24 */
; /********************************************************/
;
; #include <iom88v.h>
; #include <macros.h>
; #include "eeprom.h"
; #include "delay.h"
; #include "main.h"
; #include "init.h"
; #include "key.h"
; #define uchar unsigned char
; #define unit unsigned int
; #define ulong unsigned long
; #define bitset(var, bitno) ((var) |= (1 << (bitno)))
; #define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
;
;
;
;
; void init_pin(void)
; {
.dbline 30
; flag=0;
clr R2
sts _flag,R2
.dbline 31
; flagl=0;
sts _flagl,R2
.dbline 32
; flagh &=~BIT(0);
lds R24,_flagh
andi R24,254
sts _flagh,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e indat _indat fV
; i -> R20
; data -> R16
.even
_indat::
rcall push_gset1
.dbline -1
.dbline 36
; }
; //发送一个字节至TM1620
; void indat(unsigned char data)
; {
.dbline 38
; unsigned char i;
; CLR_STB; //将STB至低,等待CLK为低
cbi 0x5,0
.dbline 39
; for(i=0;i<8;i++)
clr R20
rjmp L6
L3:
.dbline 40
; {
.dbline 41
; CLR_CLK; //CLK为低
cbi 0x5,1
.dbline 42
; if((data&0x01)!=0)
sbrs R16,0
rjmp L7
.dbline 43
; {
.dbline 44
; SET_DIN; //数据I位为1
sbi 0x5,2
.dbline 45
; }
rjmp L8
L7:
.dbline 47
; else
; {
.dbline 48
; CLR_DIN;//数据I位为0
cbi 0x5,2
.dbline 49
; }
L8:
.dbline 50
sbi 0x5,1
.dbline 51
lsr R16
.dbline 52
L4:
.dbline 39
inc R20
L6:
.dbline 39
cpi R20,8
brlo L3
.dbline -2
L2:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 16 c
.dbend
.dbfunc e display _display fV
; i -> <dead>
; disa -> R20
.even
_display::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 56
; SET_CLK; //CLK为高
; data>>=1;
; }
; }
;
; void display (unsigned char disa)
; {
.dbline 58
; unsigned char i;
; SET_DIN;
sbi 0x5,2
.dbline 59
; SET_CLK;
sbi 0x5,1
.dbline 60
; SET_STB;
sbi 0x5,0
.dbline 61
; indat(0x02);
ldi R16,2
rcall _indat
.dbline -2
L9:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbsym r disa 20 c
.dbend
.dbfunc e init_tm1620 _init_tm1620 fV
; i -> <dead>
.even
_init_tm1620::
.dbline -1
.dbline 66
;
; }
; //显示初始化
; void init_tm1620 (void)
; {
.dbline 69
; unsigned char i;
; //TM1620模式设定
; SET_STB;
sbi 0x5,0
.dbline 70
; indat(0x02);
ldi R16,2
rcall _indat
.dbline 71
; SET_STB;
sbi 0x5,0
.dbline 73
; //数据写设定
; indat(0x40);
ldi R16,64
rcall _indat
.dbline 74
; SET_STB;
sbi 0x5,0
.dbline 76
; //地址模式设定
; indat(0xc0);
ldi R16,192
rcall _indat
.dbline 77
; SET_STB;
sbi 0x5,0
.dbline 78
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 79
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 80
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 81
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 82
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 83
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 84
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 85
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 86
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 87
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 88
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 89
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 90
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 91
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 93
; //开显示
; SET_STB;
sbi 0x5,0
.dbline 94
; indat(0x8f);
ldi R16,143
rcall _indat
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbend
.dbfunc e tm1620 _tm1620 fV
; i -> <dead>
.even
_tm1620::
.dbline -1
.dbline 98
; }
; //数据刷新
; void tm1620 (void)
; {
.dbline 101
; unsigned char i;
; //TM1620模式设定
; SET_STB;
sbi 0x5,0
.dbline 103
; //地址模式设定
; indat(0xc0);
ldi R16,192
rcall _indat
.dbline 104
; SET_STB;
sbi 0x5,0
.dbline 105
; WDR();
wdr
.dbline 106
; if((flagh&0x04)==0)
lds R2,_flagh
sbrc R2,2
rjmp L12
.dbline 107
; {
.dbline 108
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 109
; indat(dipdata[0]);
lds R16,_dipdata
rcall _indat
.dbline 110
; indat(0x06);
ldi R16,6
rcall _indat
.dbline 111
; indat(dipdata[1]);
lds R16,_dipdata+1
rcall _indat
.dbline 112
; indat(0x5b);
ldi R16,91
rcall _indat
.dbline 113
; indat(dipdata[2]);
lds R16,_dipdata+2
rcall _indat
.dbline 114
; indat(0x4f);
ldi R16,79
rcall _indat
.dbline 115
; indat(dipdata[3]);
lds R16,_dipdata+3
rcall _indat
.dbline 116
; indat(0x66);
ldi R16,102
rcall _indat
.dbline 117
; indat(dipdata[4]);
lds R16,_dipdata+4
rcall _indat
.dbline 118
; indat(0x6d);
ldi R16,109
rcall _indat
.dbline 119
; indat(dipdata[5]);
lds R16,_dipdata+5
rcall _indat
.dbline 120
; SET_STB;
sbi 0x5,0
.dbline 121
; }
rjmp L13
L12:
.dbline 123
; else //开了闪烁位的显示
; {
.dbline 124
; indat(0x3f);
ldi R16,63
rcall _indat
.dbline 125
; if(D1FC==0)
lds R2,_D1FC
tst R2
brne L19
.dbline 126
; {
.dbline 127
; indat(dipdata[0]);
lds R16,_dipdata
rcall _indat
.dbline 128
; indat(0x06);
ldi R16,6
rcall _indat
.dbline 129
; indat(dipdata[1]);
lds R16,_dipdata+1
rcall _indat
.dbline 130
; indat(0x5b);
ldi R16,91
rcall _indat
.dbline 131
; indat(dipdata[2]);
lds R16,_dipdata+2
rcall _indat
.dbline 132
; }
rjmp L20
L19:
.dbline 134
; else
; {
.dbline 135
; indat(0);
clr R16
rcall _indat
.dbline 136
; indat(0);
clr R16
rcall _indat
.dbline 137
; indat(0);
clr R16
rcall _indat
.dbline 138
; indat(0);
clr R16
rcall _indat
.dbline 139
; indat(0);
clr R16
rcall _indat
.dbline 140
; }
L20:
.dbline 141
; indat(0x4f);
ldi R16,79
rcall _indat
.dbline 142
; if(D3FC==0) indat(dipdata[3]);
lds R2,_D3FC
tst R2
brne L23
.dbline 142
lds R16,_dipdata+3
rcall _indat
rjmp L24
L23:
.dbline 143
; else indat(0);
clr R16
rcall _indat
L24:
.dbline 144
; indat(0x66);
ldi R16,102
rcall _indat
.dbline 145
; if(D4FC==0) indat(dipdata[4]);
lds R2,_D4FC
tst R2
brne L26
.dbline 145
lds R16,_dipdata+4
rcall _indat
rjmp L27
L26:
.dbline 146
; else indat(0);
clr R16
rcall _indat
L27:
.dbline 147
; indat(0x6d);
ldi R16,109
rcall _indat
.dbline 148
; if(D5FC==0) indat(dipdata[5]);
lds R2,_D5FC
tst R2
brne L29
.dbline 148
lds R16,_dipdata+5
rcall _indat
rjmp L30
L29:
.dbline 149
; else indat(0);
clr R16
rcall _indat
L30:
.dbline 150
sbi 0x5,0
.dbline 151
L13:
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbend
.dbfunc e code_comp _code_comp fc
; b -> R12
; a -> R10
; i -> R22
; j -> R20
.even
_code_comp::
rcall push_gset4
.dbline -1
.dbline 156
; SET_STB;
; }
; }
; /*比较接收到的代码在EEPORM的位置
; 有记录反回地址,没有反回FF*/
; unsigned char code_comp (void)
; {
.dbline 157
; unsigned char i,j=0,a,b;
clr R20
.dbline 158
; for(i=0;i<100;i++)
clr R22
rjmp L36
L33:
.dbline 159
; {
.dbline 160
; WDR();
wdr
.dbline 161
; j=i*4; //每个ID用两个记录地址,两个记录编号
ldi R24,4
mul R24,R22
mov R20,R0
.dbline 162
; a=EEPROM_read(j);
mov R16,R20
rcall _EEPROM_read
mov R10,R16
.dbline 163
; j++;
inc R20
.dbline 164
; b=EEPROM_read(j);
mov R16,R20
rcall _EEPROM_read
mov R12,R16
.dbline 165
; j++;
inc R20
.dbline 166
; if((a==data[0])&&(b==data[1]))
lds R2,_data
cp R10,R2
brne L37
lds R2,_data+1
cp R16,R2
brne L37
.dbline 167
; {
.dbline 168
; addr=i;
sts _addr,R22
.dbline 169
; break;
rjmp L35
L37:
.dbline 172
.dbline 173
ldi R24,255
sts _addr,R24
.dbline 175
.dbline 176
L34:
.dbline 158
inc R22
L36:
.dbline 158
cpi R22,100
brlo L33
L35:
.dbline 177
; }
; else
; {
; addr=0xff;
;
; }
; }
; return(addr);
lds R16,_addr
.dbline -2
L32:
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r b 12 c
.dbsym r a 10 c
.dbsym r i 22 c
.dbsym r j 20 c
.dbend
.dbfunc e lookup_led _lookup_led fV
; a -> R22
; b -> R20
; j -> R10
.even
_lookup_led::
rcall push_gset3
mov R10,R16
.dbline -1
.dbline 181
; }
;
; void lookup_led(unsigned char j)
; {
.dbline 183
; unsigned char a,b;
; WDR();
wdr
.dbline 184
; j=(j*4)+2;
ldi R24,4
mul R24,R10
mov R24,R0
subi R24,254 ; addi 2
mov R10,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -