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

📄 test.lst

📁 avr单片机与flash存储器通信程序,调试通过,希望对大家有所帮助.
💻 LST
📖 第 1 页 / 共 4 页
字号:
    022E C02B      RJMP	0x025A
(0059) 	  else if((temp&0x02)==0)right=3;
    022F 90200157  LDS	R2,temp
    0231 FC21      SBRC	R2,1
    0232 C004      RJMP	0x0237
    0233 E083      LDI	R24,3
    0234 93800064  STS	right,R24
    0236 C023      RJMP	0x025A
(0060) 	  else if((temp&0x04)==0)right=5;
    0237 90200157  LDS	R2,temp
    0239 FC22      SBRC	R2,2
    023A C01F      RJMP	0x025A
    023B E085      LDI	R24,5
    023C 93800064  STS	right,R24
(0061)   }
    023E C01B      RJMP	0x025A
(0062)   else if((key&0x20)!=0)
    023F 90200158  LDS	R2,key
    0241 FE25      SBRS	R2,5
    0242 C017      RJMP	0x025A
(0063)   {
(0064) 	  if((temp&0x01)==0)right=2;
    0243 90200157  LDS	R2,temp
    0245 FC20      SBRC	R2,0
    0246 C004      RJMP	0x024B
    0247 E082      LDI	R24,2
    0248 93800064  STS	right,R24
    024A C00F      RJMP	0x025A
(0065) 	  else if((temp&0x02)==0)right=4;
    024B 90200157  LDS	R2,temp
    024D FC21      SBRC	R2,1
    024E C004      RJMP	0x0253
    024F E084      LDI	R24,4
    0250 93800064  STS	right,R24
    0252 C007      RJMP	0x025A
(0066) 	  else if((temp&0x04)==0)right=6;
    0253 90200157  LDS	R2,temp
    0255 FC22      SBRC	R2,2
    0256 C003      RJMP	0x025A
    0257 E086      LDI	R24,6
    0258 93800064  STS	right,R24
    025A CF78      RJMP	0x01D3
    025B 9508      RET
_delay:
  x                    --> R20
  ticks                --> R16
    025C D2BB      RCALL	push_gset1
(0067)   }
(0068) /////////////////////////////////////
(0069)  }
(0070)  
(0071) 
(0072) }
(0073) //////////////////////////////
(0074) void delay(uint ticks)
(0075) {
(0076)  uchar x;
(0077)  for(;ticks!=0;ticks--)for(x=100;x!=0;x--); 
    025D C007      RJMP	0x0265
    025E E644      LDI	R20,0x64
    025F C001      RJMP	0x0261
    0260 954A      DEC	R20
    0261 2344      TST	R20
    0262 F7E9      BNE	0x0260
    0263 5001      SUBI	R16,1
    0264 4010      SBCI	R17,0
    0265 3000      CPI	R16,0
    0266 0701      CPC	R16,R17
    0267 F7B1      BNE	0x025E
    0268 D2B2      RCALL	pop_gset1
    0269 9508      RET
_display:
  i                    --> R20
    026A D2AD      RCALL	push_gset1
(0078) }
(0079) 
(0080) void display()
(0081) {
(0082)  uchar i;
(0083)  PORTA=~leddata;
    026B 90200062  LDS	R2,leddata
    026D 9420      COM	R2
    026E BA2B      OUT	0x1B,R2
(0084)  PORTC&=~LED;
    026F 98AD      CBI	0x15,5
(0085)  delay(1);
    0270 E001      LDI	R16,1
    0271 E010      LDI	R17,0
    0272 DFE9      RCALL	_delay
(0086)  PORTC|=LED;
    0273 9AAD      SBI	0x15,5
(0087) ///////////
(0088)  PORTA=Tab[left];
    0274 E284      LDI	R24,0x24
    0275 E090      LDI	R25,0
    0276 91E00063  LDS	R30,left
    0278 27FF      CLR	R31
    0279 0FE8      ADD	R30,R24
    027A 1FF9      ADC	R31,R25
    027B 91E4      LPM	R30,0(Z)
    027C BBEB      OUT	0x1B,R30
(0089)  PORTC&=~SEG0;
    027D 98AF      CBI	0x15,7
(0090)  delay(1);
    027E E001      LDI	R16,1
    027F E010      LDI	R17,0
    0280 DFDB      RCALL	_delay
(0091)  PORTC|=SEG0;
    0281 9AAF      SBI	0x15,7
(0092) /////////////////
(0093)  PORTA=Tab[right];
    0282 E284      LDI	R24,0x24
    0283 E090      LDI	R25,0
    0284 91E00064  LDS	R30,right
    0286 27FF      CLR	R31
    0287 0FE8      ADD	R30,R24
    0288 1FF9      ADC	R31,R25
    0289 91E4      LPM	R30,0(Z)
    028A BBEB      OUT	0x1B,R30
(0094)  PORTC&=~SEG1;
    028B 98AE      CBI	0x15,6
(0095)  delay(1);
    028C E001      LDI	R16,1
    028D E010      LDI	R17,0
    028E DFCD      RCALL	_delay
(0096)  PORTC|=SEG1;
    028F 9AAE      SBI	0x15,6
(0097) //////////////////
(0098)  for(i=0;i!=8;i++)
    0290 2744      CLR	R20
    0291 C032      RJMP	0x02C4
(0099)  {
(0100) 
(0101)   PORTB|=0x01;
    0292 9AC0      SBI	0x18,0
(0102)   SPDR=pic1[i];
    0293 E585      LDI	R24,0x55
    0294 E090      LDI	R25,0
    0295 2FE4      MOV	R30,R20
    0296 27FF      CLR	R31
    0297 0FE8      ADD	R30,R24
    0298 1FF9      ADC	R31,R25
    0299 91E4      LPM	R30,0(Z)
    029A B9EF      OUT	0x0F,R30
(0103)   SomeNop
    029B 0000      NOP
    029C 0000      NOP
    029D 0000      NOP
    029E 0000      NOP
    029F 0000      NOP
    02A0 0000      NOP
    02A1 0000      NOP
    02A2 0000      NOP
    02A3 0000      NOP
    02A4 0000      NOP
    02A5 0000      NOP
    02A6 0000      NOP
    02A7 0000      NOP
    02A8 0000      NOP
    02A9 0000      NOP
    02AA 0000      NOP
    02AB 0000      NOP
    02AC 0000      NOP
(0104)   PORTB&=0xf1;
    02AD B388      IN	R24,0x18
    02AE 7F81      ANDI	R24,0xF1
    02AF BB88      OUT	0x18,R24
(0105)   PORTB|=line[i+index];
    02B0 90200069  LDS	R2,index
    02B2 2433      CLR	R3
    02B3 2FE4      MOV	R30,R20
    02B4 27FF      CLR	R31
    02B5 0DE2      ADD	R30,R2
    02B6 1DF3      ADC	R31,R3
    02B7 E485      LDI	R24,0x45
    02B8 E090      LDI	R25,0
    02B9 0FE8      ADD	R30,R24
    02BA 1FF9      ADC	R31,R25
    02BB 91E4      LPM	R30,0(Z)
    02BC B228      IN	R2,0x18
    02BD 2A2E      OR	R2,R30
    02BE BA28      OUT	0x18,R2
(0106)   PORTB&=~0x01;
    02BF 98C0      CBI	0x18,0
(0107)   delay(1); 
    02C0 E001      LDI	R16,1
    02C1 E010      LDI	R17,0
    02C2 DF99      RCALL	_delay
    02C3 9543      INC	R20
    02C4 3048      CPI	R20,0x8
    02C5 F009      BEQ	0x02C7
    02C6 CFCB      RJMP	0x0292
    02C7 D253      RCALL	pop_gset1
    02C8 9508      RET
_writedata:
  lcddata              --> R20
    02C9 D24E      RCALL	push_gset1
    02CA 2F40      MOV	R20,R16
(0108)  }
(0109) }
(0110) 
(0111) /////////////////LCD///////////////////////
(0112) ///////////////////////////////
(0113) void writedata(uchar lcddata)
(0114) {
(0115) // E=1;
(0116)  PORTC|=E;
    02CB 9AAC      SBI	0x15,4
(0117) // RS=1;
(0118)  PORTC|=RS;
    02CC 9AAA      SBI	0x15,2
(0119) // RW=0;
(0120)  PORTA=lcddata;
    02CD BB4B      OUT	0x1B,R20
(0121) // E=0;
(0122)  PORTC&=~E;
    02CE 98AC      CBI	0x15,4
(0123)  delay(1);
    02CF E001      LDI	R16,1
    02D0 E010      LDI	R17,0
    02D1 DF8A      RCALL	_delay
    02D2 D248      RCALL	pop_gset1
    02D3 9508      RET
_writecom:
  lcddata              --> R20
    02D4 D243      RCALL	push_gset1
    02D5 2F40      MOV	R20,R16
(0124) }
(0125) /////////////////////////////////
(0126) void writecom(uchar lcddata)
(0127) {
(0128) // E=1;
(0129)  PORTC|=E;
    02D6 9AAC      SBI	0x15,4
(0130) // RS=0;
(0131)  PORTC&=~RS;
    02D7 98AA      CBI	0x15,2
(0132) // RW=0;
(0133)  PORTA=lcddata;
    02D8 BB4B      OUT	0x1B,R20
(0134) // E=0; 
(0135)  PORTC&=~E;
    02D9 98AC      CBI	0x15,4
(0136)  delay(1);
    02DA E001      LDI	R16,1
    02DB E010      LDI	R17,0
    02DC DF7F      RCALL	_delay
    02DD D23D      RCALL	pop_gset1
    02DE 9508      RET
_writeline:
  pt                   --> R20
  x                    --> R22
    02DF D236      RCALL	push_gset2
    02E0 01A9      MOVW	R20,R18
    02E1 2F60      MOV	R22,R16
(0137) }
(0138) 
(0139) void writeline(uchar x,uchar const *pt)
(0140) {
(0141)  if(x==0)
    02E2 2366      TST	R22
    02E3 F429      BNE	0x02E9
(0142)  {
(0143)   writecom(0x01);
    02E4 E001      LDI	R16,1
    02E5 DFEE      RCALL	_writecom
(0144)   writecom(0x80);
    02E6 E800      LDI	R16,0x80
    02E7 DFEC      RCALL	_writecom
(0145)  }
    02E8 C007      RJMP	0x02F0
(0146)  else
(0147)  {
(0148)   writedata(pt[x-1]);
    02E9 2FE6      MOV	R30,R22
    02EA 27FF      CLR	R31
    02EB 9731      SBIW	R30,1
    02EC 0FE4      ADD	R30,R20
    02ED 1FF5      ADC	R31,R21
    02EE 9104      LPM	R16,0(Z)
    02EF DFD9      RCALL	_writedata
(0149)  }
    02F0 D219      RCALL	pop_gset2
    02F1 9508      RET
(0150) }
(0151) 
(0152) ///////////////////////////////////
(0153) void initlcd()
(0154) {
(0155)  writecom(0x01);
_initlcd:
    02F2 E001      LDI	R16,1
    02F3 DFE0      RCALL	_writecom
(0156)  writecom(0x38);
    02F4 E308      LDI	R16,0x38
    02F5 DFDE      RCALL	_writecom
(0157)  writecom(0x0f);
    02F6 E00F      LDI	R16,0xF
    02F7 DFDC      RCALL	_writecom
(0158)  writecom(0x06);
    02F8 E006      LDI	R16,6
    02F9 DFDA      RCALL	_writecom
(0159)  writecom(0x01);
    02FA E001      LDI	R16,1
    02FB DFD8      RCALL	_writecom
(0160)  writecom(0x80);
    02FC E800      LDI	R16,0x80
    02FD DFD6      RCALL	_writecom
    02FE 9508      RET
_GetKey:
  temp                 --> R20
  key                  --> R22
    02FF D216      RCALL	push_gset2
(0161) }
(0162) ///////////////////////////////////
(0163) 
(0164) 
(0165) 
(0166) 
(0167) //////////////////////////////////
(0168) uchar GetKey(void)
(0169) {
(0170)  uchar key;
(0171)  uchar temp;
(0172)  //temp的高4位是按下的列
(0173)  //temp低4位是按下的行
(0174)  DDRD&=~(C0+C1+C2);//输
    0300 B381      IN	R24,0x11
    0301 7E83      ANDI	R24,0xE3
    0302 BB81      OUT	0x11,R24
(0175)  DDRD|=R0+R1;//输
    0303 B381      IN	R24,0x11
    0304 6C80      ORI	R24,0xC0
    0305 BB81      OUT	0x11,R24
(0176)  PORTD&=~(R0+R1);
    0306 B382      IN	R24,0x12
    0307 738F      ANDI	R24,0x3F
    0308 BB82      OUT	0x12,R24
(0177)  key=PIND;
    0309 B360      IN	R22,0x10
(0178)  key>>=2;
    030A 9566      LSR	R22
    030B 9566      LSR	R22
(0179)  key&=0x07;
    030C 7067      ANDI	R22,7
(0180)  if(key!=0x07)
    030D 3067      CPI	R22,7
    030E F0D1      BEQ	0x0329
(0181)  {
(0182) 	  delay(1);
    030F E001      LDI	R16,1
    0310 E010      LDI	R17,0
    0311 DF4A      RCALL	_delay
(0183) 	  key=PIND;
    0312 B360      IN	R22,0x10
(0184) 	  key>>=2;
    0313 9566      LSR	R22
    0314 9566      LSR	R22
(0185) 	  key&=0x07;
    0315 7067      ANDI	R22,7
(0186) 	  if(key!=0x07) 
    0316 3067      CPI	R22,7
    0317 F089      BEQ	0x0329
(0187) 		  {
(0188) 		   //确实有键按下
(0189) 			temp=key;
    0318 2F46      MOV	R20,R22
(0190)  			DDRD|=C0+C1+C2;//输出
    0319 B381      IN	R24,0x11
    031A 618C      ORI	R24,0x1C
    031B BB81      OUT	0x11,R24
(0191)  			DDRD&=~(R0+R1);//输入
    031C B381      IN	R24,0x11
    031D 738F      ANDI	R24,0x3F
    031E BB81      OUT	0x11,R24
(0192) 			PORTD|=C0+C1+C2;
    031F B382      IN	R24,0x12
    0320 618C      ORI	R24,0x1C
    0321 BB82      OUT	0x12,R24
(0193) 			key=PIND;
    0322 B360      IN	R22,0x10
(0194) 			key>>=2;
    0323 9566      LSR	R22
    0324 9566      LSR	R22
(0195) 			key&=0x30;
    0325 7360      ANDI	R22,0x30
(0196) 			temp+=key;
    0326 0F46      ADD	R20,R22
(0197) 			return temp;
    0327 2F04      MOV	R16,R20
    0328 C001      RJMP	0x032A
(0198) 		   }
(0199)  }

⌨️ 快捷键说明

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