📄 ad.lst
字号:
__start:
__text_start:
002F E5CF LDI R28,0x5F
0030 E0D4 LDI R29,4
0031 BFCD OUT 0x3D,R28
0032 BFDE OUT 0x3E,R29
0033 51C0 SUBI R28,0x10
0034 40D0 SBCI R29,0
0035 EA0A LDI R16,0xAA
0036 8308 STD Y+0,R16
0037 2400 CLR R0
0038 E6EA LDI R30,0x6A
0039 E0F0 LDI R31,0
003A E010 LDI R17,0
003B 36EA CPI R30,0x6A
003C 07F1 CPC R31,R17
003D F011 BEQ 0x0040
003E 9201 ST R0,Z+
003F CFFB RJMP 0x003B
0040 8300 STD Z+0,R16
0041 E5E4 LDI R30,0x54
0042 E0F0 LDI R31,0
0043 E6A0 LDI R26,0x60
0044 E0B0 LDI R27,0
0045 E010 LDI R17,0
0046 35EE CPI R30,0x5E
0047 07F1 CPC R31,R17
0048 F021 BEQ 0x004D
0049 95C8 LPM
004A 9631 ADIW R30,1
004B 920D ST R0,X+
004C CFF9 RJMP 0x0046
004D 940E009B CALL _main
_exit:
004F CFFF RJMP _exit
_delay_ms:
i --> R20
time --> R16
0050 940E00C7 CALL push_gset1
FILE: D:\AVR\我的程序\AD转换实验\cfg.h
(0001) /*******************************
(0002) *程序名称:各功能函数
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-20
(0005) ********************************/
(0006) #include <iom16v.h>
(0007) unsigned char disp[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
(0008)
(0009) /*延时子程序*/
(0010) void delay_ms(int time)
(0011) {
(0012) int i;
(0013) for(;time>0;time--)
0052 C00A RJMP 0x005D
(0014) for(i=0;i<1000;i++);
0053 2744 CLR R20
0054 2755 CLR R21
0055 5F4F SUBI R20,0xFF
0056 4F5F SBCI R21,0xFF
0057 3E48 CPI R20,0xE8
0058 E0E3 LDI R30,3
0059 075E CPC R21,R30
005A F3D4 BLT 0x0055
005B 5001 SUBI R16,1
005C 4010 SBCI R17,0
005D 2422 CLR R2
005E 2433 CLR R3
005F 1620 CP R2,R16
0060 0631 CPC R3,R17
0061 F38C BLT 0x0053
0062 940E00CA CALL pop_gset1
0064 9508 RET
(0015) }
(0016)
(0017) /*SPI接口初始化*/
(0018) void SPI_MasterInit(void) {
(0019)
(0020) DDRB |= (1<<PB5) | (1<<PB7); /* 设置MOSI 和SCK 为输出,其他为输入 */
_SPI_MasterInit:
0065 B387 IN R24,0x17
0066 6A80 ORI R24,0xA0
0067 BB87 OUT 0x17,R24
(0021) SPCR = (1<<SPE) | (1<<MSTR)
0068 E583 LDI R24,0x53
0069 B98D OUT 0x0D,R24
006A 9508 RET
(0022) | (1<<SPR1) | (1<<SPR0); /* 使能SPI主机模式,设置时钟速率为fck/128 */
(0023) }
(0024)
(0025) /*SPI数据发送*/
(0026) void SPI_MasterTransmit(unsigned char i)
(0027) {
(0028)
(0029) SPDR = i; /* 启动数据传输 */
_SPI_MasterTransmit:
i --> R16
006B B90F OUT 0x0F,R16
(0030) while (!(SPSR & (1<<SPIF))); /* 等待传输结束 */
006C 9B77 SBIS 0x0E,7
006D CFFE RJMP 0x006C
006E 9508 RET
_SPI_595_Out:
i --> R20
006F 940E00C7 CALL push_gset1
0071 2F40 MOV R20,R16
(0031) }
(0032)
(0033) /*595数据输出*/
(0034) void SPI_595_Out(unsigned char i)
(0035) {
(0036) PORTB &= ~(1 << 4); /*准备锁存*/
0072 98C4 CBI 0x18,4
(0037) SPI_MasterTransmit(i);
0073 2F04 MOV R16,R20
0074 DFF6 RCALL _SPI_MasterTransmit
(0038) PORTB |= (1 << 4); /*锁存数据*/
0075 9AC4 SBI 0x18,4
0076 940E00CA CALL pop_gset1
0078 9508 RET
(0039) }
(0040)
(0041) /*ADC采样函数,采样第7通道信号,采样分辨率256*/
(0042) void ADC_init()
(0043) {
(0044) ADMUX=0x67; /*基准AVCC、左对齐、通道7*/
_ADC_init:
0079 E687 LDI R24,0x67
007A B987 OUT 0x07,R24
(0045) SREG=0x80;
007B E880 LDI R24,0x80
007C BF8F OUT 0x3F,R24
(0046) ADCSRA=0xCA; /*使能、开启、4分频*/
007D EC8A LDI R24,0xCA
007E B986 OUT 0x06,R24
007F 9508 RET
_adc_int:
ad_result --> R20
0080 940E00DE CALL push_lset
0082 940E00C7 CALL push_gset1
(0047) }
(0048)
(0049) /*AD中断服务程序*/
(0050) #pragma interrupt_handler adc_int:15
(0051) void adc_int()
(0052) {
(0053) unsigned int ad_result;
(0054) ad_result= (unsigned int)ADCH;
0084 B145 IN R20,0x05
0085 2755 CLR R21
(0055) SPI_595_Out(disp[ad_result/100]);
0086 E624 LDI R18,0x64
0087 E030 LDI R19,0
0088 018A MOVW R16,R20
0089 940E00A5 CALL div16u
008B 01F8 MOVW R30,R16
008C E680 LDI R24,0x60
008D E090 LDI R25,0
008E 0FE8 ADD R30,R24
008F 1FF9 ADC R31,R25
0090 8100 LDD R16,Z+0
0091 DFDD RCALL _SPI_595_Out
(0056)
(0057) ADMUX=0x67; /*基准AVCC、左对齐、通道7*/
0092 E687 LDI R24,0x67
0093 B987 OUT 0x07,R24
(0058) ADCSRA=0xCA; /*使能、开启、4分频*/
0094 EC8A LDI R24,0xCA
0095 B986 OUT 0x06,R24
0096 940E00CA CALL pop_gset1
0098 940E00F5 CALL pop_lset
009A 9518 RETI
FILE: D:\AVR\我的程序\AD转换实验\main.c
(0001) /***********************************
(0002) *实验目的:熟悉ADC操作编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-20
(0005) ************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008)
(0009) void main(void)
(0010) {
(0011) DDRB = 0xFF; /*PB口设置为输出*/
_main:
009B EF8F LDI R24,0xFF
009C BB87 OUT 0x17,R24
(0012) PORTB = 0xF0; /*选通数码管*/
009D EF80 LDI R24,0xF0
009E BB88 OUT 0x18,R24
(0013)
(0014) SPI_MasterInit();
009F DFC5 RCALL _SPI_MasterInit
(0015) ADC_init();
00A0 DFD8 RCALL _ADC_init
(0016)
(0017) while (1);
FILE: <library>
00A1 CFFF RJMP 0x00A1
00A2 9508 RET
mod16u:
00A3 9468 BSET 6
00A4 C001 RJMP xdiv16u
div16u:
00A5 94E8 BCLR 6
xdiv16u:
00A6 92EA ST R14,-Y
00A7 92FA ST R15,-Y
00A8 938A ST R24,-Y
00A9 24EE CLR R14
00AA 24FF CLR R15
00AB E180 LDI R24,0x10
00AC 0F00 LSL R16
00AD 1F11 ROL R17
00AE 1CEE ROL R14
00AF 1CFF ROL R15
00B0 16E2 CP R14,R18
00B1 06F3 CPC R15,R19
00B2 F018 BCS 0x00B6
00B3 1AE2 SUB R14,R18
00B4 0AF3 SBC R15,R19
00B5 9503 INC R16
00B6 958A DEC R24
00B7 F7A1 BNE 0x00AC
00B8 F416 BRTC 0x00BB
00B9 2D0E MOV R16,R14
00BA 2D1F MOV R17,R15
00BB 9189 LD R24,Y+
00BC 90F9 LD R15,Y+
00BD 90E9 LD R14,Y+
00BE 9508 RET
push_gset5:
00BF 92FA ST R15,-Y
00C0 92EA ST R14,-Y
push_gset4:
00C1 92DA ST R13,-Y
00C2 92CA ST R12,-Y
push_gset3:
00C3 92BA ST R11,-Y
00C4 92AA ST R10,-Y
push_gset2:
00C5 937A ST R23,-Y
00C6 936A ST R22,-Y
push_gset1:
00C7 935A ST R21,-Y
00C8 934A ST R20,-Y
00C9 9508 RET
pop_gset1:
00CA E0E1 LDI R30,1
pop:
00CB 9149 LD R20,Y+
00CC 9159 LD R21,Y+
00CD FDE0 SBRC R30,0
00CE 9508 RET
00CF 9169 LD R22,Y+
00D0 9179 LD R23,Y+
00D1 FDE1 SBRC R30,1
00D2 9508 RET
00D3 90A9 LD R10,Y+
00D4 90B9 LD R11,Y+
00D5 FDE2 SBRC R30,2
00D6 9508 RET
00D7 90C9 LD R12,Y+
00D8 90D9 LD R13,Y+
00D9 FDE3 SBRC R30,3
00DA 9508 RET
00DB 90E9 LD R14,Y+
00DC 90F9 LD R15,Y+
00DD 9508 RET
push_lset:
00DE 93FA ST R31,-Y
00DF 93EA ST R30,-Y
00E0 93BA ST R27,-Y
00E1 93AA ST R26,-Y
00E2 939A ST R25,-Y
00E3 938A ST R24,-Y
00E4 933A ST R19,-Y
00E5 932A ST R18,-Y
00E6 931A ST R17,-Y
00E7 930A ST R16,-Y
00E8 929A ST R9,-Y
00E9 928A ST R8,-Y
00EA 927A ST R7,-Y
00EB 926A ST R6,-Y
00EC 925A ST R5,-Y
00ED 924A ST R4,-Y
00EE 923A ST R3,-Y
00EF 922A ST R2,-Y
00F0 921A ST R1,-Y
00F1 920A ST R0,-Y
00F2 B60F IN R0,0x3F
00F3 920A ST R0,-Y
00F4 9508 RET
pop_lset:
00F5 9009 LD R0,Y+
00F6 BE0F OUT 0x3F,R0
00F7 9009 LD R0,Y+
00F8 9019 LD R1,Y+
00F9 9029 LD R2,Y+
00FA 9039 LD R3,Y+
00FB 9049 LD R4,Y+
00FC 9059 LD R5,Y+
00FD 9069 LD R6,Y+
00FE 9079 LD R7,Y+
00FF 9089 LD R8,Y+
0100 9099 LD R9,Y+
0101 9109 LD R16,Y+
0102 9119 LD R17,Y+
0103 9129 LD R18,Y+
0104 9139 LD R19,Y+
0105 9189 LD R24,Y+
0106 9199 LD R25,Y+
0107 91A9 LD R26,Y+
0108 91B9 LD R27,Y+
0109 91E9 LD R30,Y+
010A 91F9 LD R31,Y+
010B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -