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

📄 tx.lst

📁 AVR单片机系统开发经典实例部分源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    01F3 DE8B      RCALL	_Write_ConfigureWord
(0412)   
(0413)   RegisterValueH=0x01;
    01F4 E041      LDI	R20,1
(0414)   RegisterValueL=0Xe4;    //安全模式不使能
    01F5 EE64      LDI	R22,0xE4
(0415)   Write_ConfigureWord(SECCTRL0,RegisterValueH,RegisterValueL); 
    01F6 8368      STD	Y+0,R22
    01F7 2F24      MOV	R18,R20
    01F8 E109      LDI	R16,0x19
    01F9 DE85      RCALL	_Write_ConfigureWord
(0416)   
(0417)   //RegisterValueH=128;
(0418)   //RegisterValueL=128; 
(0419)   //Write_ConfigureWord(SECCTRL1,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
(0420)   
(0421)   RegisterValueH=0;
    01FA 2744      CLR	R20
(0422)   RegisterValueL=TX_length;  //RXFIFO的极限值
    01FB E760      LDI	R22,0x70
(0423)   Write_ConfigureWord(IOCFG0,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
    01FC 8368      STD	Y+0,R22
    01FD 2F24      MOV	R18,R20
    01FE E10C      LDI	R16,0x1C
    01FF DE7F      RCALL	_Write_ConfigureWord
(0424)   
(0425)   disable_spi();      //禁止SPI口 
    0200 940E02A7  CALL	_disable_spi
    0202 9621      ADIW	R28,1
    0203 940E02A9  CALL	pop_gset2
    0205 9508      RET
FILE: C:\AVR\cc2420驱动程序\code\common.c
(0001) #include "common.h"
(0002) 
(0003) /*******************************************
(0004) *函数功能:延时600us用于电压校准器的启动延时
(0005) *输入参数:无
(0006) *输出参数:无
(0007) *返 回 值:无
(0008) ********************************************/
(0009) void Delay600us(void)   
(0010) {
(0011)   unsigned char i,t;
(0012)   for (i=0;i<5;i++)
_Delay600us:
  i                    --> R16
  t                    --> R18
    0206 2700      CLR	R16
    0207 C006      RJMP	0x020E
(0013)   {
(0014)     for (t=0;t<250;t++)
    0208 2722      CLR	R18
    0209 C001      RJMP	0x020B
    020A 9523      INC	R18
    020B 3F2A      CPI	R18,0xFA
    020C F3E8      BCS	0x020A
    020D 9503      INC	R16
    020E 3005      CPI	R16,5
    020F F3C0      BCS	0x0208
    0210 9508      RET
(0015)     {
(0016)       ;
(0017)     }
(0018)   }
(0019) }
(0020) 
(0021) /*******************************************
(0022) *函数功能:延时10ms用于发送数据包的间隔测试
(0023) *输入参数:无
(0024) *输出参数:无
(0025) *返 回 值:无
(0026) ********************************************/     
(0027) void Delay10ms(void)  
(0028) {
(0029)   unsigned int t,i;
(0030)   for (t=0;t<3500;t++)
_Delay10ms:
  t                    --> R16
  i                    --> R18
    0211 2700      CLR	R16
    0212 2711      CLR	R17
    0213 C00B      RJMP	0x021F
(0031)   {
(0032)     for (i=0;i<3;i++)
    0214 2722      CLR	R18
    0215 2733      CLR	R19
    0216 C002      RJMP	0x0219
    0217 5F2F      SUBI	R18,0xFF
    0218 4F3F      SBCI	R19,0xFF
    0219 3023      CPI	R18,3
    021A E0E0      LDI	R30,0
    021B 073E      CPC	R19,R30
    021C F3D0      BCS	0x0217
    021D 5F0F      SUBI	R16,0xFF
    021E 4F1F      SBCI	R17,0xFF
    021F 3A0C      CPI	R16,0xAC
    0220 E0ED      LDI	R30,0xD
    0221 071E      CPC	R17,R30
    0222 F388      BCS	0x0214
    0223 9508      RET
(0033) 	{;}
(0034)   }
(0035) }       
(0036) 
(0037) /*
(0038) *函数功能:led端口初始化程序
(0039) *输入参数:无
(0040) *输出参数:无
(0041) *返 回 值:无
(0042) */
(0043) void initled(void)
(0044) {
(0045)   DDRA|=((1<<DDA1)|(1<<DDA0));//设置A口的输出引脚
_initled:
    0224 B38A      IN	R24,0x1A
    0225 6083      ORI	R24,3
    0226 BB8A      OUT	0x1A,R24
    0227 9508      RET
FILE: C:\AVR\cc2420驱动程序\code\main.c
(0001) #include "cc2420.h"
(0002) #include "spi.h"
(0003) 
(0004) unsigned char Data_TXFIFO[TX_length];    //要写入TXFIFO中的数据,包括帧长度,MAC头,MAC有效负载等部分
(0005) unsigned char serial_num=0;         //数据序号
(0006) 
(0007) 
(0008) void main(void)
(0009) {
(0010)   unsigned char i;
(0011)   unsigned int j;
(0012)   
(0013)   initled();
_main:
  j                    --> R22
  i                    --> R20
    0228 940E0224  CALL	_initled
(0014)   init_spi();
    022A 940E028D  CALL	_init_spi
(0015)   
(0016)   LED_YELLOW;
    022C 9AD8      SBI	0x1B,0
    022D 98D9      CBI	0x1B,1
(0017)   PORTB |=(1<<CSn);                //CSN引脚置位,停止SPI操作,
    022E 9AC0      SBI	0x18,0
(0018)   PORTB |=1<<SCK;                    // Spi clock line init high
    022F 9AC1      SBI	0x18,1
(0019)   PORTE |=1<<RST;                     //注意该引脚低电平时,cc2420处于复位状态
    0230 9A1A      SBI	0x03,2
(0020)   
(0021)   Data_TXFIFO[0]=TX_length+1;    //第一字节为帧长度,不包括长度域本身的字节,但包含帧校验序列2字节
    0231 E781      LDI	R24,0x71
    0232 93800101  STS	Data_TXFIFO,R24
(0022)   
(0023)   //帧控制域,无安全,确认要求,数据帧,包含16位的目标地址,源地址,目标PAN标识符,源PAN标识符
(0024)   Data_TXFIFO[1]=0x88;     //高字节
    0234 E888      LDI	R24,0x88
    0235 93800102  STS	Data_TXFIFO+1,R24
(0025)   Data_TXFIFO[2]=0x01;     //低字节
    0237 E081      LDI	R24,1
    0238 93800103  STS	Data_TXFIFO+2,R24
(0026)   
(0027)   //目的PAN标识符
(0028)   Data_TXFIFO[4]=0x23;
    023A E283      LDI	R24,0x23
    023B 93800105  STS	0x105,R24
(0029)   Data_TXFIFO[5]=0x45;
    023D E485      LDI	R24,0x45
    023E 93800106  STS	0x106,R24
(0030)   
(0031)   //目的地址
(0032)   Data_TXFIFO[6]=0x15;
    0240 E185      LDI	R24,0x15
    0241 93800107  STS	0x107,R24
(0033)   Data_TXFIFO[7]=0x73; 
    0243 E783      LDI	R24,0x73
    0244 93800108  STS	0x108,R24
(0034)   
(0035)   //源PAN标识符
(0036)   Data_TXFIFO[8]=0x86;
    0246 E886      LDI	R24,0x86
    0247 93800109  STS	0x109,R24
(0037)   Data_TXFIFO[9]=0x49;
    0249 E489      LDI	R24,0x49
    024A 9380010A  STS	0x10A,R24
(0038)   
(0039)   //源地址
(0040)   Data_TXFIFO[10]=0x59;
    024C E589      LDI	R24,0x59
    024D 9380010B  STS	0x10B,R24
(0041)   Data_TXFIFO[11]=0x04;
    024F E084      LDI	R24,4
    0250 9380010C  STS	0x10C,R24
(0042)   
(0043)   //有效负载
(0044)   for (i=12;i<TX_length;i++)
    0252 E04C      LDI	R20,0xC
    0253 C00A      RJMP	0x025E
(0045)   {
(0046)     Data_TXFIFO[i]=i-12;
    0254 E081      LDI	R24,1
    0255 E091      LDI	R25,1
    0256 2FE4      MOV	R30,R20
    0257 27FF      CLR	R31
    0258 0FE8      ADD	R30,R24
    0259 1FF9      ADC	R31,R25
    025A 2F84      MOV	R24,R20
    025B 508C      SUBI	R24,0xC
    025C 8380      STD	Z+0,R24
    025D 9543      INC	R20
    025E 3740      CPI	R20,0x70
    025F F3A0      BCS	0x0254
(0047)   }
(0048)   
(0049)   Set_Configure();     //初始化设置配置字
    0260 940E01DB  CALL	_Set_Configure
(0050)   PwDown_Idle();       //从掉电模式转换到空闲模式
    0262 940E01BC  CALL	_PwDown_Idle
(0051)   
(0052)   j=0;
    0264 2766      CLR	R22
    0265 2777      CLR	R23
    0266 C021      RJMP	0x0288
(0053)   while(1)
(0054)   {
(0055)     j++;
    0267 5F6F      SUBI	R22,0xFF
    0268 4F7F      SBCI	R23,0xFF
(0056) 	if (j==2048)
    0269 3060      CPI	R22,0
    026A E0E8      LDI	R30,0x8
    026B 077E      CPC	R23,R30
    026C F409      BNE	0x026E
(0057) 	{
(0058) 	  break;
    026D C01B      RJMP	0x0289
(0059) 	}
(0060) 	AllStates_Idle();
    026E 940E01CA  CALL	_AllStates_Idle
(0061) 	//序列号
(0062) 	Data_TXFIFO[3]=serial_num;
    0270 90200100  LDS	R2,serial_num
    0272 92200104  STS	Data_TXFIFO+3,R2
(0063) 	serial_num++;
    0274 2D82      MOV	R24,R2
    0275 5F8F      SUBI	R24,0xFF
    0276 93800100  STS	serial_num,R24
(0064) 	if(serial_num==250)
    0278 3F8A      CPI	R24,0xFA
    0279 F419      BNE	0x027D
(0065) 	{
(0066) 	  serial_num=0;
    027A 2422      CLR	R2
    027B 92200100  STS	serial_num,R2
(0067) 	}
(0068) 	
(0069) 	Write_TXFIFO(TX_length,Data_TXFIFO);  //将数据写入到TXFIFO中
    027D E021      LDI	R18,1
    027E E031      LDI	R19,1
    027F E700      LDI	R16,0x70
    0280 940E00DE  CALL	_Write_TXFIFO
(0070) 	Idle_Tx();    //启动发送
    0282 940E01CD  CALL	_Idle_Tx
(0071) 	
(0072) 	Delay10ms();
    0284 940E0211  CALL	_Delay10ms
(0073) 	Delay10ms();
    0286 940E0211  CALL	_Delay10ms
    0288 CFDE      RJMP	0x0267
(0074)   }
(0075)   LED_RED;
    0289 98D8      CBI	0x1B,0
    028A 9AD9      SBI	0x1B,1
(0076)   while(1){;}
    028B CFFF      RJMP	0x028B
    028C 9508      RET
FILE: C:\AVR\cc2420驱动程序\code\spi.c
(0001) #include"spi.h"
(0002) 
(0003) /*************************************************
(0004) 函数功能:初始化SPI口
(0005) 输入参数:无
(0006) 返回值:无
(0007) **************************************************/
(0008) void init_spi(void)
(0009) { 
(0010)     unsigned char temp;
(0011) 	DDRB|=(1<<MOSI)|(1<<SCK)|(1<<CSn);//设置MOSI、SCK和SS 为输出,其他为输入 
_init_spi:
  temp                 --> R16
    028D B387      IN	R24,0x17
    028E 6087      ORI	R24,7
    028F BB87      OUT	0x17,R24
(0012) 	DDRE|=(1<<VREGEN)|(1<<RST);
    0290 B182      IN	R24,0x02
    0291 608C      ORI	R24,0xC
    0292 B982      OUT	0x02,R24
(0013) 
(0014)     SPCR = (1<<SPE)|(1<<MSTR);//|(1<<SPR0);// 使能SPI,主机模式,设置时钟速率为fck/4
    0293 E580      LDI	R24,0x50
    0294 B98D      OUT	0x0D,R24
(0015) 	SPSR = BIT(SPI2X);     //SPI时钟加倍
    0295 E081      LDI	R24,1
    0296 B98E      OUT	0x0E,R24
(0016) 
(0017)     temp = SPSR; //!!! 读一次SPSR为了清除SPIF位和WCOL位
    0297 B10E      IN	R16,0x0E
(0018) 
(0019)     temp = SPDR; //清空SPI,和中断标志,使SPI空闲
    0298 B10F      IN	R16,0x0F
    0299 9508      RET
_SpiWrite:
  temp                 --> R20
  temp1                --> R22
  data_spi             --> R16
    029A 940E02B5  CALL	push_gset2
(0020) }
(0021) 
(0022) /**************************************************
(0023) 函数功能:写SPI一个字节
(0024) 输入参数:SPI指令
(0025) 返回值:对应指令的结果
(0026) **************************************************/
(0027) unsigned char SpiWrite(unsigned char data_spi)
(0028) { 
(0029)   unsigned char temp,temp1;
(0030)   SPDR=data_spi;
    029C B90F      OUT	0x0F,R16
(0031)   while(!(SPSR & (1<<SPIF))){;}//等待传输结束
    029D 9B77      SBIS	0x0E,7
    029E CFFE      RJMP	0x029D
(0032)   temp1=SPDR;
    029F B16F      IN	R22,0x0F
(0033)   temp = SPSR;
    02A0 B14E      IN	R20,0x0E
(0034)   
(0035)   return temp1;
    02A1 2F06      MOV	R16,R22
    02A2 940E02A9  CALL	pop_gset2
    02A4 9508      RET
(0036) }
(0037) 
(0038) /*******************************************
(0039) *函数功能:使能SPI口
(0040) *输入参数:无
(0041) *输出参数:无
(0042) *返 回 值:无
(0043) ********************************************/
(0044) void enable_spi(void) 
(0045) {
(0046)   PORTB &=~(1<<CSn);     //使能SPI口
_enable_spi:
    02A5 98C0      CBI	0x18,0
    02A6 9508      RET
(0047) }
(0048) 
(0049) /*******************************************
(0050) *函数功能:禁止SPI口
(0051) *输入参数:无
(0052) *输出参数:无
(0053) *返 回 值:无
(0054) ********************************************/
(0055) void disable_spi(void)
(0056) {
(0057)   PORTB |=(1<<CSn);      //禁止SPI口  
FILE: <library>
_disable_spi:
    02A7 9AC0      SBI	0x18,0
    02A8 9508      RET
pop_gset2:
    02A9 E0E2      LDI	R30,2
    02AA 940C02BB  JMP	pop
pop_gset4:
    02AC E0E8      LDI	R30,0x8
    02AD 940C02BB  JMP	pop
push_gset5:
    02AF 92FA      ST	R15,-Y
    02B0 92EA      ST	R14,-Y
push_gset4:
    02B1 92DA      ST	R13,-Y
    02B2 92CA      ST	R12,-Y
push_gset3:
    02B3 92BA      ST	R11,-Y
    02B4 92AA      ST	R10,-Y
push_gset2:
    02B5 937A      ST	R23,-Y
    02B6 936A      ST	R22,-Y
push_gset1:
    02B7 935A      ST	R21,-Y
    02B8 934A      ST	R20,-Y
    02B9 9508      RET
pop_gset1:
    02BA E0E1      LDI	R30,1
pop:
    02BB 9149      LD	R20,Y+
    02BC 9159      LD	R21,Y+
    02BD FDE0      SBRC	R30,0
    02BE 9508      RET
    02BF 9169      LD	R22,Y+
    02C0 9179      LD	R23,Y+
    02C1 FDE1      SBRC	R30,1
    02C2 9508      RET
    02C3 90A9      LD	R10,Y+
    02C4 90B9      LD	R11,Y+
    02C5 FDE2      SBRC	R30,2
    02C6 9508      RET
    02C7 90C9      LD	R12,Y+
    02C8 90D9      LD	R13,Y+
    02C9 FDE3      SBRC	R30,3
    02CA 9508      RET
    02CB 90E9      LD	R14,Y+
    02CC 90F9      LD	R15,Y+
    02CD 9508      RET

⌨️ 快捷键说明

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