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

📄 dac.lis

📁 ATMEL AVR MEGA8 MCU DAC 驱动控制源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module dac.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\调试程序\mega48\DAC\dac.c
 0000                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0000           _timer1_init::
 0000                   .dbline -1
 0000                   .dbline 14
 0000           ; //使用内部RC振荡,PB6-G,PB7-DP短路块连接
 0000           ; //使用INT0/INT1按键改变DAC输出电压大小
 0000           ; //可以使用ADC0通道测量DAC的输出电压
 0000           ; //演示了使用PC机对MEGA8开发板进行控制的方法
 0000           ; #include <iom48v.h>
 0000           ; #include <macros.h>
 0000           ; #define osccal 0x9A//内部RC校正常数
 0000           ; #define Vref   500//参考电压值
 0000           ; #include"uart.h"
 0000           ; #include"adc.h"
 0000           ; unsigned int adc_old;
 0000           ; //T1初始化程序 
 0000           ; void timer1_init(void)
 0000           ; {
 0000                   .dbline 15
 0000           ;  TCCR1B = 0; //stop
 0000 2224              clr R2
 0002 20928100          sts 129,R2
 0006                   .dbline 16
 0006           ;  TCNT1H = 0; 
 0006 20928500          sts 133,R2
 000A                   .dbline 17
 000A           ;  OCR1A=0;
 000A 3324              clr R3
 000C 30928900          sts 136+1,R3
 0010 20928800          sts 136,R2
 0014                   .dbline 18
 0014           ;  TCCR1A =(1<<WGM11)|(1<<WGM10)|(1<<COM1A1);
 0014 83E8              ldi R24,131
 0016 80938000          sts 128,R24
 001A                   .dbline 19
 001A           ;  TCCR1B =(1<<CS10);//(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0x1A //start Timer
 001A 81E0              ldi R24,1
 001C 80938100          sts 129,R24
 0020                   .dbline -2
 0020           L1:
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbend
                        .area vector(rom, abs)
                        .org 2
 0002 11C0              rjmp _int_isr
                        .area text(rom, con, rel)
 0022                   .dbfile C:\调试程序\mega48\DAC\dac.c
                        .area vector(rom, abs)
                        .org 4
 0004 11C0              rjmp _int_isr
                        .area text(rom, con, rel)
 0022                   .dbfile C:\调试程序\mega48\DAC\dac.c
 0022                   .dbfunc e int_isr _int_isr fV
 0022           ;              i -> R20
                        .even
 0022           _int_isr::
 0022 00D0              rcall push_lset
 0024 00D0              rcall push_gset1
 0026                   .dbline -1
 0026                   .dbline 24
 0026           ; } 
 0026           ; //两个中断向量使用同一个中断处理函数,实现对INT0/INT1按键的处理
 0026           ; #pragma interrupt_handler int_isr:2 int_isr:3
 0026           ; void int_isr(void)
 0026           ; {
 0026                   .dbline 26
 0026           ;  unsigned char i;
 0026           ;  delay_ms(10);
 0026 0AE0              ldi R16,10
 0028 10E0              ldi R17,0
 002A 00D0              rcall _delay_ms
 002C                   .dbline 27
 002C           ;  i=PIND&0x0c;//键盘消抖动
 002C 49B1              in R20,0x9
 002E 4C70              andi R20,12
 0030                   .dbline 28
 0030           ;  if(i==0x0c) 
 0030 4C30              cpi R20,12
 0032 09F4              brne L3
 0034                   .dbline 29
 0034           ;     return;   
 0034 39C0              rjmp L2
 0036           L3:
 0036                   .dbline 31
 0036           ;  else
 0036           ;    {
 0036                   .dbline 32
 0036           ;     if (i==0x08)//INT0键按下
 0036 4830              cpi R20,8
 0038 C1F4              brne L5
 003A                   .dbline 33
 003A           ;                   {
 003A                   .dbline 34
 003A           ;                        if(OCR1A<0x3ef)
 003A 80918800          lds R24,136
 003E 90918900          lds R25,136+1
 0042 8F3E              cpi R24,239
 0044 E3E0              ldi R30,3
 0046 9E07              cpc R25,R30
 0048 50F4              brsh L7
 004A                   .dbline 35
 004A           ;                           OCR1A+=0x10;//递增
 004A 80918800          lds R24,136
 004E 90918900          lds R25,136+1
 0052 4096              adiw R24,16
 0054 90938900          sts 136+1,R25
 0058 80938800          sts 136,R24
 005C 06C0              rjmp L8
 005E           L7:
 005E                   .dbline 37
 005E           ;                    else
 005E           ;                           OCR1A=0x3ff;                
 005E 8FEF              ldi R24,1023
 0060 93E0              ldi R25,3
 0062 90938900          sts 136+1,R25
 0066 80938800          sts 136,R24
 006A           L8:
 006A                   .dbline 38
 006A           ;                       }
 006A           L5:
 006A                   .dbline 39
 006A           ;       if (i==0x04)//INT1键按下
 006A 4430              cpi R20,4
 006C C9F4              brne L14
 006E                   .dbline 40
 006E           ;                   {
 006E                   .dbline 41
 006E           ;                        if(OCR1A>0x10)
 006E 80E1              ldi R24,16
 0070 90E0              ldi R25,0
 0072 20908800          lds R2,136
 0076 30908900          lds R3,136+1
 007A 8215              cp R24,R2
 007C 9305              cpc R25,R3
 007E 50F4              brsh L11
 0080                   .dbline 42
 0080           ;                           OCR1A-=0x10;//递减
 0080 80918800          lds R24,136
 0084 90918900          lds R25,136+1
 0088 4097              sbiw R24,16
 008A 90938900          sts 136+1,R25
 008E 80938800          sts 136,R24
 0092 06C0              rjmp L14
 0094           L11:
 0094                   .dbline 44
 0094           ;                        else
 0094           ;                           OCR1A=0;    
 0094 2224              clr R2
 0096 3324              clr R3
 0098 30928900          sts 136+1,R3
 009C 20928800          sts 136,R2
 00A0                   .dbline 45
 00A0           ;                       }
 00A0           L13:
 00A0                   .dbline 47
 00A0           L14:
 00A0                   .dbline 46
 00A0           ;     while((PIND&0x0c)!=0x0c)//检查按键释放
 00A0 89B1              in R24,0x9
 00A2 8C70              andi R24,12
 00A4 8C30              cpi R24,12
 00A6 E1F7              brne L13
 00A8                   .dbline 48
 00A8           ;        ;
 00A8           ;       } 
 00A8                   .dbline -2
 00A8           L2:
 00A8 00D0              rcall pop_gset1
 00AA 00D0              rcall pop_lset
 00AC                   .dbline 0 ; func end
 00AC 1895              reti
 00AE                   .dbsym r i 20 c
 00AE                   .dbend
 00AE                   .dbfunc e main _main fV
 00AE           ;           temp -> R22,R23
 00AE           ;              i -> R10
                        .even
 00AE           _main::
 00AE                   .dbline -1
 00AE                   .dbline 52
 00AE           ; }
 00AE           ; //MAIN程序
 00AE           ; void main(void)
 00AE           ; {
 00AE                   .dbline 55
 00AE           ;  unsigned char i;
 00AE           ;  unsigned int temp;
 00AE           ;  DDRB=(1<<PB1);    //置输出比较oc1a为高电平
 00AE 82E0              ldi R24,2
 00B0 84B9              out 0x4,R24
 00B2                   .dbline 56
 00B2           ;  DDRD=0xf0;
 00B2 80EF              ldi R24,240
 00B4 8AB9              out 0xa,R24
 00B6                   .dbline 57
 00B6           ;  PORTD=0xff;
 00B6 8FEF              ldi R24,255
 00B8 8BB9              out 0xb,R24
 00BA                   .dbline 58
 00BA           ;  OSCCAL=osccal;
 00BA 8AE9              ldi R24,154
 00BC 80936600          sts 102,R24
 00C0                   .dbline 59
 00C0           ;  adc_mux=0;
 00C0 2224              clr R2
 00C2 20920000          sts _adc_mux,R2
 00C6                   .dbline 60
 00C6           ;  uart_init();
 00C6 00D0              rcall _uart_init
 00C8                   .dbline 61
 00C8           ;  timer1_init();
 00C8 9BDF              rcall _timer1_init
 00CA                   .dbline 62
 00CA           ;  adc_init();
 00CA 00D0              rcall _adc_init
 00CC                   .dbline 64
 00CC           ;  //GICR  = 0xC0;//int0,int1中断使能
 00CC           ;  SEI();
 00CC 7894              sei
 00CE                   .dbline 65
 00CE           ;  EIMSK=3;
 00CE 83E0              ldi R24,3
 00D0 8DBB              out 0x1d,R24
 00D2                   .dbline 67

⌨️ 快捷键说明

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