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

📄 rctest.lst

📁 一个关于AVR单片机的例程
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0212) PORTB &= ~LCD_DC_PIN ; // 传送命令
    01EC 98C2      CBI	0x18,2
    01ED C001      RJMP	0x01EF
(0213) else
(0214) PORTB |= LCD_DC_PIN ; // 传送数据
    01EE 9AC2      SBI	0x18,2
(0215) 
(0216) SPDR = data; // 传送数据到SPI寄存器
    01EF B90F      OUT	0x0F,R16
(0217) 
(0218) while ((SPSR & 0x80) == 0); // 等待数据传送完毕
    01F0 9B77      SBIS	0x0E,7
    01F1 CFFE      RJMP	0x01F0
(0219) 
(0220) PORTB |= LCD_CE_PIN ; // 关闭LCD
    01F2 9AC1      SBI	0x18,1
    01F3 9508      RET
(0221) }
(0222) /*--------------------------------------------------------------------------------------------------
(0223)   Name         :  Delay
(0224)   Description  :  Uncalibrated delay for LCD init routine.
(0225)   Argument(s)  :  None.
(0226)   Return value :  None.
(0227) --------------------------------------------------------------------------------------------------*/
(0228) static void Delay ( void )
(0229) {
(0230)     int i;
(0231)     for ( i = -12000; i < 12000; i++ );
_Delay:
  i                    --> R16
    01F4 E200      LDI	R16,0x20
    01F5 ED11      LDI	R17,0xD1
    01F6 5F0F      SUBI	R16,0xFF
    01F7 4F1F      SBCI	R17,0xFF
    01F8 3E00      CPI	R16,0xE0
    01F9 E2EE      LDI	R30,0x2E
    01FA 071E      CPC	R17,R30
    01FB F3D4      BLT	0x01F6
    01FC 9508      RET
_lcd_show:
  tmp                  --> R20
  i                    --> R22
  DOT                  --> R10
  r                    --> R12
    01FD 940E043B  CALL	push_gset4
    01FF 0159      MOVW	R10,R18
    0200 0168      MOVW	R12,R16
(0232) }
(0233) 
(0234) void lcd_show(unsigned int r,unsigned int DOT)
(0235) {
(0236)  unsigned char tmp=0,i=0;
    0201 2744      CLR	R20
    0202 2766      CLR	R22
(0237)  if(r >1000)
    0203 EE88      LDI	R24,0xE8
    0204 E093      LDI	R25,3
    0205 158C      CP	R24,R12
    0206 059D      CPC	R25,R13
    0207 F4C0      BCC	0x0220
(0238)  {
(0239)   tmp=r/1000;
    0208 EE28      LDI	R18,0xE8
    0209 E033      LDI	R19,3
    020A 0186      MOVW	R16,R12
    020B 940E0409  CALL	div16u
    020D 2F40      MOV	R20,R16
(0240)   for(i=0;i<5;i++)
    020E C00F      RJMP	0x021E
(0241)     LcdSend(FontLookup[tmp][i],1);
    020F E021      LDI	R18,1
    0210 E085      LDI	R24,5
    0211 9F84      MUL	R24,R20
    0212 0110      MOVW	R2,R0
    0213 E584      LDI	R24,0x54
    0214 E090      LDI	R25,0
    0215 0E28      ADD	R2,R24
    0216 1E39      ADC	R3,R25
    0217 2FE6      MOV	R30,R22
    0218 27FF      CLR	R31
    0219 0DE2      ADD	R30,R2
    021A 1DF3      ADC	R31,R3
    021B 9104      LPM	R16,0(Z)
    021C DFCC      RCALL	_LcdSend
    021D 9563      INC	R22
    021E 3065      CPI	R22,5
    021F F378      BCS	0x020F
(0242)  }
(0243)  if(r >100)
    0220 E684      LDI	R24,0x64
    0221 E090      LDI	R25,0
    0222 158C      CP	R24,R12
    0223 059D      CPC	R25,R13
    0224 F4E8      BCC	0x0242
(0244)  {
(0245)   tmp=(r%1000)/100;
    0225 EE28      LDI	R18,0xE8
    0226 E033      LDI	R19,3
    0227 0186      MOVW	R16,R12
    0228 940E0407  CALL	mod16u
    022A E624      LDI	R18,0x64
    022B E030      LDI	R19,0
    022C 940E0409  CALL	div16u
    022E 2F40      MOV	R20,R16
(0246)   for(i=0;i<5;i++)
    022F 2766      CLR	R22
    0230 C00F      RJMP	0x0240
(0247)     LcdSend(FontLookup[tmp][i],1);
    0231 E021      LDI	R18,1
    0232 E085      LDI	R24,5
    0233 9F84      MUL	R24,R20
    0234 0110      MOVW	R2,R0
    0235 E584      LDI	R24,0x54
    0236 E090      LDI	R25,0
    0237 0E28      ADD	R2,R24
    0238 1E39      ADC	R3,R25
    0239 2FE6      MOV	R30,R22
    023A 27FF      CLR	R31
    023B 0DE2      ADD	R30,R2
    023C 1DF3      ADC	R31,R3
    023D 9104      LPM	R16,0(Z)
    023E DFAA      RCALL	_LcdSend
    023F 9563      INC	R22
    0240 3065      CPI	R22,5
    0241 F378      BCS	0x0231
(0248)  }
(0249)  if(r >10)
    0242 E08A      LDI	R24,0xA
    0243 E090      LDI	R25,0
    0244 158C      CP	R24,R12
    0245 059D      CPC	R25,R13
    0246 F4E8      BCC	0x0264
(0250)  {
(0251)   tmp=(r%100)/10;
    0247 E624      LDI	R18,0x64
    0248 E030      LDI	R19,0
    0249 0186      MOVW	R16,R12
    024A 940E0407  CALL	mod16u
    024C E02A      LDI	R18,0xA
    024D E030      LDI	R19,0
    024E 940E0409  CALL	div16u
    0250 2F40      MOV	R20,R16
(0252)   for(i=0;i<5;i++)
    0251 2766      CLR	R22
    0252 C00F      RJMP	0x0262
(0253)     LcdSend(FontLookup[tmp][i],1);
    0253 E021      LDI	R18,1
    0254 E085      LDI	R24,5
    0255 9F84      MUL	R24,R20
    0256 0110      MOVW	R2,R0
    0257 E584      LDI	R24,0x54
    0258 E090      LDI	R25,0
    0259 0E28      ADD	R2,R24
    025A 1E39      ADC	R3,R25
    025B 2FE6      MOV	R30,R22
    025C 27FF      CLR	R31
    025D 0DE2      ADD	R30,R2
    025E 1DF3      ADC	R31,R3
    025F 9104      LPM	R16,0(Z)
    0260 DF88      RCALL	_LcdSend
    0261 9563      INC	R22
    0262 3065      CPI	R22,5
    0263 F378      BCS	0x0253
(0254)  }
(0255)  
(0256)  tmp=r%10;
    0264 E02A      LDI	R18,0xA
    0265 E030      LDI	R19,0
    0266 0186      MOVW	R16,R12
    0267 940E0407  CALL	mod16u
    0269 2F40      MOV	R20,R16
(0257)  
(0258)  for(i=0;i<5;i++)
    026A 2766      CLR	R22
    026B C00F      RJMP	0x027B
(0259)     LcdSend(FontLookup[tmp][i],1);
    026C E021      LDI	R18,1
    026D E085      LDI	R24,5
    026E 9F84      MUL	R24,R20
    026F 0110      MOVW	R2,R0
    0270 E584      LDI	R24,0x54
    0271 E090      LDI	R25,0
    0272 0E28      ADD	R2,R24
    0273 1E39      ADC	R3,R25
    0274 2FE6      MOV	R30,R22
    0275 27FF      CLR	R31
    0276 0DE2      ADD	R30,R2
    0277 1DF3      ADC	R31,R3
    0278 9104      LPM	R16,0(Z)
    0279 DF6F      RCALL	_LcdSend
    027A 9563      INC	R22
    027B 3065      CPI	R22,5
    027C F378      BCS	0x026C
(0260)  // 小数点
(0261)   for(i=0;i<5;i++)
    027D 2766      CLR	R22
    027E C00A      RJMP	0x0289
(0262)     LcdSend(FontLookup[10][i],1);
    027F E021      LDI	R18,1
    0280 E886      LDI	R24,0x86
    0281 E090      LDI	R25,0
    0282 2FE6      MOV	R30,R22
    0283 27FF      CLR	R31
    0284 0FE8      ADD	R30,R24
    0285 1FF9      ADC	R31,R25
    0286 9104      LPM	R16,0(Z)
    0287 DF61      RCALL	_LcdSend
    0288 9563      INC	R22
    0289 3065      CPI	R22,5
    028A F3A0      BCS	0x027F
(0263)  //
(0264)  for(i=0;i<5;i++)
    028B 2766      CLR	R22
    028C C016      RJMP	0x02A3
(0265)     LcdSend(FontLookup[DOT][i],1);
    028D E021      LDI	R18,1
    028E E005      LDI	R16,5
    028F E010      LDI	R17,0
    0290 932F      PUSH	R18
    0291 933F      PUSH	R19
    0292 0195      MOVW	R18,R10
    0293 940E0423  CALL	empy16s
    0295 0118      MOVW	R2,R16
    0296 913F      POP	R19
    0297 912F      POP	R18
    0298 E584      LDI	R24,0x54
    0299 E090      LDI	R25,0
    029A 0E28      ADD	R2,R24
    029B 1E39      ADC	R3,R25
    029C 2FE6      MOV	R30,R22
    029D 27FF      CLR	R31
    029E 0DE2      ADD	R30,R2
    029F 1DF3      ADC	R31,R3
    02A0 9104      LPM	R16,0(Z)
    02A1 DF47      RCALL	_LcdSend
    02A2 9563      INC	R22
    02A3 3065      CPI	R22,5
    02A4 F340      BCS	0x028D
(0266)  //K
(0267)   for(i=0;i<5;i++)
    02A5 2766      CLR	R22
    02A6 C00A      RJMP	0x02B1
(0268)     LcdSend(FontLookup[11][i],1);
    02A7 E021      LDI	R18,1
    02A8 E88B      LDI	R24,0x8B
    02A9 E090      LDI	R25,0
    02AA 2FE6      MOV	R30,R22
    02AB 27FF      CLR	R31
    02AC 0FE8      ADD	R30,R24
    02AD 1FF9      ADC	R31,R25
    02AE 9104      LPM	R16,0(Z)
    02AF DF39      RCALL	_LcdSend
    02B0 9563      INC	R22
    02B1 3065      CPI	R22,5
    02B2 F3A0      BCS	0x02A7
    02B3 940E0436  CALL	pop_gset4
    02B5 9508      RET
_main:
  RF                   --> Y+4
  DOT                  --> R22
  time2                --> R12
  time1                --> R14
  R_TMP                --> R20
  R                    --> Y+0
    02B6 972C      SBIW	R28,0xC
(0269) }
(0270) 
(0271) 
(0272) /*--------------------------------------------------------------------------------------------------
(0273)   Name         :  main
(0274)   Description  :  
(0275)   Argument(s)  :  
(0276)   Return value :  None.
(0277) --------------------------------------------------------------------------------------------------*/
(0278) /*
(0279) void main(void)
(0280) {  unsigned char X;  //v=0,按行显示,x对应某个bank(0~83)
(0281)    LcdInit();
(0282)   
(0283)    while(1)
(0284)   {
(0285)     LcdGotoXY(X_Init,Y_Init);
(0286)     for(X=0;X<X_Length;X++)LcdSend(X_TAB[X],1);
(0287)   }
(0288) }
(0289) */
(0290) 
(0291) void main(void)
(0292) {
(0293)  unsigned int time1=0,time2=0;
    02B7 24EE      CLR	R14
    02B8 24FF      CLR	R15
    02B9 24CC      CLR	R12
    02BA 24DD      CLR	R13
(0294)  float RF=46.0,R=0.0;
    02BB E102      LDI	R16,0x12
    02BC E012      LDI	R17,2
    02BD 940E0461  CALL	lpm32
    02BF 01FE      MOVW	R30,R28
    02C0 8304      STD	Z+4,R16
    02C1 8315      STD	Z+5,R17
    02C2 8326      STD	Z+6,R18
    02C3 8337      STD	Z+7,R19
    02C4 E00E      LDI	R16,0xE
    02C5 E012      LDI	R17,2
    02C6 940E0461  CALL	lpm32
    02C8 01FE      MOVW	R30,R28
    02C9 8300      STD	Z+0,R16
    02CA 8311      STD	Z+1,R17
    02CB 8322      STD	Z+2,R18
    02CC 8333      STD	Z+3,R19
(0295)  unsigned int R_TMP=0,DOT=0;
    02CD 2744      CLR	R20
    02CE 2755      CLR	R21
    02CF 2766      CLR	R22
    02D0 2777      CLR	R23
(0296)  timer_count=0;
    02D1 2422      CLR	R2
    02D2 2433      CLR	R3
    02D3 92300061  STS	timer_count+1,R3
    02D5 92200060  STS	timer_count,R2
(0297) 
(0298)  init_devices(); //全部输入,内部上拉
    02D7 DE82      RCALL	_init_devices
(0299) 
(0300)  DDRA |=(1<<2);
    02D8 9AD2      SBI	0x1A,2
(0301)  PORTA |=(1<<2); //PA2 输出,完成充电
    02D9 9ADA      SBI	0x1B,2
(0302)  Delay1s(1);             //延时等待充满
    02DA E001      LDI	R16,1
    02DB E010      LDI	R17,0
    02DC DEB3      RCALL	_Delay1s
(0303)  _NOP();
    02DD 0000      NOP
(0304)  DDRA &=~(1<<2); //输入,
    02DE 98D2      CBI	0x1A,2
(0305)  PORTA &=~(1<<2);
    02DF 98DA      CBI	0x1B,2
(0306)  
(0307)  timer0_init();
    02E0 DE5B      RCALL	_timer0_init
(0308)  DDRA |=(1<<1);  //
    02E1 9AD1      SBI	0x1A,1
(0309)  PORTA &=~(1<<1); //PA1 输出低,完成放电
    02E2 98D9      CBI	0x1B,1
(0310)  while(PINA&(1<<2)); //等待,放电完成,PINA2被拉低
    02E3 99CA      SBIC	0x19,2
    02E4 CFFE      RJMP	0x02E3
(0311)  TCCR0 = 0x00; //stop timer
    02E5 2422      CLR	R2
    02E6 BE23      OUT	0x33,R2
(0312)  time1=timer_count; //记录标准电阻的放电时间
    02E7 90E00060  LDS	R14,timer_count
    02E9 90F00061  LDS	R15,timer_count+1
(0313) 
(0314) 
(0315)  timer_count=0;
    02EB 2433      CLR	R3
    02EC 92300061  STS	timer_count+1,R3
    02EE 92200060  STS	timer_count,R2
(0316)  init_devices(); //全部输入,内部上拉
    02F0 DE69      RCALL	_init_devices
(0317)  DDRA |=(1<<2);
    02F1 9AD2      SBI	0x1A,2
(0318)  PORTA |=(1<<2); //PA2 输出,完成充电
    02F2 9ADA      SBI	0x1B,2
(0319)  Delay1s(1);             //延时等待充满
    02F3 E001      LDI	R16,1
    02F4 E010      LDI	R17,0
    02F5 DE9A      RCALL	_Delay1s
(0320)  _NOP();
    02F6 0000      NOP
(0321)  DDRA &=~(1<<2); //输入
    02F7 98D2      CBI	0x1A,2
(0322)  PORTA &=~(1<<2); //清内部上拉
    02F8 98DA      CBI	0x1B,2
(0323)  
(0324)  timer0_init();
    02F9 DE42      RCALL	_timer0_init
(0325)  DDRA |=(1<<0);  //
    02FA 9AD0      SBI	0x1A,0
(0326)  PORTA &=~(1<<0); //PA0 输出低,完成放电
    02FB 98D8      CBI	0x1B,0
(0327)  while(PINA&(1<<2)); //等待,让电完成,PINA2被拉低
    02FC 99CA      SBIC	0x19,2
    02FD CFFE      RJMP	0x02FC
(0328)  TCCR0 = 0x00; //stop timer
    02FE 2422      CLR	R2
    02FF BE23      OUT	0x33,R2
(0329)  time2=timer_count; //计算待测电阻的时间
    0300 90C00060  LDS	R12,timer_count
    0302 90D00061  LDS	R13,timer_count+1
(0330)  
(0331)  //开始计算阻值
(0332)  R=RF*time2/time1;
    0304 01FE      MOVW	R30,R28
    0305 8024      LDD	R2,Z+4
    0306 8035      LDD	R3,Z+5
    0307 8046      LDD	R4,Z+6
    0308 8057      LDD	R5,Z+7
    0309 925A      ST	R5,-Y
    030A 924A      ST	R4,-Y
    030B 923A      ST	R3,-Y
    030C 922A      ST	R2,-Y
    030D E00A      LDI	R16,0xA
    030E E012      LDI	R17,2
    030F 940E0461  CALL	lpm32
    0311 933A      ST	R19,-Y
    0312 932A      ST	R18,-Y
    0313 931A      ST	R17,-Y
    0314 930A      ST	R16,-Y
    0315 0186      MOVW	R16,R12
    0316 9516      LSR	R17
    0317 9507      ROR	R16
    0318 940E04BD  CALL	int2fp
    031A 933A      ST	R19,-Y
    031B 932A      ST	R18,-Y
    031C 931A      ST	R17,-Y
    031D 930A      ST	R16,-Y
    031E 940E0606  CALL	empy32fs
    0320 0186      MOVW	R16,R12
    0321 7001      ANDI	R16,1
    0322 7010      ANDI	R17,0
    0323 940E04BD  CALL	int2fp
    0325 933A      ST	R19,-Y
    0326 932A      ST	R18,-Y
    0327 931A      ST	R17,-Y
    0328 930A      ST	R16,-Y
    0329 940E0517  CALL	add32fs
    032B 940E0606  CALL	empy32fs
    032D E00A      LDI	R16,0xA
    032E E012      LDI	R17,2
    032F 940E0461  CALL	lpm32
    0331 933A      ST	R19,-Y
    0332 932A      ST	R18,-Y
    0333 931A      ST	R17,-Y
    0334 930A      ST	R16,-Y
    0335 0187      MOVW	R16,R14
    0336 9516      LSR	R17
    0337 9507      ROR	R16

⌨️ 快捷键说明

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