📄 50%wave.lis
字号:
.module _50%Wave.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出)\50%Wave.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 12
0000 ; //ICC-AVR application builder : 2006-12-9 10:11:46
0000 ; // Target : M8
0000 ; // Crystal: 4.0000Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; long Ddummy;
0000 ; char Settings_PerDotGroupNum,Settings_PrintPhase;
0000 ; char DAOutPutNow;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 13
0000 ; PORTB = 0; //0xFF;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 14
0004 ; DDRB = 0xFF; //0x08;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 15
0008 ; PORTC = 0x7F; //m103 output only
0008 8FE7 ldi R24,127
000A 85BB out 0x15,R24
000C .dbline 16
000C ; DDRC = 0x00;
000C 24BA out 0x14,R2
000E .dbline 17
000E ; PORTD = 0xFF;
000E 8FEF ldi R24,255
0010 82BB out 0x12,R24
0012 .dbline 18
0012 ; DDRD = 0x00;
0012 21BA out 0x11,R2
0014 .dbline -2
0014 .dbline 19
0014 ; }
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e timer2_init _timer2_init fV
.even
0016 _timer2_init::
0016 .dbline -1
0016 .dbline 26
0016 ;
0016 ; //TIMER2 initialisation - prescale:1
0016 ; // WGM: CTC
0016 ; // desired value: 62.5KHz
0016 ; // actual value: 63.39KHz (3.1%)
0016 ; void timer2_init(void)
0016 ; {
0016 .dbline 27
0016 ; TCCR2 = 0x00; //stop
0016 2224 clr R2
0018 25BC out 0x25,R2
001A .dbline 28
001A ; ASSR = 0x00; //set async mode
001A 22BC out 0x22,R2
001C .dbline 29
001C ; TCNT2 = 0x00; //setup
001C 24BC out 0x24,R2
001E .dbline 30
001E ; OCR2 = 0x20; //计数上限值
001E 80E2 ldi R24,32
0020 83BD out 0x23,R24
0022 .dbline 31
0022 ; TCCR2 = 0x19; //0x11:一般模式, 0x19:比较模式,计数比较成功后PB3电平取反
0022 89E1 ldi R24,25
0024 85BD out 0x25,R24
0026 .dbline -2
0026 .dbline 32
0026 ; }
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
.area vector(rom, abs)
.org 6
0006 14C0 rjmp _timer2_comp_isr
.area text(rom, con, rel)
0028 .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出)\50%Wave.c
0028 .dbfunc e timer2_comp_isr _timer2_comp_isr fV
.even
0028 _timer2_comp_isr::
0028 2A92 st -y,R2
002A 3A92 st -y,R3
002C 4A92 st -y,R4
002E 5A92 st -y,R5
0030 6A92 st -y,R6
0032 7A92 st -y,R7
0034 8A92 st -y,R8
0036 9A92 st -y,R9
0038 8A93 st -y,R24
003A 9A93 st -y,R25
003C AA93 st -y,R26
003E BA93 st -y,R27
0040 EA93 st -y,R30
0042 2FB6 in R2,0x3f
0044 2A92 st -y,R2
0046 00D0 rcall push_gset2
0048 .dbline -1
0048 .dbline 36
0048 ;
0048 ; #pragma interrupt_handler timer2_comp_isr:4
0048 ; void timer2_comp_isr(void) //compare occured TCNT2=OCR2
0048 ; {
0048 .dbline 37
0048 ; Ddummy++;
0048 41E0 ldi R20,1
004A 50E0 ldi R21,0
004C 60E0 ldi R22,0
004E 70E0 ldi R23,0
0050 40900500 lds R4,_Ddummy+2
0054 50900600 lds R5,_Ddummy+2+1
0058 20900300 lds R2,_Ddummy
005C 30900400 lds R3,_Ddummy+1
0060 240E add R2,R20
0062 351E adc R3,R21
0064 461E adc R4,R22
0066 571E adc R5,R23
0068 30920400 sts _Ddummy+1,R3
006C 20920300 sts _Ddummy,R2
0070 50920600 sts _Ddummy+2+1,R5
0074 40920500 sts _Ddummy+2,R4
0078 .dbline 38
0078 ; if(Ddummy==1) PORTB = PORTB & (~1); //PB0脚置低电平
0078 41E0 ldi R20,1
007A 50E0 ldi R21,0
007C 60E0 ldi R22,0
007E 70E0 ldi R23,0
0080 2416 cp R2,R20
0082 3506 cpc R3,R21
0084 4606 cpc R4,R22
0086 5706 cpc R5,R23
0088 09F4 brne L4
008A .dbline 38
008A C098 cbi 0x18,0
008C L4:
008C .dbline 39
008C 20900200 lds R2,_Settings_PerDotGroupNum
0090 3324 clr R3
0092 4424 clr R4
0094 5524 clr R5
0096 80900500 lds R8,_Ddummy+2
009A 90900600 lds R9,_Ddummy+2+1
009E 60900300 lds R6,_Ddummy
00A2 70900400 lds R7,_Ddummy+1
00A6 6214 cp R6,R2
00A8 7304 cpc R7,R3
00AA 8404 cpc R8,R4
00AC 9504 cpc R9,R5
00AE 84F0 brlt L6
00B0 .dbline 39
00B0 .dbline 40
00B0 40E0 ldi R20,0
00B2 50E0 ldi R21,0
00B4 60E0 ldi R22,0
00B6 70E0 ldi R23,0
00B8 50930400 sts _Ddummy+1,R21
00BC 40930300 sts _Ddummy,R20
00C0 70930600 sts _Ddummy+2+1,R23
00C4 60930500 sts _Ddummy+2,R22
00C8 .dbline 41
00C8 88B3 in R24,0x18
00CA 8E7F andi R24,254
00CC 8F5F subi R24,255 ; addi 1
00CE 88BB out 0x18,R24
00D0 .dbline 42
00D0 L6:
00D0 .dbline -2
00D0 .dbline 43
00D0 ; if(Ddummy >=Settings_PerDotGroupNum){
00D0 ; Ddummy =0; //恢复计数初值
00D0 ; PORTB = (PORTB & (~1)) + 1; //PB0脚置高电平
00D0 ; }
00D0 ; }
00D0 L3:
00D0 00D0 rcall pop_gset2
00D2 2990 ld R2,y+
00D4 2FBE out 0x3f,R2
00D6 E991 ld R30,y+
00D8 B991 ld R27,y+
00DA A991 ld R26,y+
00DC 9991 ld R25,y+
00DE 8991 ld R24,y+
00E0 9990 ld R9,y+
00E2 8990 ld R8,y+
00E4 7990 ld R7,y+
00E6 6990 ld R6,y+
00E8 5990 ld R5,y+
00EA 4990 ld R4,y+
00EC 3990 ld R3,y+
00EE 2990 ld R2,y+
00F0 .dbline 0 ; func end
00F0 1895 reti
00F2 .dbend
00F2 .dbfunc e init_devices _init_devices fV
.even
00F2 _init_devices::
00F2 .dbline -1
00F2 .dbline 59
00F2 ;
00F2 ; /*
00F2 ; #pragma interrupt_handler timer2_ovf_isr:5
00F2 ; void timer2_ovf_isr(void) //在比较模式下计数溢出中断不会发生
00F2 ; {
00F2 ; TCNT2 = 0xF0; //计数初值
00F2 ; if(PORTB & 2){ //PB1脚是高电平,改变PB1脚的电平使其形成振荡
00F2 ; PORTB -= 2; //则将PB1脚电平变低
00F2 ; return;
00F2 ; }
00F2 ; PORTB += 2; //如果PB1脚电平是低,则加2使其变高
00F2 ; }
00F2 ; */
00F2 ;
00F2 ; void init_devices(void) //call this routine to initialise all peripherals
00F2 ; {
00F2 .dbline 61
00F2 ; //stop errant interrupts until set up
00F2 ; CLI(); //disable all interrupts
00F2 F894 cli
00F4 .dbline 62
00F4 ; port_init();
00F4 85DF rcall _port_init
00F6 .dbline 63
00F6 ; timer2_init();
00F6 8FDF rcall _timer2_init
00F8 .dbline 65
00F8 ;
00F8 ; MCUCR = 0x00;
00F8 2224 clr R2
00FA 25BE out 0x35,R2
00FC .dbline 66
00FC ; GICR = 0x00;
00FC 2BBE out 0x3b,R2
00FE .dbline 67
00FE ; TIMSK = 0x80; //timer interrupt sources
00FE 80E8 ldi R24,128
0100 89BF out 0x39,R24
0102 .dbline 68
0102 ; SEI(); //re-enable interrupts
0102 7894 sei
0104 .dbline -2
0104 .dbline 70
0104 ; //all peripherals are now initialised
0104 ; }
0104 L8:
0104 .dbline 0 ; func end
0104 0895 ret
0106 .dbend
0106 .dbfunc e main _main fV
.even
0106 _main::
0106 .dbline -1
0106 .dbline 73
0106 ;
0106 ; void main()
0106 ; {
0106 .dbline 74
0106 ; init_devices();
0106 F5DF rcall _init_devices
0108 .dbline 75
0108 ; DAOutPutNow = 0;
0108 2224 clr R2
010A 20920000 sts _DAOutPutNow,R2
010E .dbline 76
010E ; Ddummy = 0; //临时变量,赋初值
010E 40E0 ldi R20,0
0110 50E0 ldi R21,0
0112 60E0 ldi R22,0
0114 70E0 ldi R23,0
0116 50930400 sts _Ddummy+1,R21
011A 40930300 sts _Ddummy,R20
011E 70930600 sts _Ddummy+2+1,R23
0122 60930500 sts _Ddummy+2,R22
0126 .dbline 77
0126 ; Settings_PerDotGroupNum =10; //每10个墨滴选一个进行打印
0126 8AE0 ldi R24,10
0128 80930200 sts _Settings_PerDotGroupNum,R24
012C .dbline 78
012C ; Settings_PrintPhase =10;
012C 80930100 sts _Settings_PrintPhase,R24
0130 .dbline -2
0130 .dbline 79
0130 ; }
0130 L9:
0130 .dbline 0 ; func end
0130 0895 ret
0132 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出)\50%Wave.c
0000 _DAOutPutNow::
0000 .blkb 1
0001 .dbsym e DAOutPutNow _DAOutPutNow c
0001 _Settings_PrintPhase::
0001 .blkb 1
0002 .dbsym e Settings_PrintPhase _Settings_PrintPhase c
0002 _Settings_PerDotGroupNum::
0002 .blkb 1
0003 .dbsym e Settings_PerDotGroupNum _Settings_PerDotGroupNum c
0003 _Ddummy::
0003 .blkb 4
0007 .dbsym e Ddummy _Ddummy L
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -