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

📄 emd.lst

📁 433M收发,内有PCB(用99打开),源程序ICC打开,用了IC发送和三极管两种,接收用RX3310
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    002B EFCF      LDI	R28,0xFF
    002C E0D4      LDI	R29,4
    002D BFCD      OUT	0x3D,R28
    002E BFDE      OUT	0x3E,R29
    002F 51C0      SUBI	R28,0x10
    0030 40D0      SBCI	R29,0
    0031 EA0A      LDI	R16,0xAA
    0032 8308      STD	Y+0,R16
    0033 2400      CLR	R0
    0034 E1E3      LDI	R30,0x13
    0035 E0F1      LDI	R31,1
    0036 E011      LDI	R17,1
    0037 33E8      CPI	R30,0x38
    0038 07F1      CPC	R31,R17
    0039 F011      BEQ	0x003C
    003A 9201      ST	R0,Z+
    003B CFFB      RJMP	0x0037
    003C 8300      STD	Z+0,R16
    003D E4E3      LDI	R30,0x43
    003E E0F0      LDI	R31,0
    003F E0A0      LDI	R26,0
    0040 E0B1      LDI	R27,1
    0041 E010      LDI	R17,0
    0042 35E6      CPI	R30,0x56
    0043 07F1      CPC	R31,R17
    0044 F021      BEQ	0x0049
    0045 95C8      LPM
    0046 9631      ADIW	R30,1
    0047 920D      ST	R0,X+
    0048 CFF9      RJMP	0x0042
    0049 D400      RCALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: E:\abol\file\EMD\programme\main.c
(0001)   /********************************************************/
(0002) /*         			ABOL      			  				*/
(0003) /*                868MHZ数码管显示接收器   				*/
(0004) /*     作者:于朝晖     2008-5-24 9:30:00  				*/
(0005) /*     目标MCU:MEGA48  晶振:INT RC 8MHZ  				*/
(0006) /* 文件名称:main.c  主函数								*/
(0007) /* 编译:ICC-AVR application builder					*/
(0008) /* 当前版本: 1.0										*/
(0009) /* 修改日期: 2008.5.24									*/
(0010) /********************************************************/
(0011) 
(0012) #include <iom88v.h>
(0013) #include <macros.h>
(0014) #include "eeprom.h"  
(0015) #include "delay.h"			 
(0016) #include "main.h"	
(0017) #include "init.h"
(0018) #include "key.h"
(0019) #define uchar unsigned char
(0020) #define unit unsigned int
(0021) #define ulong unsigned long
(0022) #define bitset(var, bitno) ((var) |= (1 << (bitno)))
(0023) #define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
(0024) 	
(0025) 
(0026) 
(0027) 
(0028) void init_pin(void)
(0029) {
(0030) flag=0;
_init_pin:
    004B 2422      CLR	R2
    004C 92200102  STS	flag,R2
(0031) flagl=0;
    004E 92200134  STS	flagl,R2
(0032) flagh &=~BIT(0); 
    0050 91800103  LDS	R24,flagh
    0052 7F8E      ANDI	R24,0xFE
    0053 93800103  STS	flagh,R24
    0055 9508      RET
_indat:
  i                    --> R20
  data                 --> R16
    0056 DA24      RCALL	push_gset1
(0033) }
(0034) //发送一个字节至TM1620
(0035) void indat(unsigned char data)
(0036) {
(0037) unsigned char i; 
(0038) CLR_STB;	  //将STB至低,等待CLK为低
    0057 9828      CBI	0x05,0
(0039) for(i=0;i<8;i++)
    0058 2744      CLR	R20
    0059 C009      RJMP	0x0063
(0040) {
(0041) CLR_CLK;	  //CLK为低
    005A 9829      CBI	0x05,1
(0042)  if((data&0x01)!=0)
    005B FF00      SBRS	R16,0
    005C C002      RJMP	0x005F
(0043)   {
(0044)   SET_DIN;	  //数据I位为1
    005D 9A2A      SBI	0x05,2
(0045)   }	
    005E C001      RJMP	0x0060
(0046)   else 
(0047)   {
(0048)   CLR_DIN;//数据I位为0 
    005F 982A      CBI	0x05,2
(0049)   }
(0050)  SET_CLK;	   //CLK为高
    0060 9A29      SBI	0x05,1
(0051)  data>>=1;
    0061 9506      LSR	R16
    0062 9543      INC	R20
    0063 3048      CPI	R20,0x8
    0064 F3A8      BCS	0x005A
    0065 DA18      RCALL	pop_gset1
    0066 9508      RET
_display:
  i                    --> Y+1
  disa                 --> R20
    0067 DA13      RCALL	push_gset1
    0068 2F40      MOV	R20,R16
(0052)  }
(0053) }
(0054) 
(0055) void display (unsigned char disa)
(0056) {
(0057) unsigned char i; 
(0058) SET_DIN;
    0069 9A2A      SBI	0x05,2
(0059) SET_CLK;
    006A 9A29      SBI	0x05,1
(0060) SET_STB;
    006B 9A28      SBI	0x05,0
(0061) indat(0x02);
    006C E002      LDI	R16,2
    006D DFE8      RCALL	_indat
    006E DA0F      RCALL	pop_gset1
    006F 9508      RET
(0062) 
(0063) }
(0064) //显示初始化
(0065) void init_tm1620 (void)
(0066) {  
(0067) unsigned char i;
(0068) //TM1620模式设定 
(0069) SET_STB;
_init_tm1620:
  i                    --> Y+1
    0070 9A28      SBI	0x05,0
(0070) indat(0x02);
    0071 E002      LDI	R16,2
    0072 DFE3      RCALL	_indat
(0071) SET_STB;
    0073 9A28      SBI	0x05,0
(0072) //数据写设定
(0073) indat(0x40);	
    0074 E400      LDI	R16,0x40
    0075 DFE0      RCALL	_indat
(0074) SET_STB;
    0076 9A28      SBI	0x05,0
(0075) //地址模式设定
(0076) indat(0xc0);
    0077 EC00      LDI	R16,0xC0
    0078 DFDD      RCALL	_indat
(0077) SET_STB;
    0079 9A28      SBI	0x05,0
(0078) indat(0x3f);
    007A E30F      LDI	R16,0x3F
    007B DFDA      RCALL	_indat
(0079) indat(0x3f);
    007C E30F      LDI	R16,0x3F
    007D DFD8      RCALL	_indat
(0080) indat(0x3f);
    007E E30F      LDI	R16,0x3F
    007F DFD6      RCALL	_indat
(0081) indat(0x3f);
    0080 E30F      LDI	R16,0x3F
    0081 DFD4      RCALL	_indat
(0082) indat(0x3f);
    0082 E30F      LDI	R16,0x3F
    0083 DFD2      RCALL	_indat
(0083) indat(0x3f);
    0084 E30F      LDI	R16,0x3F
    0085 DFD0      RCALL	_indat
(0084) indat(0x3f);
    0086 E30F      LDI	R16,0x3F
    0087 DFCE      RCALL	_indat
(0085) indat(0x3f);
    0088 E30F      LDI	R16,0x3F
    0089 DFCC      RCALL	_indat
(0086) indat(0x3f);
    008A E30F      LDI	R16,0x3F
    008B DFCA      RCALL	_indat
(0087) indat(0x3f);
    008C E30F      LDI	R16,0x3F
    008D DFC8      RCALL	_indat
(0088) indat(0x3f);
    008E E30F      LDI	R16,0x3F
    008F DFC6      RCALL	_indat
(0089) indat(0x3f);
    0090 E30F      LDI	R16,0x3F
    0091 DFC4      RCALL	_indat
(0090) indat(0x3f);
    0092 E30F      LDI	R16,0x3F
    0093 DFC2      RCALL	_indat
(0091) indat(0x3f);
    0094 E30F      LDI	R16,0x3F
    0095 DFC0      RCALL	_indat
(0092) //开显示
(0093) SET_STB;
    0096 9A28      SBI	0x05,0
(0094) indat(0x8f);
    0097 E80F      LDI	R16,0x8F
    0098 DFBD      RCALL	_indat
    0099 9508      RET
(0095) }
(0096) //数据刷新
(0097) void tm1620 (void)
(0098) {  
(0099) unsigned char i;
(0100) //TM1620模式设定 
(0101) SET_STB;
_tm1620:
  i                    --> Y+1
    009A 9A28      SBI	0x05,0
(0102) //地址模式设定
(0103) indat(0xc0);
    009B EC00      LDI	R16,0xC0
    009C DFB9      RCALL	_indat
(0104) SET_STB;
    009D 9A28      SBI	0x05,0
(0105)   WDR();
    009E 95A8      WDR
(0106) if((flagh&0x04)==0)
    009F 90200103  LDS	R2,flagh
    00A1 FC22      SBRC	R2,2
    00A2 C020      RJMP	0x00C3
(0107) 	{
(0108) 	indat(0x3f);
    00A3 E30F      LDI	R16,0x3F
    00A4 DFB1      RCALL	_indat
(0109) 	indat(dipdata[0]); 
    00A5 9100011E  LDS	R16,dipdata
    00A7 DFAE      RCALL	_indat
(0110) 	indat(0x06);
    00A8 E006      LDI	R16,6
    00A9 DFAC      RCALL	_indat
(0111) 	indat(dipdata[1]); 
    00AA 9100011F  LDS	R16,dipdata+1
    00AC DFA9      RCALL	_indat
(0112) 	indat(0x5b);
    00AD E50B      LDI	R16,0x5B
    00AE DFA7      RCALL	_indat
(0113) 	indat(dipdata[2]);
    00AF 91000120  LDS	R16,dipdata+2
    00B1 DFA4      RCALL	_indat
(0114) 	indat(0x4f);
    00B2 E40F      LDI	R16,0x4F
    00B3 DFA2      RCALL	_indat
(0115) 	indat(dipdata[3]);
    00B4 91000121  LDS	R16,dipdata+3
    00B6 DF9F      RCALL	_indat
(0116) 	indat(0x66);
    00B7 E606      LDI	R16,0x66
    00B8 DF9D      RCALL	_indat
(0117) 	indat(dipdata[4]);  
    00B9 91000122  LDS	R16,0x122
    00BB DF9A      RCALL	_indat
(0118) 	indat(0x6d);
    00BC E60D      LDI	R16,0x6D
    00BD DF98      RCALL	_indat
(0119) 	indat(dipdata[5]);
    00BE 91000123  LDS	R16,0x123
    00C0 DF95      RCALL	_indat
(0120) 	SET_STB;
    00C1 9A28      SBI	0x05,0
(0121) 	}
    00C2 C043      RJMP	0x0106
(0122) else			   //开了闪烁位的显示
(0123)     { 
(0124) 	indat(0x3f);
    00C3 E30F      LDI	R16,0x3F
    00C4 DF91      RCALL	_indat
(0125) 	if(D1FC==0)
    00C5 90200130  LDS	R2,D1FC
    00C7 2022      TST	R2
    00C8 F471      BNE	0x00D7
(0126) 	   { 
(0127) 	   indat(dipdata[0]);
    00C9 9100011E  LDS	R16,dipdata
    00CB DF8A      RCALL	_indat
(0128) 	   indat(0x06);
    00CC E006      LDI	R16,6
    00CD DF88      RCALL	_indat
(0129) 	   indat(dipdata[1]);
    00CE 9100011F  LDS	R16,dipdata+1
    00D0 DF85      RCALL	_indat
(0130) 	   indat(0x5b);
    00D1 E50B      LDI	R16,0x5B
    00D2 DF83      RCALL	_indat
(0131) 	   indat(dipdata[2]); 
    00D3 91000120  LDS	R16,dipdata+2
    00D5 DF80      RCALL	_indat
(0132) 	   }
    00D6 C00A      RJMP	0x00E1
(0133) 	else
(0134) 	   {  
(0135) 	   indat(0);
    00D7 2700      CLR	R16
    00D8 DF7D      RCALL	_indat
(0136) 	   indat(0);
    00D9 2700      CLR	R16
    00DA DF7B      RCALL	_indat
(0137) 	   indat(0);
    00DB 2700      CLR	R16
    00DC DF79      RCALL	_indat
(0138) 	   indat(0);
    00DD 2700      CLR	R16
    00DE DF77      RCALL	_indat
(0139) 	   indat(0);
    00DF 2700      CLR	R16
    00E0 DF75      RCALL	_indat
(0140)        }
(0141) 	indat(0x4f);
    00E1 E40F      LDI	R16,0x4F
    00E2 DF73      RCALL	_indat
(0142) 	if(D3FC==0) indat(dipdata[3]);
    00E3 9020012E  LDS	R2,D3FC
    00E5 2022      TST	R2
    00E6 F421      BNE	0x00EB
    00E7 91000121  LDS	R16,dipdata+3
    00E9 DF6C      RCALL	_indat
    00EA C002      RJMP	0x00ED
(0143) 	else  indat(0);
    00EB 2700      CLR	R16
    00EC DF69      RCALL	_indat
(0144) 	indat(0x66);
    00ED E606      LDI	R16,0x66
    00EE DF67      RCALL	_indat
(0145) 	if(D4FC==0) indat(dipdata[4]);
    00EF 9020012D  LDS	R2,D4FC
    00F1 2022      TST	R2
    00F2 F421      BNE	0x00F7
    00F3 91000122  LDS	R16,0x122
    00F5 DF60      RCALL	_indat
    00F6 C002      RJMP	0x00F9
(0146) 	else  indat(0);
    00F7 2700      CLR	R16
    00F8 DF5D      RCALL	_indat
(0147) 	indat(0x6d);
    00F9 E60D      LDI	R16,0x6D
    00FA DF5B      RCALL	_indat
(0148) 	if(D5FC==0) indat(dipdata[5]);
    00FB 9020012C  LDS	R2,D5FC
    00FD 2022      TST	R2
    00FE F421      BNE	0x0103
    00FF 91000123  LDS	R16,0x123
    0101 DF54      RCALL	_indat
    0102 C002      RJMP	0x0105
(0149) 	else  indat(0);
    0103 2700      CLR	R16
    0104 DF51      RCALL	_indat
(0150) 	SET_STB;
    0105 9A28      SBI	0x05,0
(0151) 	}
    0106 9508      RET
_code_comp:
  b                    --> R12
  a                    --> R10
  i                    --> R22
  j                    --> R20
    0107 D96D      RCALL	push_gset4
(0152) }
(0153) /*比较接收到的代码在EEPORM的位置
(0154)   有记录反回地址,没有反回FF*/
(0155) unsigned char code_comp (void)
(0156) { 
(0157) unsigned char i,j=0,a,b;
    0108 2744      CLR	R20
(0158) for(i=0;i<100;i++)
    0109 2766      CLR	R22
    010A C01B      RJMP	0x0126
(0159) {
(0160)   WDR();
    010B 95A8      WDR
(0161) j=i*4;                      //每个ID用两个记录地址,两个记录编号
    010C E084      LDI	R24,4
    010D 9F86      MUL	R24,R22
    010E 2D40      MOV	R20,R0
(0162) a=EEPROM_read(j);
    010F 2F04      MOV	R16,R20
    0110 D615      RCALL	_EEPROM_read
    0111 2EA0      MOV	R10,R16
(0163) j++;
    0112 9543      INC	R20
(0164) b=EEPROM_read(j);
    0113 2F04      MOV	R16,R20
    0114 D611      RCALL	_EEPROM_read
    0115 2EC0      MOV	R12,R16
(0165) j++;
    0116 9543      INC	R20
(0166) if((a==data[0])&&(b==data[1]))
    0117 9020011B  LDS	R2,data
    0119 14A2      CP	R10,R2
    011A F439      BNE	0x0122
    011B 9020011C  LDS	R2,data+1
    011D 1502      CP	R16,R2
    011E F419      BNE	0x0122
(0167)    {
(0168)    addr=i;
    011F 9360010B  STS	addr,R22
(0169)    break;
    0121 C006      RJMP	0x0128
(0170)   }
(0171)   else
(0172)     { 
(0173)     addr=0xff;
    0122 EF8F      LDI	R24,0xFF
    0123 9380010B  STS	addr,R24
    0125 9563      INC	R22
    0126 3664      CPI	R22,0x64
    0127 F318      BCS	0x010B
(0174) 
(0175) 	}
(0176) }
(0177)     return(addr); 
    0128 9100010B  LDS	R16,addr
    012A D946      RCALL	pop_gset4
    012B 9508      RET
_lookup_led:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -