?? 50%wave.s
字號:
.module _50%Wave.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\hb\MYDOCU~1\噴嗎機--2代\單片機程序\定時器(方波輸出)\50%Wave.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 12
; //ICC-AVR application builder : 2006-12-9 10:11:46
; // Target : M8
; // Crystal: 4.0000Mhz
;
; #include <iom8v.h>
; #include <macros.h>
; long Ddummy;
; char Settings_PerDotGroupNum,Settings_PrintPhase;
; char DAOutPutNow;
;
; void port_init(void)
; {
.dbline 13
; PORTB = 0; //0xFF;
clr R2
out 0x18,R2
.dbline 14
; DDRB = 0xFF; //0x08;
ldi R24,255
out 0x17,R24
.dbline 15
; PORTC = 0x7F; //m103 output only
ldi R24,127
out 0x15,R24
.dbline 16
; DDRC = 0x00;
out 0x14,R2
.dbline 17
; PORTD = 0xFF;
ldi R24,255
out 0x12,R24
.dbline 18
; DDRD = 0x00;
out 0x11,R2
.dbline -2
.dbline 19
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer2_init _timer2_init fV
.even
_timer2_init::
.dbline -1
.dbline 26
;
; //TIMER2 initialisation - prescale:1
; // WGM: CTC
; // desired value: 62.5KHz
; // actual value: 63.39KHz (3.1%)
; void timer2_init(void)
; {
.dbline 27
; TCCR2 = 0x00; //stop
clr R2
out 0x25,R2
.dbline 28
; ASSR = 0x00; //set async mode
out 0x22,R2
.dbline 29
; TCNT2 = 0x00; //setup
out 0x24,R2
.dbline 30
; OCR2 = 0x20; //計數(shù)上限值
ldi R24,32
out 0x23,R24
.dbline 31
; TCCR2 = 0x19; //0x11:一般模式, 0x19:比較模式,計數(shù)比較成功后PB3電平取反
ldi R24,25
out 0x25,R24
.dbline -2
.dbline 32
; }
L2:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 6
rjmp _timer2_comp_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\hb\MYDOCU~1\噴嗎機--2代\單片機程序\定時器(方波輸出)\50%Wave.c
.dbfunc e timer2_comp_isr _timer2_comp_isr fV
.even
_timer2_comp_isr::
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
in R2,0x3f
st -y,R2
rcall push_gset2
.dbline -1
.dbline 36
;
; #pragma interrupt_handler timer2_comp_isr:4
; void timer2_comp_isr(void) //compare occured TCNT2=OCR2
; {
.dbline 37
; Ddummy++;
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_Ddummy+2
lds R5,_Ddummy+2+1
lds R2,_Ddummy
lds R3,_Ddummy+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _Ddummy+1,R3
sts _Ddummy,R2
sts _Ddummy+2+1,R5
sts _Ddummy+2,R4
.dbline 38
; if(Ddummy==1) PORTB = PORTB & (~1); //PB0腳置低電平
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brne L4
.dbline 38
cbi 0x18,0
L4:
.dbline 39
lds R2,_Settings_PerDotGroupNum
clr R3
clr R4
clr R5
lds R8,_Ddummy+2
lds R9,_Ddummy+2+1
lds R6,_Ddummy
lds R7,_Ddummy+1
cp R6,R2
cpc R7,R3
cpc R8,R4
cpc R9,R5
brlt L6
.dbline 39
.dbline 40
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _Ddummy+1,R21
sts _Ddummy,R20
sts _Ddummy+2+1,R23
sts _Ddummy+2,R22
.dbline 41
in R24,0x18
andi R24,254
subi R24,255 ; addi 1
out 0x18,R24
.dbline 42
L6:
.dbline -2
.dbline 43
; if(Ddummy >=Settings_PerDotGroupNum){
; Ddummy =0; //恢復(fù)計數(shù)初值
; PORTB = (PORTB & (~1)) + 1; //PB0腳置高電平
; }
; }
L3:
rcall pop_gset2
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 59
;
; /*
; #pragma interrupt_handler timer2_ovf_isr:5
; void timer2_ovf_isr(void) //在比較模式下計數(shù)溢出中斷不會發(fā)生
; {
; TCNT2 = 0xF0; //計數(shù)初值
; if(PORTB & 2){ //PB1腳是高電平,改變PB1腳的電平使其形成振蕩
; PORTB -= 2; //則將PB1腳電平變低
; return;
; }
; PORTB += 2; //如果PB1腳電平是低,則加2使其變高
; }
; */
;
; void init_devices(void) //call this routine to initialise all peripherals
; {
.dbline 61
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 62
; port_init();
rcall _port_init
.dbline 63
; timer2_init();
rcall _timer2_init
.dbline 65
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 66
; GICR = 0x00;
out 0x3b,R2
.dbline 67
; TIMSK = 0x80; //timer interrupt sources
ldi R24,128
out 0x39,R24
.dbline 68
; SEI(); //re-enable interrupts
sei
.dbline -2
.dbline 70
; //all peripherals are now initialised
; }
L8:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 73
;
; void main()
; {
.dbline 74
; init_devices();
rcall _init_devices
.dbline 75
; DAOutPutNow = 0;
clr R2
sts _DAOutPutNow,R2
.dbline 76
; Ddummy = 0; //臨時變量,賦初值
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _Ddummy+1,R21
sts _Ddummy,R20
sts _Ddummy+2+1,R23
sts _Ddummy+2,R22
.dbline 77
; Settings_PerDotGroupNum =10; //每10個墨滴選一個進行打印
ldi R24,10
sts _Settings_PerDotGroupNum,R24
.dbline 78
; Settings_PrintPhase =10;
sts _Settings_PrintPhase,R24
.dbline -2
.dbline 79
; }
L9:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\hb\MYDOCU~1\噴嗎機--2代\單片機程序\定時器(方波輸出)\50%Wave.c
_DAOutPutNow::
.blkb 1
.dbsym e DAOutPutNow _DAOutPutNow c
_Settings_PrintPhase::
.blkb 1
.dbsym e Settings_PrintPhase _Settings_PrintPhase c
_Settings_PerDotGroupNum::
.blkb 1
.dbsym e Settings_PerDotGroupNum _Settings_PerDotGroupNum c
_Ddummy::
.blkb 4
.dbsym e Ddummy _Ddummy L
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -