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

📄 dac.lis

📁 Atmega8实例程序之-DAC的应用(SL-MEGA8开发板)
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module DAC.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\mega8\DAC\DAC.c
 0000                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0000           _timer1_init::
 0000                   .dbline -1
 0000                   .dbline 23
 0000           ; /*******************************************/
 0000           ; /*            广州天河双龙电子公司         */
 0000           ; /*            http://www.sl.com.cn         */
 0000           ; /*           用PWM实现的DAC转换演示程序    */
 0000           ; /*               外部中断演示程序          */
 0000           ; /*              作者:ntzwq@wx88.net        */
 0000           ; /*                2002年5月11日            */
 0000           ; /*   目标MCU:MEGA8   晶振:内部RC(INT) 8MHZ */
 0000           ; /*******************************************/
 0000           ; //使用内部RC振荡,PB6-G,PB7-DP短路块连接
 0000           ; //使用INT0/INT1按键改变DAC输出电压大小
 0000           ; //可以使用ADC0通道测量DAC的输出电压
 0000           ; //演示了使用PC机对MEGA8开发板进行控制的方法
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #define Vref   500//参考电压值
 0000           ; #include"uart.h"
 0000           ; #include"adc.h"
 0000           ; extern unsigned char read_flash(unsigned int add);
 0000           ; unsigned int adc_old;
 0000           ; //T1初始化程序 
 0000           ; void timer1_init(void)
 0000           ; {
 0000                   .dbline 24
 0000           ;  TCCR1B = 0; //stop
 0000 2224              clr R2
 0002 2EBC              out 0x2e,R2
 0004                   .dbline 25
 0004           ;  TCNT1H = 0; 
 0004 2DBC              out 0x2d,R2
 0006                   .dbline 26
 0006           ;  OCR1A=0;
 0006 3324              clr R3
 0008 30924B00          sts 74+1,R3
 000C 20924A00          sts 74,R2
 0010                   .dbline 27
 0010           ;  TCCR1A =(1<<WGM11)|(1<<WGM10)|(1<<COM1A1);
 0010 83E8              ldi R24,131
 0012 8FBD              out 0x2f,R24
 0014                   .dbline 28
 0014           ;  TCCR1B =(1<<CS10);//(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0x1A //start Timer
 0014 81E0              ldi R24,1
 0016 8EBD              out 0x2e,R24
 0018                   .dbline -2
 0018                   .dbline 29
 0018           ; } 
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
                        .area vector(rom, abs)
                        .org 2
 0002 0DC0              rjmp _int_isr
                        .area text(rom, con, rel)
 001A                   .dbfile C:\mega8\DAC\DAC.c
                        .area vector(rom, abs)
                        .org 4
 0004 0DC0              rjmp _int_isr
                        .area text(rom, con, rel)
 001A                   .dbfile C:\mega8\DAC\DAC.c
 001A                   .dbfunc e int_isr _int_isr fV
 001A           ;              i -> R20
                        .even
 001A           _int_isr::
 001A 00D0              rcall push_lset
 001C 00D0              rcall push_gset1
 001E                   .dbline -1
 001E                   .dbline 33
 001E           ; //两个中断向量使用同一个中断处理函数,实现对INT0/INT1按键的处理
 001E           ; #pragma interrupt_handler int_isr:iv_INT0 int_isr:iv_INT1
 001E           ; void int_isr(void)
 001E           ; {
 001E                   .dbline 35
 001E           ;  unsigned char i;
 001E           ;  delay_ms(10);
 001E 0AE0              ldi R16,10
 0020 10E0              ldi R17,0
 0022 00D0              rcall _delay_ms
 0024                   .dbline 36
 0024           ;  i=PIND&0x0c;//键盘消抖动
 0024 40B3              in R20,0x10
 0026 4C70              andi R20,12
 0028                   .dbline 37
 0028           ;  if(i==0x0c) 
 0028 4C30              cpi R20,12
 002A 09F4              brne L3
 002C                   .dbline 38
 002C           ;     return;   
 002C 31C0              rjmp L2
 002E           L3:
 002E                   .dbline 40
 002E           ;  else
 002E           ;    {
 002E                   .dbline 41
 002E           ;     if (i==0x08)//INT0键按下
 002E 4830              cpi R20,8
 0030 A1F4              brne L5
 0032                   .dbline 42
 0032           ;                   {
 0032                   .dbline 43
 0032           ;                        if(OCR1A<0x3ef)
 0032 8AB5              in R24,0x2a
 0034 9BB5              in R25,0x2b
 0036 8F3E              cpi R24,239
 0038 E3E0              ldi R30,3
 003A 9E07              cpc R25,R30
 003C 40F4              brsh L7
 003E                   .dbline 44
 003E           ;                           OCR1A+=0x10;//递增
 003E 8AB5              in R24,0x2a
 0040 9BB5              in R25,0x2b
 0042 4096              adiw R24,16
 0044 90934B00          sts 74+1,R25
 0048 80934A00          sts 74,R24
 004C 06C0              rjmp L8
 004E           L7:
 004E                   .dbline 46
 004E           ;                    else
 004E           ;                           OCR1A=0x3ff;                
 004E 8FEF              ldi R24,1023
 0050 93E0              ldi R25,3
 0052 90934B00          sts 74+1,R25
 0056 80934A00          sts 74,R24
 005A           L8:
 005A                   .dbline 47
 005A           ;                       }
 005A           L5:
 005A                   .dbline 48
 005A           ;       if (i==0x04)//INT1键按下
 005A 4430              cpi R20,4
 005C A9F4              brne L14
 005E                   .dbline 49
 005E           ;                   {
 005E                   .dbline 50
 005E           ;                        if(OCR1A>0x10)
 005E 80E1              ldi R24,16
 0060 90E0              ldi R25,0
 0062 2AB4              in R2,0x2a
 0064 3BB4              in R3,0x2b
 0066 8215              cp R24,R2
 0068 9305              cpc R25,R3
 006A 40F4              brsh L11
 006C                   .dbline 51
 006C           ;                           OCR1A-=0x10;//递减
 006C 8AB5              in R24,0x2a
 006E 9BB5              in R25,0x2b
 0070 4097              sbiw R24,16
 0072 90934B00          sts 74+1,R25
 0076 80934A00          sts 74,R24
 007A 06C0              rjmp L14
 007C           L11:
 007C                   .dbline 53
 007C           ;                        else
 007C           ;                           OCR1A=0;    
 007C 2224              clr R2
 007E 3324              clr R3
 0080 30924B00          sts 74+1,R3
 0084 20924A00          sts 74,R2
 0088                   .dbline 54
 0088           ;                       }
 0088           L13:
 0088                   .dbline 56
 0088           L14:
 0088                   .dbline 55
 0088           ;     while((PIND&0x0c)!=0x0c)//检查按键释放
 0088 80B3              in R24,0x10
 008A 8C70              andi R24,12
 008C 8C30              cpi R24,12
 008E E1F7              brne L13
 0090                   .dbline 57
 0090           ;        ;
 0090           ;       } 
 0090                   .dbline -2
 0090                   .dbline 58
 0090           ; }
 0090           L2:
 0090 00D0              rcall pop_gset1
 0092 00D0              rcall pop_lset
 0094                   .dbline 0 ; func end
 0094 1895              reti
 0096                   .dbsym r i 20 c
 0096                   .dbend
 0096                   .dbfunc e main _main fV
 0096           ;           temp -> R22,R23
 0096           ;              i -> R10
                        .even
 0096           _main::
 0096                   .dbline -1
 0096                   .dbline 61
 0096           ; //MAIN程序
 0096           ; void main(void)
 0096           ; {
 0096                   .dbline 64
 0096           ;  unsigned char i;
 0096           ;  unsigned int temp;
 0096           ;  DDRB=(1<<PB1);
 0096 82E0              ldi R24,2
 0098 87BB              out 0x17,R24
 009A                   .dbline 65
 009A           ;  DDRD=0xf0;
 009A 80EF              ldi R24,240
 009C 81BB              out 0x11,R24
 009E                   .dbline 66
 009E           ;  PORTD=0xff;
 009E 8FEF              ldi R24,255
 00A0 82BB              out 0x12,R24
 00A2                   .dbline 67
 00A2           ;  OSCCAL=read_flash(0x1f20);
 00A2 00E2              ldi R16,7968
 00A4 1FE1              ldi R17,31
 00A6 00D0              rcall _read_flash

⌨️ 快捷键说明

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