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

📄 testadc.lst

📁 AVR-MEGA8单片机中使用AD转换的一个例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
      DE E380      LDI	R24,0x30
      DF 9380 006E STS	LCD_COM,R24
(0130) 	Write_LCD_Com();//调用写指令子程序
      E1 DFA1      RCALL	_Write_LCD_Com
(0131) 	Delay(5);//39uS
      E2 E005      LDI	R16,5
      E3 E010      LDI	R17,0
      E4 DF72      RCALL	_Delay
(0132)  
(0133) 	LCD_COM =0x0C;//显示打开,光标关,反白不显示
      E5 E08C      LDI	R24,0xC
      E6 9380 006E STS	LCD_COM,R24
(0134) 	Write_LCD_Com();//调用写指令子程序
      E8 DF9A      RCALL	_Write_LCD_Com
(0135) 	Delay(5);//39uS
      E9 E005      LDI	R16,5
      EA E010      LDI	R17,0
      EB DF6B      RCALL	_Delay
(0136) 
(0137) 	LCD_COM =0x01;//清除屏幕显示,将DDRAM的地址计数器归零
      EC E081      LDI	R24,1
      ED 9380 006E STS	LCD_COM,R24
(0138) 	Write_LCD_Com();//调用写指令子程序
      EF DF93      RCALL	_Write_LCD_Com
(0139) 	Delay(5);//39uS
      F0 E005      LDI	R16,5
      F1 E010      LDI	R17,0
      F2 DF64      RCALL	_Delay
(0140) 
(0141) 	LCD_COM =0x06;//DDRAM的地址计数器(AC)加1
      F3 E086      LDI	R24,6
      F4 9380 006E STS	LCD_COM,R24
(0142) 	Write_LCD_Com();//调用写指令子程序
      F6 DF8C      RCALL	_Write_LCD_Com
(0143) 	Delay(5);//39uS
      F7 E005      LDI	R16,5
      F8 E010      LDI	R17,0
      F9 DF5D      RCALL	_Delay
(0144) 
(0145) 	AC_X=1;AC_Y=1;
      FA E081      LDI	R24,1
      FB 9380 006C STS	AC_X,R24
      FD 9380 006B STS	AC_Y,R24
      FF 9508      RET
_LCD_Contrl_Cursor:
  ON                   --> R10
     100 92AA      ST	R10,-Y
     101 2EA0      MOV	R10,R16
(0146) }
(0147) 
(0148) void LCD_Contrl_Cursor(uchar ON)		//打开游标显示
(0149) { 
(0150) 	if (ON) LCD_COM =0x0F;else LCD_COM=0x0C;	//ON:显示打开,光标开,反白显示
     102 20AA      TST	R10
     103 F021      BEQ	0x0108
     104 E08F      LDI	R24,0xF
     105 9380 006E STS	LCD_COM,R24
     107 C003      RJMP	0x010B
     108 E08C      LDI	R24,0xC
     109 9380 006E STS	LCD_COM,R24
(0151) 	Write_LCD_Com();//调用写指令子程序
     10B DF77      RCALL	_Write_LCD_Com
(0152) 	Delay(5);//39uS
     10C E005      LDI	R16,5
     10D E010      LDI	R17,0
     10E DF48      RCALL	_Delay
     10F 90A9      LD	R10,Y+
     110 9508      RET
_DispSetCursor:
  y                    --> R12
  x                    --> R10
     111 92AA      ST	R10,-Y
     112 92CA      ST	R12,-Y
     113 2EC2      MOV	R12,R18
     114 2EA0      MOV	R10,R16
(0153) }
(0154) 
(0155) void DispSetCursor(uchar x,uchar y)	//设置光标到指定位置
(0156) //x:串首字符在LCD屏幕上列的位置(水平位置) 0<=x<=7  
(0157) //y:串首字符在LCD屏幕上行的位置(垂直位置) 0<=y<=3 
(0158) {
(0159)    LCD_COM=CharMap[y][x];		//查表得到DDRAM地址AC
     115 E286      LDI	R24,0x26
     116 E090      LDI	R25,0
     117 2C2C      MOV	R2,R12
     118 2433      CLR	R3
     119 0C22      LSL	R2
     11A 1C33      ROL	R3
     11B 0C22      LSL	R2
     11C 1C33      ROL	R3
     11D 0C22      LSL	R2
     11E 1C33      ROL	R3
     11F 0E28      ADD	R2,R24
     120 1E39      ADC	R3,R25
     121 2DEA      MOV	R30,R10
     122 27FF      CLR	R31
     123 0DE2      ADD	R30,R2
     124 1DF3      ADC	R31,R3
     125 9024      LPM	R2,0(Z)
     126 9220 006E STS	LCD_COM,R2
(0160)    Write_LCD_Com();
     128 DF5A      RCALL	_Write_LCD_Com
     129 90C9      LD	R12,Y+
     12A 90A9      LD	R10,Y+
     12B 9508      RET
_DispHalfWord:
  HH                   --> Y,+1
  LASC                 --> Y,+4
  HASC                 --> Y,+2
  y                    --> R12
  x                    --> R10
     12C 92AA      ST	R10,-Y
     12D 92CA      ST	R12,-Y
     12E 2EC2      MOV	R12,R18
     12F 2EA0      MOV	R10,R16
(0161) }
(0162) 
(0163) void DispHalfWord(uchar x,uchar y,uchar HASC,uchar LASC)	//在指定位置处显示半角ASCII字符	
(0164) {	
(0165) 	unsigned int HH;
(0166) 	LCD_COM=CharMap[y][x];		//查表得到DDRAM地址AC
     130 E286      LDI	R24,0x26
     131 E090      LDI	R25,0
     132 2C2C      MOV	R2,R12
     133 2433      CLR	R3
     134 0C22      LSL	R2
     135 1C33      ROL	R3
     136 0C22      LSL	R2
     137 1C33      ROL	R3
     138 0C22      LSL	R2
     139 1C33      ROL	R3
     13A 0E28      ADD	R2,R24
     13B 1E39      ADC	R3,R25
     13C 2DEA      MOV	R30,R10
     13D 27FF      CLR	R31
     13E 0DE2      ADD	R30,R2
     13F 1DF3      ADC	R31,R3
     140 9024      LPM	R2,0(Z)
     141 9220 006E STS	LCD_COM,R2
(0167) 	Write_LCD_Com();
     143 DF3F      RCALL	_Write_LCD_Com
(0168) 	
(0169) 	LCD_DAT=HASC;
     144 800A      LDD	R0,Y+2
     145 9200 006D STS	LCD_DAT,R0
(0170) 	Write_LCD_Data();	//显示ASCII字符
     147 DF59      RCALL	_Write_LCD_Data
(0171) 	LCD_DAT=LASC;
     148 800C      LDD	R0,Y+4
     149 9200 006D STS	LCD_DAT,R0
(0172) 	Write_LCD_Data();	//显示ASCII字符
     14B DF55      RCALL	_Write_LCD_Data
     14C 90C9      LD	R12,Y+
     14D 90A9      LD	R10,Y+
     14E 9508      RET
_PrintS:
  Ty                   --> R10
  Tx                   --> R20
  i                    --> R22
  str                  --> R12
  y                    --> R20
  x                    --> R14
     14F D114      RCALL	push_xgsetF0FC
     150 2F42      MOV	R20,R18
     151 2EE0      MOV	R14,R16
     152 9723      SBIW	R28,3
     153 84CD      LDD	R12,Y+13
     154 84DE      LDD	R13,Y+14
(0173) }
(0174) 
(0175) //**************************************在指定位置处打印ASCII字符串**********************************
(0176) //x:串首字符在LCD屏幕上列的位置(水平位置) 0<=x<=7  
(0177) //y:串首字符在LCD屏幕上行的位置(垂直位置) 0<=y<=3 
(0178) //*str:存放ASCII字符串的指针
(0179) void PrintS(uchar x,uchar y,uchar *str)		//在指定位置打印字符串
(0180) {
(0181) 	uchar i,Tx,Ty;
(0182) //	EA=0;
(0183) 	Ty=y;Tx=x;
     155 2EA4      MOV	R10,R20
     156 2D4E      MOV	R20,R14
(0184) 	for(i=0;str[i]!='\0';i=i+2)
     157 2766      CLR	R22
     158 C015      RJMP	0x016E
(0185) 	{
(0186) 		DispHalfWord(Tx,Ty,str[i],str[i+1]);
     159 2E26      MOV	R2,R22
     15A 2433      CLR	R3
     15B 0C2C      ADD	R2,R12
     15C 1C3D      ADC	R3,R13
     15D 01F1      MOVW	R30,R2
     15E 8021      LDD	R2,Z+1
     15F 822A      STD	Y+2,R2
     160 8020      LDD	R2,Z+0
     161 8228      STD	Y+0,R2
     162 2D2A      MOV	R18,R10
     163 2F04      MOV	R16,R20
     164 DFC7      RCALL	_DispHalfWord
(0187) 		Tx++;
     165 9543      INC	R20
(0188) 		if (Tx>=8) { Ty=(Ty+1)&0x03;Tx=0; }
     166 3048      CPI	R20,0x8
     167 F028      BCS	0x016D
     168 2D8A      MOV	R24,R10
     169 5F8F      SUBI	R24,0xFF
     16A 7083      ANDI	R24,3
     16B 2EA8      MOV	R10,R24
     16C 2744      CLR	R20
     16D 5F6E      SUBI	R22,0xFE
     16E 2FE6      MOV	R30,R22
     16F 27FF      CLR	R31
     170 0DEC      ADD	R30,R12
     171 1DFD      ADC	R31,R13
     172 8020      LDD	R2,Z+0
     173 2022      TST	R2
     174 F721      BNE	0x0159
     175 9623      ADIW	R28,3
     176 C0E2      RJMP	pop_xgsetF0FC
_PrintSLen:
  Ty                   --> R10
  Tx                   --> R22
  i                    --> R20
  Len                  --> R12
  str                  --> R14
  y                    --> R22
  x                    --> R20
     177 D0EC      RCALL	push_xgsetF0FC
     178 2F62      MOV	R22,R18
     179 2F40      MOV	R20,R16
     17A 9723      SBIW	R28,3
     17B 84ED      LDD	R14,Y+13
     17C 84FE      LDD	R15,Y+14
     17D 84CF      LDD	R12,Y+15
(0189) 	}
(0190) //	EA=1;
(0191) }
(0192) 
(0193) 
(0194) 
(0195) //**************************************在指定位置打印指定长度字符串**********************************
(0196) //x:串首字符在LCD屏幕上列的位置(水平位置) 0<=x<=7  
(0197) //y:串首字符在LCD屏幕上行的位置(垂直位置) 0<=y<=3 
(0198) //*str:存放ASCII字符串的指针
(0199) //Len:字符串的长度,字节为单位
(0200) void PrintSLen(uchar x,uchar y,uchar *str,uchar Len)		//在指定位置打印字符串
(0201) {
(0202) 	uchar i,Tx,Ty;
(0203) 	Ty=y;Tx=x;
     17E 2EA6      MOV	R10,R22
     17F 2F64      MOV	R22,R20
(0204) 	for(i=0;i<Len;i=i+2)
     180 2744      CLR	R20
     181 C025      RJMP	0x01A7
(0205) 	{
(0206) 	 	if((Len-i)==1) DispHalfWord(Tx,Ty,str[i],'\0'); else DispHalfWord(Tx,Ty,str[i],str[i+1]);
     182 2D8C      MOV	R24,R12
     183 1B84      SUB	R24,R20
     184 3081      CPI	R24,1
     185 F461      BNE	0x0192
     186 2422      CLR	R2
     187 822A      STD	Y+2,R2
     188 2FE4      MOV	R30,R20
     189 27FF      CLR	R31
     18A 0DEE      ADD	R30,R14
     18B 1DFF      ADC	R31,R15
     18C 8020      LDD	R2,Z+0
     18D 8228      STD	Y+0,R2
     18E 2D2A      MOV	R18,R10
     18F 2F06      MOV	R16,R22
     190 DF9B      RCALL	_DispHalfWord
     191 C00C      RJMP	0x019E
     192 2E24      MOV	R2,R20
     193 2433      CLR	R3
     194 0C2E      ADD	R2,R14
     195 1C3F      ADC	R3,R15
     196 01F1      MOVW	R30,R2
     197 8021      LDD	R2,Z+1
     198 822A      STD	Y+2,R2
     199 8020      LDD	R2,Z+0
     19A 8228      STD	Y+0,R2
     19B 2D2A      MOV	R18,R10
     19C 2F06      MOV	R16,R22
     19D DF8E      RCALL	_DispHalfWord
(0207) 		Tx++;
     19E 9563      INC	R22
(0208) 		if (Tx>=8) { Ty=(Ty+1)&0x03;Tx=0; }
     19F 3068      CPI	R22,0x8
     1A0 F028      BCS	0x01A6
     1A1 2D8A      MOV	R24,R10
     1A2 5F8F      SUBI	R24,0xFF
     1A3 7083      ANDI	R24,3
     1A4 2EA8      MOV	R10,R24
     1A5 2766      CLR	R22
     1A6 5F4E      SUBI	R20,0xFE
     1A7 154C      CP	R20,R12
     1A8 F2C8      BCS	0x0182
     1A9 9623      ADIW	R28,3
     1AA C0AE      RJMP	pop_xgsetF0FC
_DisplayNumChar:
  srnum                --> R12
  tnnum                --> R22
  hunum                --> R20
  knnum                --> R14
  ll                   --> R22
  h                    --> R10
  l                    --> Y,+13
     1AB D07C      RCALL	push_arg4
     1AC D0B7      RCALL	push_xgsetF0FC
     1AD 2EA2      MOV	R10,R18
     1AE 9723      SBIW	R28,3
     1AF 8969      LDD	R22,Y+17
     1B0 897A      LDD	R23,Y+18
(0209) 	}
(0210) //	EA=1;
(0211) }
(0212) 
(0213) 
(0214) void DisplayNumChar(unsigned char l,unsigned char h,unsigned int ll)
(0215) {
(0216)   unsigned char knnum,hunum,tnnum,srnum;  //百、十、个位
(0217)   knnum=ll/1000;
     1B1 EE28      LDI	R18,0xE8
     1B2 E033      LDI	R19,3
     1B3 018B      MOVW	R16,R22
     1B4 D07A      RCALL	div16u
     1B5 2EE0      MOV	R14,R16
(0218)   hunum=ll/100-10*knnum; 	//百位
     1B6 E08A      LDI	R24,0xA
     1B7 9D8E      MUL	R24,R14
     1B8 0110      MOVW	R2,R0

⌨️ 快捷键说明

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