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