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

📄 adc.lst

📁 单片机A/D模数转换 C语言编写 源程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0160)   输出数据:   数据处理函数,将转换的值转换为4位BCD码。
(0161) ********************************************************/
(0162) void process (uint i ,uchar j)
(0163) {
(0164) 	 if (0 == j)
    00C6 2366      TST	R22
    00C7 F009      BEQ	0x00C9
    00C8 C02A      RJMP	0x00F3
(0165) 	 {
(0166) 	     buf[10] = i/1000 + '0';   i=i%1000;
    00C9 EE28      LDI	R18,0xE8
    00CA E033      LDI	R19,3
    00CB 018A      MOVW	R16,R20
    00CC D0A2      RCALL	div16u
    00CD 01C8      MOVW	R24,R16
    00CE 96C0      ADIW	R24,0x30
    00CF 9380006A  STS	0x6A,R24
    00D1 EE28      LDI	R18,0xE8
    00D2 E033      LDI	R19,3
    00D3 018A      MOVW	R16,R20
    00D4 D098      RCALL	mod16u
    00D5 01A8      MOVW	R20,R16
(0167) 		 buf[12] = i/100 + '0';   i=i%100;
    00D6 E624      LDI	R18,0x64
    00D7 E030      LDI	R19,0
    00D8 D096      RCALL	div16u
    00D9 01C8      MOVW	R24,R16
    00DA 96C0      ADIW	R24,0x30
    00DB 9380006C  STS	0x6C,R24
    00DD E624      LDI	R18,0x64
    00DE E030      LDI	R19,0
    00DF 018A      MOVW	R16,R20
    00E0 D08C      RCALL	mod16u
    00E1 01A8      MOVW	R20,R16
(0168) 		 buf[13] = i/10 + '0';   i=i%10;
    00E2 E02A      LDI	R18,0xA
    00E3 E030      LDI	R19,0
    00E4 D08A      RCALL	div16u
    00E5 01C8      MOVW	R24,R16
    00E6 96C0      ADIW	R24,0x30
    00E7 9380006D  STS	0x6D,R24
    00E9 E02A      LDI	R18,0xA
    00EA E030      LDI	R19,0
    00EB 018A      MOVW	R16,R20
    00EC D080      RCALL	mod16u
    00ED 01A8      MOVW	R20,R16
(0169) 		 buf[14] = i + '0';
    00EE 01CA      MOVW	R24,R20
    00EF 96C0      ADIW	R24,0x30
    00F0 9380006E  STS	0x6E,R24
(0170) 	 }
    00F2 C029      RJMP	0x011C
(0171) 	 else
(0172) 	 {
(0173) 	     buf[26] = i/1000 + '0';   i=i%1000;
    00F3 EE28      LDI	R18,0xE8
    00F4 E033      LDI	R19,3
    00F5 018A      MOVW	R16,R20
    00F6 D078      RCALL	div16u
    00F7 01C8      MOVW	R24,R16
    00F8 96C0      ADIW	R24,0x30
    00F9 9380007A  STS	0x7A,R24
    00FB EE28      LDI	R18,0xE8
    00FC E033      LDI	R19,3
    00FD 018A      MOVW	R16,R20
    00FE D06E      RCALL	mod16u
    00FF 01A8      MOVW	R20,R16
(0174) 		 buf[28] = i/100 + '0';   i=i%100;
    0100 E624      LDI	R18,0x64
    0101 E030      LDI	R19,0
    0102 D06C      RCALL	div16u
    0103 01C8      MOVW	R24,R16
    0104 96C0      ADIW	R24,0x30
    0105 9380007C  STS	0x7C,R24
    0107 E624      LDI	R18,0x64
    0108 E030      LDI	R19,0
    0109 018A      MOVW	R16,R20
    010A D062      RCALL	mod16u
    010B 01A8      MOVW	R20,R16
(0175) 		 buf[29] = i/10 + '0';   i=i%10;
    010C E02A      LDI	R18,0xA
    010D E030      LDI	R19,0
    010E D060      RCALL	div16u
    010F 01C8      MOVW	R24,R16
    0110 96C0      ADIW	R24,0x30
    0111 9380007D  STS	0x7D,R24
    0113 E02A      LDI	R18,0xA
    0114 E030      LDI	R19,0
    0115 018A      MOVW	R16,R20
    0116 D056      RCALL	mod16u
    0117 01A8      MOVW	R20,R16
(0176) 		 buf[30] = i + '0';
    0118 01CA      MOVW	R24,R20
    0119 96C0      ADIW	R24,0x30
    011A 9380007E  STS	0x7E,R24
(0177) 	 }
    011C D07C      RCALL	pop_gset2
    011D 9508      RET
_main:
  buflogo              --> Y+0
    011E 97A1      SBIW	R28,0x21
(0178) }
(0179) //*****************主程序**********************************
(0180) void main (void)
(0181) {
(0182) 	 uchar buflogo[]="    welcome!      www.itsn.cn!  ";
    011F E28A      LDI	R24,0x2A
    0120 E090      LDI	R25,0
    0121 01FE      MOVW	R30,R28
    0122 E201      LDI	R16,0x21
    0123 E010      LDI	R17,0
    0124 93FA      ST	R31,-Y
    0125 93EA      ST	R30,-Y
    0126 939A      ST	R25,-Y
    0127 938A      ST	R24,-Y
    0128 D091      RCALL	asgncblk
(0183) 
(0184)      Init_mcu();       //单片机初始化
    0129 DF82      RCALL	_Init_mcu
(0185) 	 Init_lcd();        //lcd初始化
    012A DF58      RCALL	_Init_lcd
(0186) 	 Init_adc();        //adc初始化
    012B DF87      RCALL	_Init_adc
(0187) 	 
(0188) 	 display_lcd(buflogo);  //显示LOGO
    012C 018E      MOVW	R16,R28
    012D DF60      RCALL	_display_lcd
(0189) 	 DelaymS(300);    //长延迟
    012E E20C      LDI	R16,0x2C
    012F E011      LDI	R17,1
    0130 DF25      RCALL	_DelaymS
(0190) 	 display_lcd(buf);  //刷新显示一屏
    0131 E600      LDI	R16,0x60
    0132 E010      LDI	R17,0
    0133 DF5A      RCALL	_display_lcd
    0134 C035      RJMP	0x016A
(0191) 	 
(0192) 	 while(1)         //无限循环执行
(0193) 	 {
(0194) 	     //DelaymS(5);          //延迟
(0195) 		 
(0196) 		 ADMUX = 0b11000000;  //选择通道1
    0135 EC80      LDI	R24,0xC0
    0136 B987      OUT	0x07,R24
(0197) 		 ADCSRA = 0b11101011;
    0137 EE8B      LDI	R24,0xEB
    0138 B986      OUT	0x06,R24
(0198) 		 DelaymS(5);
    0139 E005      LDI	R16,5
    013A E010      LDI	R17,0
    013B DF1A      RCALL	_DelaymS
(0199) 		 process (adc_convert()*5 / 2 , 0); //启动一次ADC转换,并进行数据修正及数据转换
    013C DF7B      RCALL	_adc_convert
    013D 0118      MOVW	R2,R16
    013E 2722      CLR	R18
    013F E005      LDI	R16,5
    0140 E010      LDI	R17,0
    0141 932F      PUSH	R18
    0142 933F      PUSH	R19
    0143 0191      MOVW	R18,R2
    0144 D044      RCALL	empy16s
    0145 0118      MOVW	R2,R16
    0146 913F      POP	R19
    0147 912F      POP	R18
    0148 9436      LSR	R3
    0149 9427      ROR	R2
    014A 0181      MOVW	R16,R2
    014B DF77      RCALL	_process
(0200) 		 ADCSRA = 0b01101011;  //关闭ADC
    014C E68B      LDI	R24,0x6B
    014D B986      OUT	0x06,R24
(0201) 		 
(0202) 		 ADMUX = 0b11000001;  //选择通道2
    014E EC81      LDI	R24,0xC1
    014F B987      OUT	0x07,R24
(0203) 		 ADCSRA = 0b11101011;
    0150 EE8B      LDI	R24,0xEB
    0151 B986      OUT	0x06,R24
(0204) 		 DelaymS(5);
    0152 E005      LDI	R16,5
    0153 E010      LDI	R17,0
    0154 DF01      RCALL	_DelaymS
(0205) 		 process (adc_convert()*5 / 2 , 1);
    0155 DF62      RCALL	_adc_convert
    0156 0118      MOVW	R2,R16
    0157 E021      LDI	R18,1
    0158 E005      LDI	R16,5
    0159 E010      LDI	R17,0
    015A 932F      PUSH	R18
    015B 933F      PUSH	R19
    015C 0191      MOVW	R18,R2
    015D D02B      RCALL	empy16s
    015E 0118      MOVW	R2,R16
    015F 913F      POP	R19
    0160 912F      POP	R18
    0161 9436      LSR	R3
    0162 9427      ROR	R2
    0163 0181      MOVW	R16,R2
    0164 DF5E      RCALL	_process
(0206) 		 ADCSRA = 0b01101011;  //关闭ADC
    0165 E68B      LDI	R24,0x6B
    0166 B986      OUT	0x06,R24
(0207) 		 
(0208) 		 display_lcd(buf);    //刷新显示一屏    
FILE: <library>
    0167 E600      LDI	R16,0x60
    0168 E010      LDI	R17,0
    0169 DF24      RCALL	_display_lcd
    016A CFCA      RJMP	0x0135
    016B 96A1      ADIW	R28,0x21
    016C 9508      RET
mod16u:
    016D 9468      BSET	6
    016E C001      RJMP	xdiv16u
div16u:
    016F 94E8      BCLR	6
xdiv16u:
    0170 92EA      ST	R14,-Y
    0171 92FA      ST	R15,-Y
    0172 938A      ST	R24,-Y
    0173 24EE      CLR	R14
    0174 24FF      CLR	R15
    0175 E180      LDI	R24,0x10
    0176 0F00      LSL	R16
    0177 1F11      ROL	R17
    0178 1CEE      ROL	R14
    0179 1CFF      ROL	R15
    017A 16E2      CP	R14,R18
    017B 06F3      CPC	R15,R19
    017C F018      BCS	0x0180
    017D 1AE2      SUB	R14,R18
    017E 0AF3      SBC	R15,R19
    017F 9503      INC	R16
    0180 958A      DEC	R24
    0181 F7A1      BNE	0x0176
    0182 F416      BRTC	0x0185
    0183 2D0E      MOV	R16,R14
    0184 2D1F      MOV	R17,R15
    0185 9189      LD	R24,Y+
    0186 90F9      LD	R15,Y+
    0187 90E9      LD	R14,Y+
    0188 9508      RET
empy16s:
    0189 920A      ST	R0,-Y
    018A 921A      ST	R1,-Y
    018B 938A      ST	R24,-Y
    018C 939A      ST	R25,-Y
    018D 9F02      MUL	R16,R18
    018E 01C0      MOVW	R24,R0
    018F 9F12      MUL	R17,R18
    0190 0D90      ADD	R25,R0
    0191 9F03      MUL	R16,R19
    0192 0D90      ADD	R25,R0
    0193 018C      MOVW	R16,R24
    0194 9199      LD	R25,Y+
    0195 9189      LD	R24,Y+
    0196 9019      LD	R1,Y+
    0197 9009      LD	R0,Y+
    0198 9508      RET
pop_gset2:
    0199 E0E2      LDI	R30,2
    019A C00C      RJMP	pop
push_gset5:
    019B 92FA      ST	R15,-Y
    019C 92EA      ST	R14,-Y
push_gset4:
    019D 92DA      ST	R13,-Y
    019E 92CA      ST	R12,-Y
push_gset3:
    019F 92BA      ST	R11,-Y
    01A0 92AA      ST	R10,-Y
push_gset2:
    01A1 937A      ST	R23,-Y
    01A2 936A      ST	R22,-Y
push_gset1:
    01A3 935A      ST	R21,-Y
    01A4 934A      ST	R20,-Y
    01A5 9508      RET
pop_gset1:
    01A6 E0E1      LDI	R30,1
pop:
    01A7 9149      LD	R20,Y+
    01A8 9159      LD	R21,Y+
    01A9 FDE0      SBRC	R30,0
    01AA 9508      RET
    01AB 9169      LD	R22,Y+
    01AC 9179      LD	R23,Y+
    01AD FDE1      SBRC	R30,1
    01AE 9508      RET
    01AF 90A9      LD	R10,Y+
    01B0 90B9      LD	R11,Y+
    01B1 FDE2      SBRC	R30,2
    01B2 9508      RET
    01B3 90C9      LD	R12,Y+
    01B4 90D9      LD	R13,Y+
    01B5 FDE3      SBRC	R30,3
    01B6 9508      RET
    01B7 90E9      LD	R14,Y+
    01B8 90F9      LD	R15,Y+
    01B9 9508      RET
asgncblk:
    01BA 93AA      ST	R26,-Y
    01BB 93BA      ST	R27,-Y
    01BC 93EA      ST	R30,-Y
    01BD 93FA      ST	R31,-Y
    01BE 920A      ST	R0,-Y
    01BF 81AF      LDD	R26,Y+7
    01C0 85B8      LDD	R27,Y+8
    01C1 81ED      LDD	R30,Y+5
    01C2 81FE      LDD	R31,Y+6
    01C3 3000      CPI	R16,0
    01C4 0701      CPC	R16,R17
    01C5 F031      BEQ	0x01CC
    01C6 95C8      LPM
    01C7 920D      ST	R0,X+
    01C8 9631      ADIW	R30,1
    01C9 5001      SUBI	R16,1
    01CA 4010      SBCI	R17,0
    01CB CFF7      RJMP	0x01C3
    01CC 9009      LD	R0,Y+
    01CD 91F9      LD	R31,Y+
    01CE 91E9      LD	R30,Y+
    01CF 91B9      LD	R27,Y+
    01D0 91A9      LD	R26,Y+
    01D1 9624      ADIW	R28,4
    01D2 9508      RET

⌨️ 快捷键说明

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