📄 dac.lis
字号:
.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 + -