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

📄 ad.lst

📁 AVR mega16系列单片机开发程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0122 2842      OR	R4,R2
    0123 2853      OR	R5,R3
    0124 92500061  STS	value+1,R5
    0126 92400060  STS	value,R4
    0128 9029      LD	R2,Y+
    0129 BE2F      OUT	0x3F,R2
    012A 9059      LD	R5,Y+
    012B 9049      LD	R4,Y+
    012C 9039      LD	R3,Y+
    012D 9029      LD	R2,Y+
    012E 9518      RETI
_Bit_display:
  Y                    --> R22
  X                    --> R20
    012F 940E0308  CALL	push_gset2
    0131 2F62      MOV	R22,R18
    0132 2F40      MOV	R20,R16
    0133 9721      SBIW	R28,1
(0033) }
(0034) 
(0035) 
(0036) void Bit_display(unsigned char X,unsigned char Y)     //位显示函数,将对转换结果的数字量进行“0”或“1”的显示
(0037) {
(0038)  
(0039)  if(Y)                           
    0134 2366      TST	R22
    0135 F039      BEQ	0x013D
(0040)    LCD_write_char(X,0,'1');                           //如果转换结果变量的某一位为“1”,则显示,否则显示“0”
    0136 E381      LDI	R24,0x31
    0137 8388      STD	Y+0,R24
    0138 2722      CLR	R18
    0139 2F04      MOV	R16,R20
    013A 940E00F1  CALL	_LCD_write_char
    013C C006      RJMP	0x0143
(0041)  else  
(0042)    LCD_write_char(X,0,'0');
    013D E380      LDI	R24,0x30
    013E 8388      STD	Y+0,R24
    013F 2722      CLR	R18
    0140 2F04      MOV	R16,R20
    0141 940E00F1  CALL	_LCD_write_char
    0143 9621      ADIW	R28,1
    0144 940E02F9  CALL	pop_gset2
    0146 9508      RET
_Bit_transfor:
  pos                  --> R20
  i                    --> R22
  bits                 --> R10
  datas                --> R12
    0147 940E0304  CALL	push_gset4
(0043)  }
(0044)  
(0045)  void Bit_transfor(void)                              //对12位数字量的量化和显示函数          
(0046)  {
(0047)    unsigned int datas;         
(0048)    unsigned int bits=0x0001;                          //位屏蔽变量,通过移位处理,将得出数字量的每一位值(0或1)
    0149 E081      LDI	R24,1
    014A E090      LDI	R25,0
    014B 015C      MOVW	R10,R24
(0049)    unsigned char i,pos=10;                            //显示位置变量,通过循环处理将依次将数字量的每一位显示在LCD上
    014C E04A      LDI	R20,0xA
(0050)    init_lcd();
    014D 940E00FD  CALL	_init_lcd
(0051)    datas =(value&bits);                               //最低位独立处理                 
    014F 90C00060  LDS	R12,value
    0151 90D00061  LDS	R13,value+1
    0153 20CA      AND	R12,R10
    0154 20DB      AND	R13,R11
(0052)    Bit_display(11,datas);
    0155 2D2C      MOV	R18,R12
    0156 E00B      LDI	R16,0xB
    0157 DFD7      RCALL	_Bit_display
(0053)    bits = bits<<1;                                                 
    0158 0CAA      LSL	R10
    0159 1CBB      ROL	R11
(0054)    for(i=0;i<=10;i++)                                 //高11位在循环中处理
    015A 2766      CLR	R22
    015B C015      RJMP	0x0171
(0055)     {
(0056) 	  datas =(value&bits);                            //位屏蔽操作
    015C 90C00060  LDS	R12,value
    015E 90D00061  LDS	R13,value+1
    0160 20CA      AND	R12,R10
    0161 20DB      AND	R13,R11
(0057) 	  datas = datas>>(i+1);
    0162 2F26      MOV	R18,R22
    0163 2733      CLR	R19
    0164 5F2F      SUBI	R18,0xFF
    0165 4F3F      SBCI	R19,0xFF
    0166 0186      MOVW	R16,R12
    0167 940E033E  CALL	lsr16
    0169 0168      MOVW	R12,R16
(0058) 	  Bit_display(pos,datas);                         //位显示操作    
    016A 2D2C      MOV	R18,R12
    016B 2F04      MOV	R16,R20
    016C DFC2      RCALL	_Bit_display
(0059) 	  bits = bits<<1;
    016D 0CAA      LSL	R10
    016E 1CBB      ROL	R11
(0060) 	  pos--;
    016F 954A      DEC	R20
    0170 9563      INC	R22
    0171 E08A      LDI	R24,0xA
    0172 1786      CP	R24,R22
    0173 F740      BCC	0x015C
    0174 940E02FF  CALL	pop_gset4
    0176 9508      RET
_Analog_display:
  data                 --> R22
  X                    --> R20
    0177 940E0308  CALL	push_gset2
    0179 2F62      MOV	R22,R18
    017A 2F40      MOV	R20,R16
    017B 9721      SBIW	R28,1
(0061) 	 }
(0062)  }	
(0063) 
(0064) 
(0065) 
(0066) void Analog_display(unsigned char X,unsigned char data) //对输入模拟量的显示
(0067) {
(0068)  switch(data)
    017C 2777      CLR	R23
    017D 3060      CPI	R22,0
    017E 0767      CPC	R22,R23
    017F F409      BNE	0x0181
    0180 C02E      RJMP	0x01AF
    0181 3061      CPI	R22,1
    0182 E0E0      LDI	R30,0
    0183 077E      CPC	R23,R30
    0184 F409      BNE	0x0186
    0185 C030      RJMP	0x01B6
    0186 3062      CPI	R22,2
    0187 E0E0      LDI	R30,0
    0188 077E      CPC	R23,R30
    0189 F409      BNE	0x018B
    018A C032      RJMP	0x01BD
    018B 3063      CPI	R22,3
    018C E0E0      LDI	R30,0
    018D 077E      CPC	R23,R30
    018E F409      BNE	0x0190
    018F C034      RJMP	0x01C4
    0190 3064      CPI	R22,4
    0191 E0E0      LDI	R30,0
    0192 077E      CPC	R23,R30
    0193 F409      BNE	0x0195
    0194 C036      RJMP	0x01CB
    0195 3065      CPI	R22,5
    0196 E0E0      LDI	R30,0
    0197 077E      CPC	R23,R30
    0198 F409      BNE	0x019A
    0199 C038      RJMP	0x01D2
    019A 3066      CPI	R22,6
    019B E0E0      LDI	R30,0
    019C 077E      CPC	R23,R30
    019D F409      BNE	0x019F
    019E C03A      RJMP	0x01D9
    019F 3067      CPI	R22,7
    01A0 E0E0      LDI	R30,0
    01A1 077E      CPC	R23,R30
    01A2 F409      BNE	0x01A4
    01A3 C03C      RJMP	0x01E0
    01A4 3068      CPI	R22,0x8
    01A5 E0E0      LDI	R30,0
    01A6 077E      CPC	R23,R30
    01A7 F409      BNE	0x01A9
    01A8 C03E      RJMP	0x01E7
    01A9 3069      CPI	R22,0x9
    01AA E0E0      LDI	R30,0
    01AB 077E      CPC	R23,R30
    01AC F409      BNE	0x01AE
    01AD C040      RJMP	0x01EE
    01AE C045      RJMP	0x01F4
(0069)     {
(0070)      case 0:LCD_write_char( X, 1, '0'); break; 
    01AF E380      LDI	R24,0x30
    01B0 8388      STD	Y+0,R24
    01B1 E021      LDI	R18,1
    01B2 2F04      MOV	R16,R20
    01B3 940E00F1  CALL	_LCD_write_char
    01B5 C03E      RJMP	0x01F4
(0071)      case 1:LCD_write_char( X, 1, '1'); break;  
    01B6 E381      LDI	R24,0x31
    01B7 8388      STD	Y+0,R24
    01B8 E021      LDI	R18,1
    01B9 2F04      MOV	R16,R20
    01BA 940E00F1  CALL	_LCD_write_char
    01BC C037      RJMP	0x01F4
(0072)      case 2:LCD_write_char( X, 1, '2'); break;  
    01BD E382      LDI	R24,0x32
    01BE 8388      STD	Y+0,R24
    01BF E021      LDI	R18,1
    01C0 2F04      MOV	R16,R20
    01C1 940E00F1  CALL	_LCD_write_char
    01C3 C030      RJMP	0x01F4
(0073)      case 3:LCD_write_char( X, 1, '3'); break;  
    01C4 E383      LDI	R24,0x33
    01C5 8388      STD	Y+0,R24
    01C6 E021      LDI	R18,1
    01C7 2F04      MOV	R16,R20
    01C8 940E00F1  CALL	_LCD_write_char
    01CA C029      RJMP	0x01F4
(0074)      case 4:LCD_write_char( X, 1, '4'); break;  
    01CB E384      LDI	R24,0x34
    01CC 8388      STD	Y+0,R24
    01CD E021      LDI	R18,1
    01CE 2F04      MOV	R16,R20
    01CF 940E00F1  CALL	_LCD_write_char
    01D1 C022      RJMP	0x01F4
(0075)      case 5:LCD_write_char( X, 1, '5'); break;  
    01D2 E385      LDI	R24,0x35
    01D3 8388      STD	Y+0,R24
    01D4 E021      LDI	R18,1
    01D5 2F04      MOV	R16,R20
    01D6 940E00F1  CALL	_LCD_write_char
    01D8 C01B      RJMP	0x01F4
(0076)      case 6:LCD_write_char( X, 1, '6'); break;  
    01D9 E386      LDI	R24,0x36
    01DA 8388      STD	Y+0,R24
    01DB E021      LDI	R18,1
    01DC 2F04      MOV	R16,R20
    01DD 940E00F1  CALL	_LCD_write_char
    01DF C014      RJMP	0x01F4
(0077)      case 7:LCD_write_char( X, 1, '7'); break;  
    01E0 E387      LDI	R24,0x37
    01E1 8388      STD	Y+0,R24
    01E2 E021      LDI	R18,1
    01E3 2F04      MOV	R16,R20
    01E4 940E00F1  CALL	_LCD_write_char
    01E6 C00D      RJMP	0x01F4
(0078)      case 8:LCD_write_char( X, 1, '8'); break;
    01E7 E388      LDI	R24,0x38
    01E8 8388      STD	Y+0,R24
    01E9 E021      LDI	R18,1
    01EA 2F04      MOV	R16,R20
    01EB 940E00F1  CALL	_LCD_write_char
    01ED C006      RJMP	0x01F4
(0079)      case 9:LCD_write_char( X, 1, '9'); break; 
    01EE E389      LDI	R24,0x39
    01EF 8388      STD	Y+0,R24
    01F0 E021      LDI	R18,1
    01F1 2F04      MOV	R16,R20
    01F2 940E00F1  CALL	_LCD_write_char
    01F4 9621      ADIW	R28,1
    01F5 940E02F9  CALL	pop_gset2
    01F7 9508      RET
_Analog_transfor:
  x5                   --> R20
  x4                   --> R22
  x3                   --> R22
  x2                   --> R22
  x1                   --> R22
  value2               --> R20
  result               --> R20
    01F8 940E0308  CALL	push_gset2
    01FA 9725      SBIW	R28,5
(0080)     }
(0081) } 
(0082)     
(0083) 
(0084) void Analog_transfor(void)                             //在液晶的第二行显示对应的输入模拟电压值
(0085) {
(0086)  uint value2;
(0087)  uint result;
(0088)  uint x1,x2,x3,x4,x5;
(0089)  value2 = value;                                 //由于选择的转化方式为右对齐,因此在此处
    01FB 91400060  LDS	R20,value
    01FD 91500061  LDS	R21,value+1
(0090)                                                       //需要右移2位以取得准确的数字量。                                                                   
(0091)  result=(value2*2.56/1024)*10000;                               //以下为数字处理部分,可作为AD转换的通用处理模块
    01FF E604      LDI	R16,0x64
    0200 E010      LDI	R17,0
    0201 940E032A  CALL	lpm32
    0203 933A      ST	R19,-Y
    0204 932A      ST	R18,-Y
    0205 931A      ST	R17,-Y
    0206 930A      ST	R16,-Y
    0207 E600      LDI	R16,0x60
    0208 E010      LDI	R17,0
    0209 940E032A  CALL	lpm32
    020B 933A      ST	R19,-Y
    020C 932A      ST	R18,-Y
    020D 931A      ST	R17,-Y
    020E 930A      ST	R16,-Y
    020F E50C      LDI	R16,0x5C
    0210 E010      LDI	R17,0
    0211 940E032A  CALL	lpm32
    0213 933A      ST	R19,-Y
    0214 932A      ST	R18,-Y
    0215 931A      ST	R17,-Y
    0216 930A      ST	R16,-Y
    0217 018A      MOVW	R16,R20
    0218 9516      LSR	R17
    0219 9507      ROR	R16
    021A 940E038D  CALL	int2fp
    021C 933A      ST	R19,-Y
    021D 932A      ST	R18,-Y
    021E 931A      ST	R17,-Y
    021F 930A      ST	R16,-Y
    0220 940E04D6  CALL	empy32fs
    0222 018A      MOVW	R16,R20
    0223 7001      ANDI	R16,1
    0224 7010      ANDI	R17,0
    0225 940E038D  CALL	int2fp
    0227 933A      ST	R19,-Y
    0228 932A      ST	R18,-Y
    0229 931A      ST	R17,-Y
    022A 930A      ST	R16,-Y
    022B 940E03E7  CALL	add32fs
    022D 940E04D6  CALL	empy32fs
    022F E508      LDI	R16,0x58
    0230 E010      LDI	R17,0
    0231 940E032A  CALL	lpm32
    0233 933A      ST	R19,-Y
    0234 932A      ST	R18,-Y
    0235 931A      ST	R17,-Y
    0236 930A      ST	R16,-Y
    0237 940E0448  CALL	div32fs
    0239 940E04D9  CALL	empy32f
    023B 01FE      MOVW	R30,R28
    023C 8301      STD	Z+1,R16
    023D 8312      STD	Z+2,R17
    023E 8323      STD	Z+3,R18
    023F 8334      STD	Z+4,R19
    0240 01FE      MOVW	R30,R28
    0241 8021      LDD	R2,Z+1
    0242 8032      LDD	R3,Z+2
    0243 8043      LDD	R4,Z+3
    0244 8054      LDD	R5,Z+4
    0245 925A      ST	R5,-Y
    0246 924A      ST	R4,-Y
    0247 923A      ST	R3,-Y
    0248 922A      ST	R2,-Y
    0249 E504      LDI	R16,0x54
    024A E010      LDI	R17,0
    024B 940E032A  CALL	lpm32
    024D 933A      ST	R19,-Y
    024E 932A      ST	R18,-Y
    024F 931A      ST	R17,-Y
    0250 930A      ST	R16,-Y
    0251 940E04A5  CALL	cmp32f
    0253 F0CC      BLT	0x026D
    0254 01FE      MOVW	R30,R28
    0255 8021      LDD	R2,Z+1
    0256 8032      LDD	R3,Z+2
    0257 8043      LDD	R4,Z+3
    0258 8054      LDD	R5,Z+4
    0259 925A      ST	R5,-Y
    025A 924A      ST	R4,-Y
    025B 923A      ST	R3,-Y
    025C 922A      ST	R2,-Y
    025D E504      LDI	R16,0x54
    025E E010      LDI	R17,0
    025F 940E032A  CALL	lpm32
    0261 933A      ST	R19,-Y
    0262 932A      ST	R18,-Y
    0263 931A      ST	R17,-Y
    0264 930A      ST	R16,-Y
    0265 940E03F2  CALL	sub32f
    0267 940E0345  CALL	fp2int
    0269 01B8      MOVW	R22,R16
    026A 5060      SUBI	R22,0
    026B 4870      SBCI	R23,0x80
    026C C008      RJMP	0x0275
    026D 01FE      MOVW	R30,R28
    026E 8101      LDD	R16,Z+1
    026F 8112      LDD	R17,Z+2
    0270 8123      LDD	R18,Z+3
    0271 8134      LDD	R19,Z+4
    0272 940E0345  CALL	fp2int
    0274 01B8      MOVW	R22,R16
    0275 01AB      MOVW	R20,R22
(0092)                         
(0093)  x1=result/10000;                   Analog_display(0,x1);                                   
    0276 E120      LDI	R18,0x10
    0277 E237      LDI	R19,0x27
    0278 018A      MOVW	R16,R20
    0279 940E02DF  CALL	div16u
    027B 01B8      MOVW	R22,R16
    027C 2F26      MOV	R18,R22
    027D 2700      CLR	R16
    027E DEF8      RCALL	_Analog_display
(0094)                                     LCD_write_char(1,1,'.');
    027F E28E      LDI	R24,0x2E
    0280 8388      STD	Y+0,R24
    0281 E021      LDI	R18,1
    0282 E001      LDI	R16,1
    0283 940E00F1  CALL	_LCD_write_char
(0095)  x2=(result/1000)%10;               Analog_display(2,x2);
    0285 EE28      LDI	R18,0xE8
    0286 E033      LDI	R19,3
    0287 018A      MOVW	R16,R20

⌨️ 快捷键说明

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