📄 ad.lst
字号:
(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 + -