⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.s

📁 433M收发,内有PCB(用99打开),源程序ICC打开,用了IC发送和三极管两种,接收用RX3310
💻 S
📖 第 1 页 / 共 4 页
字号:
	.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 + -