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

📄 dac.lis

📁 双龙公司开发版源程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module DAC.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\icc\iccavr\mega8\mega8\DAC\DAC.c
 0000                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0000           _timer1_init::
 0000                   .dbline -1
 0000                   .dbline 24
 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           ; #define osc_address   0x1ff0
 0000           ; extern unsigned char read_flash(unsigned int add);
 0000           ; unsigned int adc_old;
 0000           ; //T1初始化程序 
 0000           ; void timer1_init(void)
 0000           ; {
 0000                   .dbline 25
 0000           ;  TCCR1B = 0; //stop
 0000 2224              clr R2
 0002 2EBC              out 0x2e,R2
 0004                   .dbline 26
 0004           ;  TCNT1H = 0; 
 0004 2DBC              out 0x2d,R2
 0006                   .dbline 27
 0006           ;  OCR1A=0;
 0006 3324              clr R3
 0008 3BBC              out 0x2b,R3
 000A 2ABC              out 0x2a,R2
 000C                   .dbline 28
 000C           ;  TCCR1A =(1<<WGM11)|(1<<WGM10)|(1<<COM1A1);
 000C 83E8              ldi R24,131
 000E 8FBD              out 0x2f,R24
 0010                   .dbline 29
 0010           ;  TCCR1B =(1<<CS10);//(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0x1A //start Timer
 0010 81E0              ldi R24,1
 0012 8EBD              out 0x2e,R24
 0014                   .dbline -2
 0014                   .dbline 30
 0014           ; } 
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
                        .area vector(rom, abs)
                        .org 2
 0002 0BC0              rjmp _int_isr
                        .area text(rom, con, rel)
 0016                   .dbfile E:\icc\iccavr\mega8\mega8\DAC\DAC.c
                        .area vector(rom, abs)
                        .org 4
 0004 0BC0              rjmp _int_isr
                        .area text(rom, con, rel)
 0016                   .dbfile E:\icc\iccavr\mega8\mega8\DAC\DAC.c
 0016                   .dbfunc e int_isr _int_isr fV
 0016           ;              i -> R20
                        .even
 0016           _int_isr::
 0016 00D0              rcall push_lset
 0018 00D0              rcall push_gset1
 001A                   .dbline -1
 001A                   .dbline 34
 001A           ; //两个中断向量使用同一个中断处理函数,实现对INT0/INT1按键的处理
 001A           ; #pragma interrupt_handler int_isr:iv_INT0 int_isr:iv_INT1
 001A           ; void int_isr(void)
 001A           ; {
 001A                   .dbline 36
 001A           ;  unsigned char i;
 001A           ;  delay_ms(10);
 001A 0AE0              ldi R16,10
 001C 10E0              ldi R17,0
 001E 00D0              rcall _delay_ms
 0020                   .dbline 37
 0020           ;  i=PIND&0x0c;//键盘消抖动
 0020 40B3              in R20,0x10
 0022 4C70              andi R20,12
 0024                   .dbline 38
 0024           ;  if(i==0x0c) 
 0024 4C30              cpi R20,12
 0026 09F4              brne L3
 0028                   .dbline 39
 0028           ;     return;   
 0028 29C0              rjmp L2
 002A           L3:
 002A                   .dbline 41
 002A           ;  else
 002A           ;    {
 002A                   .dbline 42
 002A           ;     if (i==0x08)//INT0键按下
 002A 4830              cpi R20,8
 002C 81F4              brne L5
 002E                   .dbline 43
 002E           ;                   {
 002E                   .dbline 44
 002E           ;                        if(OCR1A<0x3ef)
 002E 8AB5              in R24,0x2a
 0030 9BB5              in R25,0x2b
 0032 8F3E              cpi R24,239
 0034 E3E0              ldi R30,3
 0036 9E07              cpc R25,R30
 0038 30F4              brsh L7
 003A                   .dbline 45
 003A           ;                           OCR1A+=0x10;//递增
 003A 8AB5              in R24,0x2a
 003C 9BB5              in R25,0x2b
 003E 4096              adiw R24,16
 0040 9BBD              out 0x2b,R25
 0042 8ABD              out 0x2a,R24
 0044 04C0              rjmp L8
 0046           L7:
 0046                   .dbline 47
 0046           ;                    else
 0046           ;                           OCR1A=0x3ff;                
 0046 8FEF              ldi R24,1023
 0048 93E0              ldi R25,3
 004A 9BBD              out 0x2b,R25
 004C 8ABD              out 0x2a,R24
 004E           L8:
 004E                   .dbline 48
 004E           ;                       }
 004E           L5:
 004E                   .dbline 49
 004E           ;       if (i==0x04)//INT1键按下
 004E 4430              cpi R20,4
 0050 89F4              brne L14
 0052                   .dbline 50
 0052           ;                   {
 0052                   .dbline 51
 0052           ;                        if(OCR1A>0x10)
 0052 80E1              ldi R24,16
 0054 90E0              ldi R25,0
 0056 2AB4              in R2,0x2a
 0058 3BB4              in R3,0x2b
 005A 8215              cp R24,R2
 005C 9305              cpc R25,R3
 005E 30F4              brsh L11
 0060                   .dbline 52
 0060           ;                           OCR1A-=0x10;//递减
 0060 8AB5              in R24,0x2a
 0062 9BB5              in R25,0x2b
 0064 4097              sbiw R24,16
 0066 9BBD              out 0x2b,R25
 0068 8ABD              out 0x2a,R24
 006A 04C0              rjmp L14
 006C           L11:
 006C                   .dbline 54
 006C           ;                        else
 006C           ;                           OCR1A=0;    
 006C 2224              clr R2
 006E 3324              clr R3
 0070 3BBC              out 0x2b,R3
 0072 2ABC              out 0x2a,R2
 0074                   .dbline 55
 0074           ;                       }
 0074           L13:
 0074                   .dbline 57
 0074           L14:
 0074                   .dbline 56
 0074           ;     while((PIND&0x0c)!=0x0c)//检查按键释放
 0074 80B3              in R24,0x10
 0076 8C70              andi R24,12
 0078 8C30              cpi R24,12
 007A E1F7              brne L13
 007C                   .dbline 58
 007C           ;        ;
 007C           ;       } 
 007C                   .dbline -2
 007C                   .dbline 59
 007C           ; }
 007C           L2:
 007C 00D0              rcall pop_gset1
 007E 00D0              rcall pop_lset
 0080                   .dbline 0 ; func end
 0080 1895              reti
 0082                   .dbsym r i 20 c
 0082                   .dbend
 0082                   .dbfunc e main _main fV
 0082           ;           temp -> R22,R23
 0082           ;              i -> R10
                        .even
 0082           _main::
 0082                   .dbline -1
 0082                   .dbline 62
 0082           ; //MAIN程序
 0082           ; void main(void)
 0082           ; {
 0082                   .dbline 65
 0082           ;  unsigned char i;
 0082           ;  unsigned int temp;
 0082           ;  DDRB=(1<<PB1);
 0082 82E0              ldi R24,2
 0084 87BB              out 0x17,R24
 0086                   .dbline 66
 0086           ;  DDRD=0xf0;
 0086 80EF              ldi R24,240
 0088 81BB              out 0x11,R24
 008A                   .dbline 67
 008A           ;  PORTD=0xff;
 008A 8FEF              ldi R24,255
 008C 82BB              out 0x12,R24
 008E                   .dbline 68
 008E           ;  OSCCAL=read_flash(osc_address);
 008E 00EF              ldi R16,8176

⌨️ 快捷键说明

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