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

📄 nrf905_send.lst

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0027)   if(count==number) 
    0222 9020013B  LDS	R2,_number
    0224 9030013C  LDS	R3,_number+1
    0226 1582      CP	R24,R2
    0227 0593      CPC	R25,R3
    0228 F441      BNE	0x0231
(0028)   {
(0029)   TIMSK=0x00;
    0229 2422      CLR	R2
    022A BE29      OUT	0x39,R2
(0030)   flag=1;
    022B E081      LDI	R24,1
    022C E090      LDI	R25,0
    022D 939000B4  STS	0xB4,R25
    022F 938000B3  STS	0xB3,R24
(0031)   }
(0032) }
    0231 9029      LD	R2,Y+
    0232 BE2F      OUT	0x3F,R2
    0233 9199      LD	R25,Y+
    0234 9189      LD	R24,Y+
    0235 9039      LD	R3,Y+
    0236 9029      LD	R2,Y+
    0237 9518      RETI
(0033) //call this routine to initialise all peripherals
(0034) void init_devices1(void)
(0035) {
(0036)  
(0037)  //stop errant interrupts until set up
(0038)  CLI(); //disable all interrupts
_init_devices1:
    0238 94F8      BCLR	7
(0039)  timer0_init();
    0239 DFD0      RCALL	_timer0_init
(0040)  count=0;
    023A 2422      CLR	R2
    023B 2433      CLR	R3
    023C 923000B2  STS	0xB2,R3
    023E 922000B1  STS	0xB1,R2
(0041)  flag=0;
    0240 923000B4  STS	0xB4,R3
    0242 922000B3  STS	0xB3,R2
(0042)  
(0043)  TIMSK = 0x01; //timer interrupt sources
    0244 E081      LDI	R24,1
    0245 BF89      OUT	0x39,R24
(0044)  SEI(); //re-enable interrupts
    0246 9478      BSET	7
(0045)  //all peripherals are now initialised
(0046) }
    0247 9508      RET
(0047) 
(0048) /*
(0049) int delay_10ms(int no)
(0050) {
(0051)   number=no;
(0052)   init_devices1();
(0053)  while(1) 
(0054)  {
(0055)   if(flag==1)
(0056)   break;
(0057)   }
(0058)   return 0;
(0059) }
(0060) */
(0061) 
(0062) int delay_10ms(int no)
(0063) {
(0064)   for(;no>0;no--)
_delay_10ms:
  no                   --> R16
    0248 C01A      RJMP	0x0263
(0065)    for (i=0;i<700;i++) ;
    0249 2422      CLR	R2
    024A 2433      CLR	R3
    024B 923000B0  STS	0xB0,R3
    024D 922000AF  STS	0xAF,R2
    024F C009      RJMP	0x0259
    0250 918000AF  LDS	R24,0xAF
    0252 919000B0  LDS	R25,0xB0
    0254 9601      ADIW	R24,1
    0255 939000B0  STS	0xB0,R25
    0257 938000AF  STS	0xAF,R24
    0259 918000AF  LDS	R24,0xAF
    025B 919000B0  LDS	R25,0xB0
    025D 3B8C      CPI	R24,0xBC
    025E E0E2      LDI	R30,2
    025F 079E      CPC	R25,R30
    0260 F378      BCS	0x0250
    0261 5001      SUBI	R16,1
    0262 4010      SBCI	R17,0
    0263 2422      CLR	R2
    0264 2433      CLR	R3
    0265 1620      CP	R2,R16
    0266 0631      CPC	R3,R17
    0267 F30C      BLT	0x0249
(0066)    
(0067)     return 0;
    0268 2700      CLR	R16
    0269 2711      CLR	R17
    026A 9508      RET
_delay_us:
  m                    --> R20
  us                   --> R16
    026B D6D6      RCALL	push_gset1
(0068) }
(0069) 
(0070) void delay_us(uint us)
(0071) {
(0072)   uint m;
(0073)   for (m=0;m<us;m++)
    026C 2744      CLR	R20
    026D 2755      CLR	R21
    026E C008      RJMP	0x0277
(0074)   {NOP();NOP();NOP();NOP();NOP();NOP();
    026F 0000      NOP
    0270 0000      NOP
    0271 0000      NOP
    0272 0000      NOP
    0273 0000      NOP
    0274 0000      NOP
    0275 5F4F      SUBI	R20,0xFF
    0276 4F5F      SBCI	R21,0xFF
    0277 1740      CP	R20,R16
    0278 0751      CPC	R21,R17
    0279 F3A8      BCS	0x026F
(0075)   }
(0076) }
    027A D6CA      RCALL	pop_gset1
    027B 9508      RET
FILE: E:\公司用\atmega8l\final\nrf905_send1\uart.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include "confg.h"
(0004) /*****************************************/
(0005) //文件名:usart int .c
(0006) //功能:中断模式串口通信的应用
(0007) //目标MC U:ATYnega8
(0008) //晶振8MHZ
(0009) /*****************************************/
(0010) //通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
(0011) 
(0012) #define fosc 4000000   //晶振频率
(0013) #define baud 9600      //波特率
(0014) 
(0015) 
(0016) 
(0017) void putch(unsigned char c)
(0018) {
(0019)       //等待写入UDR的字符被送到发送移位寄存器
(0020)         while(!(UCSRA&(1<<UDRE)));
_putch:
  c                    --> R16
    027C 9B5D      SBIS	0x0B,5
    027D CFFE      RJMP	_putch
(0021)           UDR=c;
    027E B90C      OUT	0x0C,R16
(0022) }
    027F 9508      RET
(0023) //字符输入函数
(0024) unsigned char getch(void)
(0025) {
(0026) //等待接收字符
(0027) while(!(UCSRA&(1<<RXC))) ;
_getch:
    0280 9B5F      SBIS	0x0B,7
    0281 CFFE      RJMP	_getch
(0028)         return  UDR;
    0282 B10C      IN	R16,0x0C
    0283 9508      RET
_putss:
  s                    --> R20
    0284 D6BD      RCALL	push_gset1
    0285 01A8      MOVW	R20,R16
(0029) }
(0030) 
(0031) //字符串输出函数
(0032) int putss(char  * s )
(0033) {
    0286 C005      RJMP	0x028C
(0034) while(*s)
(0035) 	{
(0036) 	putch(*s);
    0287 01FA      MOVW	R30,R20
    0288 8100      LDD	R16,Z+0
    0289 DFF2      RCALL	_putch
(0037) 	s++;
    028A 5F4F      SUBI	R20,0xFF
    028B 4F5F      SBCI	R21,0xFF
    028C 01FA      MOVW	R30,R20
    028D 8020      LDD	R2,Z+0
    028E 2022      TST	R2
    028F F7B9      BNE	0x0287
(0038) 	}
(0039) return  1;
    0290 E001      LDI	R16,1
    0291 E010      LDI	R17,0
    0292 D6B2      RCALL	pop_gset1
    0293 9508      RET
_puts_hh:
  s                    --> R20
    0294 D6AD      RCALL	push_gset1
    0295 01A8      MOVW	R20,R16
(0040) }
(0041) 
(0042) //含回车换行的字符串输出函数
(0043) void puts_hh(char *s)
(0044) {
    0296 C005      RJMP	0x029C
(0045) while(*s)
(0046) 	{
(0047) putch(*s);
    0297 01FA      MOVW	R30,R20
    0298 8100      LDD	R16,Z+0
    0299 DFE2      RCALL	_putch
(0048) s++;
    029A 5F4F      SUBI	R20,0xFF
    029B 4F5F      SBCI	R21,0xFF
    029C 01FA      MOVW	R30,R20
    029D 8020      LDD	R2,Z+0
    029E 2022      TST	R2
    029F F7B9      BNE	0x0297
(0049) 	}
(0050) putch(0X0A);//回车
    02A0 E00A      LDI	R16,0xA
    02A1 DFDA      RCALL	_putch
(0051) putch(0X0D);//换行
    02A2 E00D      LDI	R16,0xD
    02A3 DFD8      RCALL	_putch
(0052) }
    02A4 D6A0      RCALL	pop_gset1
    02A5 9508      RET
(0053) //UART初始化
(0054) void uart_init(void)
(0055) {
(0056)       UCSRB=(1<<RXEN)|(1<<TXEN);
_uart_init:
    02A6 E188      LDI	R24,0x18
    02A7 B98A      OUT	0x0A,R24
(0057)       UBRRL=(fosc/16/baud-1)%256;
    02A8 E189      LDI	R24,0x19
    02A9 B989      OUT	0x09,R24
(0058)       UBRRH=(fosc/16/baud-1)/256;
    02AA 2422      CLR	R2
    02AB BC20      OUT	0x20,R2
(0059)     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
    02AC E886      LDI	R24,0x86
    02AD BD80      OUT	0x20,R24
(0060)     //允许发送和接收,接收完成中断允许
(0061)      
(0062) }
    02AE 9508      RET
_AdcConvertStd:
  min_value            --> R14
  max_value            --> R20
  min_id               --> R12
  max_id               --> R10
  ret                  --> Y+0
  i                    --> R22
    02AF D6B2      RCALL	push_gset5
    02B0 9722      SBIW	R28,2
FILE: E:\公司用\atmega8l\final\nrf905_send1\ad.c
(0001) 
(0002) /********************************
(0003)   ATMega8 查询方式 A/D转换测试程序
(0004)   文件名:main.c
(0005)   编译:WinAVR-20070122
(0006) 
(0007)             外部4MHz晶振
(0008) *******************************/
(0009) 
(0010) #include "confg.h"
(0011) 
(0012) #define _BV(n) (1<<n)
(0013) 
(0014) static unsigned int g_aAdValue[8];  //A/D转换缓冲区
(0015) 
(0016) 
(0017) //AD转换8次去掉最高和最低后取平均值返回
(0018) unsigned int AdcConvertStd(void)
(0019) {
(0020)   char i;
(0021)   unsigned int  ret;
(0022)   char max_id,min_id,max_value,min_value;
(0023)   
(0024)   ADMUX=0X45;//参考电压VCC
    02B1 E485      LDI	R24,0x45
    02B2 B987      OUT	0x07,R24
(0025)   ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
    02B3 E880      LDI	R24,0x80
    02B4 B986      OUT	0x06,R24
(0026)   //连续转换8次
(0027)   for(i=0;i<8;i++)
    02B5 2766      CLR	R22
    02B6 C024      RJMP	0x02DB
(0028)   {
(0029)     ADCSRA|=_BV(ADSC);
    02B7 9A36      SBI	0x06,6
(0030)     delay_us(30);
    02B8 E10E      LDI	R16,0x1E
    02B9 E010      LDI	R17,0
    02BA DFB0      RCALL	_delay_us
    02BB C003      RJMP	0x02BF
(0031)     while(ADCSRA&_BV(ADSC))
(0032)     delay_us(30);
    02BC E10E      LDI	R16,0x1E
    02BD E010      LDI	R17,0
    02BE DFAC      RCALL	_delay_us
    02BF 9936      SBIC	0x06,6
    02C0 CFFB      RJMP	0x02BC
(0033)     ret=ADCL;
    02C1 B024      IN	R2,0x04
    02C2 2433      CLR	R3
    02C3 8239      STD	Y+1,R3
    02C4 8228      STD	Y+0,R2
(0034)     ret|=(unsigned int)(ADCH<<8);
    02C5 B025      IN	R2,0x05
    02C6 2433      CLR	R3
    02C7 2C32      MOV	R3,R2
    02C8 2422      CLR	R2
    02C9 8008      LDD	R0,Y+0
    02CA 8019      LDD	R1,Y+1
    02CB 2802      OR	R0,R2
    02CC 2813      OR	R1,R3
    02CD 8219      STD	Y+1,R1
    02CE 8208      STD	Y+0,R0
(0035)     g_aAdValue[i]=ret;
    02CF E082      LDI	R24,2
    02D0 9F86      MUL	R24,R22
    02D1 01F0      MOVW	R30,R0
    02D2 E38D      LDI	R24,0x3D
    02D3 E091      LDI	R25,1
    02D4 0FE8      ADD	R30,R24
    02D5 1FF9      ADC	R31,R25
    02D6 8008      LDD	R0,Y+0
    02D7 8019      LDD	R1,Y+1
    02D8 8211      STD	Z+1,R1
    02D9 8200      STD	Z+0,R0
    02DA 9563      INC	R22
    02DB 3068      CPI	R22,0x8
    02DC F2D0      BCS	0x02B7
(0036)   }
(0037)   ret=0;
    02DD 2400      CLR	R0
    02DE 2411      CLR	R1
    02DF 8219      STD	Y+1,R1
    02E0 8208      STD	Y+0,R0
(0038)   for(i=1;i<8;i++)
    02E1 E061      LDI	R22,1
    02E2 C010      RJMP	0x02F3
(0039)     ret+=g_aAdValue[i];
    02E3 E082      LDI	R24,2
    02E4 9F86      MUL	R24,R22
    02E5 01F0      MOVW	R30,R0
    02E6 E38D      LDI	R24,0x3D
    02E7 E091      LDI	R25,1
    02E8 0FE8      ADD	R30,R24
    02E9 1FF9      ADC	R31,R25
    02EA 8020      LDD	R2,Z+0
    02EB 8031      LDD	R3,Z+1
    02EC 8008      LDD	R0,Y+0
    02ED 8019      LDD	R1,Y+1
    02EE 0C02      ADD	R0,R2
    02EF 1C13      ADC	R1,R3
    02F0 8219      STD	Y+1,R1
    02F1 8208      STD	Y+0,R0
    02F2 9563      INC	R22
    02F3 3068      CPI	R22,0x8
    02F4 F370      BCS	0x02E3
(0040)   
(0041)   //找到最大和最小值索引  
(0042)   ret/=7;
    02F5 E027      LDI	R18,7
    02F6 E030      LDI	R19,0
    02F7 8108      LDD	R16,Y+0
    02F8 8119      LDD	R17,Y+1
    02F9 D58B      RCALL	div16u
    02FA 8319      STD	Y+1,R17
    02FB 8308      STD	Y+0,R16
(0043)   max_id=min_id=1;
    02FC 24CC      CLR	R12
    02FD 94C3      INC	R12
    02FE 24AA      CLR	R10
    02FF 94A3      INC	R10
(0044)   max_value=min_value=0;
    0300 24EE      CLR	R14
    0301 2744      CLR	R20
(0045)   for(i=1;i<8;i++)
    0302 E061      LDI	R22,1
    0303 C04F      RJMP	0x0353
(0046)   {
(0047)     if(g_aAdValue[i]>ret)
    0304 E082      LDI	R24,2
    0305 9F86      MUL	R24,R22
    0306 01F0      MOVW	R30,R0
    0307 E38D      LDI	R24,0x3D
    0308 E091      LDI	R25,1
    0309 0FE8      ADD	R30,R24
    030A 1FF9      ADC	R31,R25
    030B 8020      LDD	R2,Z+0
    030C 8031      LDD	R3,Z+1
    030D 8008      LDD	R0,Y+0

⌨️ 快捷键说明

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