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

📄 ad.lst

📁 基于ATMEGA16的AD转换的C程序源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0121) 
(0122) /******************************************************************************/ 
(0123) //函数功能:将BCD码转换为ASCII码函数 
(0124) //输入数据:BCD
(0125) //输出:ASCII
(0126) //作者:韩红瑞
(0127) //修改时间:2006-08-31
(0128) /******************************************************************************/ 
(0129) unsigned char BCD_ASCII(unsigned char bcd) 
(0130) { 
(0131)     bcd &= 0x0F; 
_BCD_ASCII:
  bcd                  --> R16
    00E8 700F      ANDI	R16,0xF
(0132)     if(bcd > 9)  
    00E9 E089      LDI	R24,0x9
    00EA 1780      CP	R24,R16
    00EB F410      BCC	0x00EE
(0133)     bcd +=('7');     // 将A~F转换为ASCII 
    00EC 5C09      SUBI	R16,0xC9
    00ED C001      RJMP	0x00EF
(0134)     else 
(0135)     bcd += '0';         // 将0~9转换为ASCII 0~9 
    00EE 5D00      SUBI	R16,0xD0
(0136)     return(bcd); 
    00EF 9508      RET
_LCD_writeasc:
  data                 --> Y+4
  y                    --> R22
  x                    --> R20
    00F0 940E0179  CALL	push_gset2
    00F2 2F62      MOV	R22,R18
    00F3 2F40      MOV	R20,R16
(0137) } 
(0138)  
(0139) 
(0140) void  LCD_writeasc(unsigned char x, unsigned char y, unsigned char data)
(0141) {
(0142)     LCD_address(x,y);
    00F4 2F26      MOV	R18,R22
    00F5 2F04      MOV	R16,R20
    00F6 DFB3      RCALL	_LCD_address
(0143) 	WR_dat(data);
    00F7 810C      LDD	R16,Y+4
    00F8 DF73      RCALL	_WR_dat
    00F9 940E016D  CALL	pop_gset2
    00FB 9508      RET
(0144) }
(0145)   
(0146) void Lcd_INT()
(0147) {
(0148)   
(0149)   DDRA|=BIT(1);
_Lcd_INT:
    00FC 9AD1      SBI	0x1A,1
(0150)   DDRA|=BIT(3);
    00FD 9AD3      SBI	0x1A,3
(0151)   lcd_control();
    00FE DF95      RCALL	_lcd_control
    00FF 9508      RET
_lcd_writechar:
  number               --> Y+4
  Y                    --> R22
  X                    --> R20
    0100 940E0179  CALL	push_gset2
    0102 2F62      MOV	R22,R18
    0103 2F40      MOV	R20,R16
(0152) }
(0153) 
(0154) void lcd_writechar(unsigned char X,unsigned char Y,unsigned char number)
(0155) {
(0156)     LCD_address(X,Y);
    0104 2F26      MOV	R18,R22
    0105 2F04      MOV	R16,R20
    0106 DFA3      RCALL	_LCD_address
(0157) 	WR_dat(BCD_ASCII(number>>4));
    0107 810C      LDD	R16,Y+4
    0108 9502      SWAP	R16
    0109 700F      ANDI	R16,0xF
    010A DFDD      RCALL	_BCD_ASCII
    010B DF60      RCALL	_WR_dat
(0158) 	WR_dat(BCD_ASCII(number));
    010C 810C      LDD	R16,Y+4
    010D DFDA      RCALL	_BCD_ASCII
    010E DF5D      RCALL	_WR_dat
    010F 940E016D  CALL	pop_gset2
    0111 9508      RET
_lcd_write2:
  number               --> Y+4
  Y                    --> R22
  X                    --> R20
    0112 940E0179  CALL	push_gset2
    0114 2F62      MOV	R22,R18
    0115 2F40      MOV	R20,R16
(0159) }
(0160) /*
(0161) void lcd_write2(unsigned char X,unsigned char Y,unsigned char number)
(0162) {
(0163)     LCD_address(X,Y);
(0164) 	
(0165) 	WR_dat(BCD_ASCII(number%100/10));
(0166) 	WR_dat(BCD_ASCII(number%10));
(0167) }
(0168) */
(0169) void lcd_write2(unsigned char X,unsigned char Y,unsigned char number)
(0170) {
(0171)     LCD_address(X,Y);
    0116 2F26      MOV	R18,R22
    0117 2F04      MOV	R16,R20
    0118 DF91      RCALL	_LCD_address
(0172) 	WR_dat(BCD_ASCII(number/100));
    0119 E614      LDI	R17,0x64
    011A 810C      LDD	R16,Y+4
    011B 940E0157  CALL	div8u
    011D DFCA      RCALL	_BCD_ASCII
    011E DF4D      RCALL	_WR_dat
(0173) 	WR_dat(BCD_ASCII(number%100/10));
    011F E614      LDI	R17,0x64
    0120 810C      LDD	R16,Y+4
    0121 940E0155  CALL	mod8u
    0123 E01A      LDI	R17,0xA
    0124 940E0157  CALL	div8u
    0126 DFC1      RCALL	_BCD_ASCII
    0127 DF44      RCALL	_WR_dat
(0174) 	LCD_address(X,Y+1);
    0128 2F26      MOV	R18,R22
    0129 5F2F      SUBI	R18,0xFF
    012A 2F04      MOV	R16,R20
    012B DF7E      RCALL	_LCD_address
(0175) 	WR_dat(BCD_ASCII(number%10));
    012C E01A      LDI	R17,0xA
    012D 810C      LDD	R16,Y+4
    012E 940E0155  CALL	mod8u
    0130 DFB7      RCALL	_BCD_ASCII
    0131 DF3A      RCALL	_WR_dat
    0132 940E016D  CALL	pop_gset2
    0134 9508      RET
FILE: H:\bbi项目源程序\AD转换\adc_16\ad.c
(0001) #include "iom16v.h"
(0002) #include "macros.h"
(0003) #include "lcd.h"
(0004) unsigned int Adc0_Conver[1];
(0005) unsigned char time;
(0006) void Adc_Init(void)
(0007) {
(0008)   DDRD&=~0x80;
_Adc_Init:
    0135 988F      CBI	0x11,7
(0009)   PORTD&=~0x80;
    0136 9897      CBI	0x12,7
(0010)  ADMUX=0xe0;                //片内2.56基准源,通道为ADC0
    0137 EE80      LDI	R24,0xE0
    0138 B987      OUT	0x07,R24
(0011)  ADCSRA=0X00;                //停止ADC
    0139 2422      CLR	R2
    013A B826      OUT	0x06,R2
(0012) 
(0013)  ACSR=(1<<ACD);				 //关闭模拟比较器
    013B E880      LDI	R24,0x80
    013C B988      OUT	0x08,R24
(0014)  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)
    013D EC8F      LDI	R24,0xCF
    013E B986      OUT	0x06,R24
    013F 9508      RET
_Adc_isr:
    0140 940E0192  CALL	push_lset
    0142 9721      SBIW	R28,1
(0015) 		|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);	//使能ADC、启动AD转换、使能ADC中断、128分频
(0016)                                             
(0017) }
(0018) 
(0019) #pragma interrupt_handler Adc_isr:15
(0020) void Adc_isr(void)
(0021) {
(0022)   	 	time=ADCH;		                //取出转换结果到缓冲数组
    0143 B025      IN	R2,0x05
    0144 92200061  STS	time,R2
(0023) 		lcd_write2(2,1,time);           //显示转换结果
    0146 8228      STD	Y+0,R2
    0147 E021      LDI	R18,1
    0148 E002      LDI	R16,2
    0149 DFC8      RCALL	_lcd_write2
(0024) 		ADCSRA|=(1<<ADSC);				//启动转换
    014A 9A36      SBI	0x06,6
    014B 9621      ADIW	R28,1
    014C 940E01A9  CALL	pop_lset
    014E 9518      RETI
(0025) }
(0026) void main()
(0027) { CLI();
_main:
    014F 94F8      BCLR	7
(0028)  Adc_Init();
    0150 DFE4      RCALL	_Adc_Init
(0029)  Lcd_INT();
    0151 DFAA      RCALL	_Lcd_INT
(0030)  lcd_clear();
    0152 DF46      RCALL	_lcd_clear
(0031)  SEI();
FILE: <library>
    0153 9478      BSET	7
    0154 9508      RET
mod8u:
    0155 9468      BSET	6
    0156 C001      RJMP	xdiv8u
div8u:
    0157 94E8      BCLR	6
xdiv8u:
    0158 932A      ST	R18,-Y
    0159 92FA      ST	R15,-Y
    015A 92EA      ST	R14,-Y
    015B 24FF      CLR	R15
    015C 24EE      CLR	R14
    015D E120      LDI	R18,0x10
    015E 0F00      LSL	R16
    015F 1CFF      ROL	R15
    0160 1CEE      ROL	R14
    0161 16E1      CP	R14,R17
    0162 F010      BCS	0x0165
    0163 1AE1      SUB	R14,R17
    0164 9503      INC	R16
    0165 952A      DEC	R18
    0166 F7B9      BNE	0x015E
    0167 F40E      BRTC	0x0169
    0168 2D0E      MOV	R16,R14
    0169 90E9      LD	R14,Y+
    016A 90F9      LD	R15,Y+
    016B 9129      LD	R18,Y+
    016C 9508      RET
pop_gset2:
    016D E0E2      LDI	R30,2
    016E 940C017F  JMP	pop
pop_gset3:
    0170 E0E4      LDI	R30,4
    0171 940C017F  JMP	pop
push_gset5:
    0173 92FA      ST	R15,-Y
    0174 92EA      ST	R14,-Y
push_gset4:
    0175 92DA      ST	R13,-Y
    0176 92CA      ST	R12,-Y
push_gset3:
    0177 92BA      ST	R11,-Y
    0178 92AA      ST	R10,-Y
push_gset2:
    0179 937A      ST	R23,-Y
    017A 936A      ST	R22,-Y
push_gset1:
    017B 935A      ST	R21,-Y
    017C 934A      ST	R20,-Y
    017D 9508      RET
pop_gset1:
    017E E0E1      LDI	R30,1
pop:
    017F 9149      LD	R20,Y+
    0180 9159      LD	R21,Y+
    0181 FDE0      SBRC	R30,0
    0182 9508      RET
    0183 9169      LD	R22,Y+
    0184 9179      LD	R23,Y+
    0185 FDE1      SBRC	R30,1
    0186 9508      RET
    0187 90A9      LD	R10,Y+
    0188 90B9      LD	R11,Y+
    0189 FDE2      SBRC	R30,2
    018A 9508      RET
    018B 90C9      LD	R12,Y+
    018C 90D9      LD	R13,Y+
    018D FDE3      SBRC	R30,3
    018E 9508      RET
    018F 90E9      LD	R14,Y+
    0190 90F9      LD	R15,Y+
    0191 9508      RET
push_lset:
    0192 93FA      ST	R31,-Y
    0193 93EA      ST	R30,-Y
    0194 93BA      ST	R27,-Y
    0195 93AA      ST	R26,-Y
    0196 939A      ST	R25,-Y
    0197 938A      ST	R24,-Y
    0198 933A      ST	R19,-Y
    0199 932A      ST	R18,-Y
    019A 931A      ST	R17,-Y
    019B 930A      ST	R16,-Y
    019C 929A      ST	R9,-Y
    019D 928A      ST	R8,-Y
    019E 927A      ST	R7,-Y
    019F 926A      ST	R6,-Y
    01A0 925A      ST	R5,-Y
    01A1 924A      ST	R4,-Y
    01A2 923A      ST	R3,-Y
    01A3 922A      ST	R2,-Y
    01A4 921A      ST	R1,-Y
    01A5 920A      ST	R0,-Y
    01A6 B60F      IN	R0,0x3F
    01A7 920A      ST	R0,-Y
    01A8 9508      RET
pop_lset:
    01A9 9009      LD	R0,Y+
    01AA BE0F      OUT	0x3F,R0
    01AB 9009      LD	R0,Y+
    01AC 9019      LD	R1,Y+
    01AD 9029      LD	R2,Y+
    01AE 9039      LD	R3,Y+
    01AF 9049      LD	R4,Y+
    01B0 9059      LD	R5,Y+
    01B1 9069      LD	R6,Y+
    01B2 9079      LD	R7,Y+
    01B3 9089      LD	R8,Y+
    01B4 9099      LD	R9,Y+
    01B5 9109      LD	R16,Y+
    01B6 9119      LD	R17,Y+
    01B7 9129      LD	R18,Y+
    01B8 9139      LD	R19,Y+
    01B9 9189      LD	R24,Y+
    01BA 9199      LD	R25,Y+
    01BB 91A9      LD	R26,Y+
    01BC 91B9      LD	R27,Y+
    01BD 91E9      LD	R30,Y+
    01BE 91F9      LD	R31,Y+
    01BF 9508      RET

⌨️ 快捷键说明

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