📄 adc.lis
字号:
.module ADC.C
.area vector(rom, abs)
.org 22
0016 25C0 rjmp _USART_receive
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\ADC\ADC.C
0000 .dbfunc e initial_ADC _initial_ADC fV
.even
0000 _initial_ADC::
0000 .dbline -1
0000 .dbline 15
0000 ; /******************************
0000 ; NAME: ADC.C
0000 ; DATA:2007/5/8
0000 ; AUTHOR: DIP STIDIO
0000 ; CPU: ATMEGA8
0000 ; 8.000MHz
0000 ; ******************************/
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; #pragma interrupt_handler USART_receive: 12
0000 ; //------------------------------------------------------------------
0000 ; // ADC初始化函数
0000 ; //------------------------------------------------------------------
0000 ; void initial_ADC(void)
0000 ; {
0000 .dbline 16
0000 ; ADMUX=0XE0; //使用片内2.56基准电压,左对齐模式。
0000 80EE ldi R24,224
0002 87B9 out 0x7,R24
0004 .dbline 20
0004 ;
0004 ; // ADMUX=0XC0; //使用片内2.56基准电压,右对齐模式。
0004 ;
0004 ; ADCSRA=0X86; //开启ADC功能,关中断,时钟为系统时钟的64分频(BIT2-BIT0确定分频数)
0004 86E8 ldi R24,134
0006 86B9 out 0x6,R24
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
000A .dbfunc e ADC_run8bit _ADC_run8bit fc
000A ; result -> R20
000A ; channel -> R16
.even
000A _ADC_run8bit::
000A 00D0 rcall push_gset1
000C .dbline -1
000C .dbline 27
000C ;
000C ; }
000C ; //-------------------------------------------------------------------
000C ; // ADC转换函数(8位精度,左对齐,单次采样)
000C ; //-------------------------------------------------------------------
000C ; unsigned char ADC_run8bit(unsigned char channel)//通道号为0X00--0X07
000C ; {
000C .dbline 28
000C ; unsigned char result=0; //转换结果
000C 4427 clr R20
000E .dbline 30
000E ;
000E ; ADMUX|=channel; //确定通道号
000E 27B0 in R2,0x7
0010 202A or R2,R16
0012 27B8 out 0x7,R2
0014 .dbline 32
0014 ;
0014 ; ADCSRA|=0X40; //启动AD转换(通过写ADSC位实现)
0014 369A sbi 0x6,6
0016 .dbline 34
0016 ;
0016 ; result=ADCH; //储存采样结果
0016 45B1 in R20,0x5
0018 .dbline 36
0018 ;
0018 ; return(result); //返回结果
0018 042F mov R16,R20
001A .dbline -2
001A L2:
001A 00D0 rcall pop_gset1
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r result 20 c
001E .dbsym r channel 16 c
001E .dbend
001E .dbfunc e initial_USART _initial_USART fV
.even
001E _initial_USART::
001E .dbline -1
001E .dbline 63
001E ; }
001E ; /*
001E ; //-------------------------------------------------------------------
001E ; // ADC转换函数(10位精度,左对齐,单次采样)
001E ; //-------------------------------------------------------------------
001E ; int ADC_run16bit(unsigned char channel)//通道号为0X00--0X07
001E ; {
001E ; int result=0; //转换结果
001E ; int RESH=0,RESL=0; //存储高低位结果
001E ;
001E ; ADCMUX|=channel; //确定通道号
001E ;
001E ; ADCSRA|=0X40; //启动AD转换(通过写ADSC位实现)
001E ;
001E ; RESH=ADCH; //储存高位结果
001E ; RESL=ADCL; //储存低位结果
001E ;
001E ; result=(RESH<<8)|RESL;
001E ;
001E ; return(result); //返回结果
001E ; }
001E ; */
001E ; //------------------------------------------------------------------
001E ; // USART初始化函数
001E ; //------------------------------------------------------------------
001E ; void initial_USART(void)
001E ; {
001E .dbline 65
001E ; //-----端口设置--------
001E ; PORTB = 0x00;
001E 2224 clr R2
0020 28BA out 0x18,R2
0022 .dbline 66
0022 ; DDRB = 0x00;
0022 27BA out 0x17,R2
0024 .dbline 67
0024 ; PORTC = 0x00;
0024 25BA out 0x15,R2
0026 .dbline 68
0026 ; DDRC = 0x00;
0026 24BA out 0x14,R2
0028 .dbline 69
0028 ; PORTD = 0x00;
0028 22BA out 0x12,R2
002A .dbline 70
002A ; DDRD = 0xFF;
002A 8FEF ldi R24,255
002C 81BB out 0x11,R24
002E .dbline 72
002E ; //------USART设置-------
002E ; UCSRA=0X00; //波特率不加倍,同时清空一些标志位
002E 2BB8 out 0xb,R2
0030 .dbline 73
0030 ; UCSRB=0X98; //使能接收和发送,数据位为8位,开接收中断
0030 88E9 ldi R24,152
0032 8AB9 out 0xa,R24
0034 .dbline 74
0034 ; UCSRC=0X86; //异步方式,禁止奇偶校验,数据位为8位
0034 86E8 ldi R24,134
0036 80BD out 0x20,R24
0038 .dbline 76
0038 ; //时钟频率8M,波特率9600
0038 ; UBRRH=0X00;
0038 20BC out 0x20,R2
003A .dbline 77
003A ; UBRRL=0X33;
003A 83E3 ldi R24,51
003C 89B9 out 0x9,R24
003E .dbline 82
003E ; //时钟频率8M,波特率57600
003E ; // UBRRH=0X00;
003E ; // UBRRL=0X08;
003E ;
003E ; SEI(); //全局开中断
003E 7894 sei
0040 .dbline -2
0040 L3:
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbend
0042 .dbfunc e send _send fV
0042 ; DAT -> R16
.even
0042 _send::
0042 .dbline -1
0042 .dbline 88
0042 ; }
0042 ; //--------------------------------------------------------------
0042 ; // 发送函数
0042 ; //--------------------------------------------------------------
0042 ; void send(unsigned char DAT)
0042 ; {
0042 .dbline 89
0042 ; UDR=DAT; //发送数据
0042 0CB9 out 0xc,R16
0044 L5:
0044 .dbline 90
0044 L6:
0044 .dbline 90
0044 ; while ( !( UCSRA & (1<<TXC)) ); //检验TXC位,当TXC=1时可以表示发送完成
0044 5E9B sbis 0xb,6
0046 FECF rjmp L5
0048 .dbline -2
0048 L4:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbsym r DAT 16 c
004A .dbend
004A .dbfunc e USART_receive _USART_receive fV
004A ; RECdata -> R22
004A ; ADCdata -> R20
.even
004A _USART_receive::
004A 00D0 rcall push_lset
004C 00D0 rcall push_gset2
004E .dbline -1
004E .dbline 96
004E ; } //发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位
004E ; //--------------------------------------------------------------
004E ; // 接收中断服务函数
004E ; //--------------------------------------------------------------
004E ; void USART_receive(void)
004E ; { unsigned char ADCdata=0X04;
004E .dbline 96
004E 44E0 ldi R20,4
0050 .dbline 98
0050 ; unsigned char RECdata;
0050 ; RECdata=UDR;
0050 6CB1 in R22,0xc
0052 .dbline 99
0052 ; ADCdata=ADC_run8bit(RECdata);//AD转换
0052 062F mov R16,R22
0054 DADF rcall _ADC_run8bit
0056 402F mov R20,R16
0058 .dbline 100
0058 ; send( ADCdata);
0058 F4DF rcall _send
005A .dbline -2
005A L8:
005A 00D0 rcall pop_gset2
005C 00D0 rcall pop_lset
005E .dbline 0 ; func end
005E 1895 reti
0060 .dbsym r RECdata 22 c
0060 .dbsym r ADCdata 20 c
0060 .dbend
0060 .dbfunc e main _main fV
.even
0060 _main::
0060 .dbline -1
0060 .dbline 107
0060 ;
0060 ; }
0060 ; //------------------------------------------------------------------
0060 ; // 主函数
0060 ; //------------------------------------------------------------------
0060 ; void main(void)
0060 ; {
0060 .dbline 108
0060 ; initial_USART();
0060 DEDF rcall _initial_USART
0062 .dbline 109
0062 ; initial_ADC();
0062 CEDF rcall _initial_ADC
0064 L10:
0064 .dbline 111
0064 L11:
0064 .dbline 111
0064 FFCF rjmp L10
0066 X0:
0066 .dbline -2
0066 L9:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -