📄 m128.lst
字号:
051C 019B MOVW R18,R22
051D 018B MOVW R16,R22
051E 940E071A CALL empy16s
0520 0178 MOVW R14,R16
0521 C005 RJMP 0x0527
(0364) while ((yt*yt)>(rr-xx))
(0365) yt--;
0522 8188 LDD R24,Y+0
0523 8199 LDD R25,Y+1
0524 9701 SBIW R24,1
0525 8399 STD Y+1,R25
0526 8388 STD Y+0,R24
0527 802A LDD R2,Y+2
0528 803B LDD R3,Y+3
0529 182E SUB R2,R14
052A 083F SBC R3,R15
052B 8128 LDD R18,Y+0
052C 8139 LDD R19,Y+1
052D 0189 MOVW R16,R18
052E 940E071A CALL empy16s
0530 1620 CP R2,R16
0531 0631 CPC R3,R17
0532 F378 BCS 0x0522
(0366) x=x0+xt; //第一象限
0533 84AE LDD R10,Y+14
0534 24BB CLR R11
0535 0EA6 ADD R10,R22
0536 1EB7 ADC R11,R23
(0367) y=y0-yt;
0537 88C8 LDD R12,Y+16
0538 24DD CLR R13
0539 8008 LDD R0,Y+0
053A 8019 LDD R1,Y+1
053B 18C0 SUB R12,R0
053C 08D1 SBC R13,R1
(0368) pset(x,y);
053D 2D2C MOV R18,R12
053E 2D0A MOV R16,R10
053F DF27 RCALL _pset
(0369) x=x0-xt; //第二象限
0540 84AE LDD R10,Y+14
0541 24BB CLR R11
0542 1AA6 SUB R10,R22
0543 0AB7 SBC R11,R23
(0370) pset(x,y);
0544 2D2C MOV R18,R12
0545 2D0A MOV R16,R10
0546 DF20 RCALL _pset
(0371) y=y0+yt; //第三象限
0547 88C8 LDD R12,Y+16
0548 24DD CLR R13
0549 8008 LDD R0,Y+0
054A 8019 LDD R1,Y+1
054B 0CC0 ADD R12,R0
054C 1CD1 ADC R13,R1
(0372) pset(x,y);
054D 2D2C MOV R18,R12
054E 2D0A MOV R16,R10
054F DF17 RCALL _pset
(0373) x=x0+xt; //第四象限
0550 84AE LDD R10,Y+14
0551 24BB CLR R11
0552 0EA6 ADD R10,R22
0553 1EB7 ADC R11,R23
(0374) pset(x,y);
0554 2D2C MOV R18,R12
0555 2D0A MOV R16,R10
0556 DF10 RCALL _pset
(0375) /******45度镜象画另外8分之一圆弧******/
(0376) x=x0+yt; //第一象限
0557 84AE LDD R10,Y+14
0558 24BB CLR R11
0559 8008 LDD R0,Y+0
055A 8019 LDD R1,Y+1
055B 0CA0 ADD R10,R0
055C 1CB1 ADC R11,R1
(0377) y=y0-xt;
055D 88C8 LDD R12,Y+16
055E 24DD CLR R13
055F 1AC6 SUB R12,R22
0560 0AD7 SBC R13,R23
(0378) pset(x,y);
0561 2D2C MOV R18,R12
0562 2D0A MOV R16,R10
0563 DF03 RCALL _pset
(0379) x=x0-yt; //第二象限
0564 84AE LDD R10,Y+14
0565 24BB CLR R11
0566 8008 LDD R0,Y+0
0567 8019 LDD R1,Y+1
0568 18A0 SUB R10,R0
0569 08B1 SBC R11,R1
(0380) pset(x,y);
056A 2D2C MOV R18,R12
056B 2D0A MOV R16,R10
056C DEFA RCALL _pset
(0381) y=y0+xt; //第三象限
056D 88C8 LDD R12,Y+16
056E 24DD CLR R13
056F 0EC6 ADD R12,R22
0570 1ED7 ADC R13,R23
(0382) pset(x,y);
0571 2D2C MOV R18,R12
0572 2D0A MOV R16,R10
0573 DEF3 RCALL _pset
(0383) x=x0+yt; //第四象限
0574 84AE LDD R10,Y+14
0575 24BB CLR R11
0576 8008 LDD R0,Y+0
0577 8019 LDD R1,Y+1
0578 0CA0 ADD R10,R0
0579 1CB1 ADC R11,R1
(0384) pset(x,y);
057A 2D2C MOV R18,R12
057B 2D0A MOV R16,R10
057C DEEA RCALL _pset
057D 5F6F SUBI R22,0xFF
057E 4F7F SBCI R23,0xFF
057F 1746 CP R20,R22
0580 0757 CPC R21,R23
0581 F008 BCS 0x0583
0582 CF99 RJMP 0x051C
0583 9624 ADIW R28,4
0584 940E0730 CALL pop_gset5
0586 9624 ADIW R28,4
0587 9508 RET
FILE: D:\PROTEU~1.7\PROTEU~1.7\JOHU\a___EWTS82\m128_my.c
(0001) //ICC-AVR application builder : 2007-2-21 下午 09:30:23
(0002) // Target : M128
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom128v.h>
(0006) #include <macros.h>
(0007) int v=0;
(0008) unsigned int time=0;
(0009)
(0010) void port_init(void)
(0011) {
_port_init:
0588 9508 RET
(0012)
(0013) }
(0014)
(0015) //ADC initialize
(0016) // Conversion time: 3uS
(0017) void adc_init(void)
(0018) {
(0019) ADCSRA = 0x00; //disable adc
_adc_init:
0589 2422 CLR R2
058A B826 OUT 0x06,R2
(0020) ADMUX = 0x00; //select adc input 0
058B B827 OUT 0x07,R2
(0021) ACSR = 0x80;
058C E880 LDI R24,0x80
058D B988 OUT 0x08,R24
(0022) ADCSRA = 0xE9;
058E EE89 LDI R24,0xE9
058F B986 OUT 0x06,R24
0590 9508 RET
_adc_isr:
0591 922A ST R2,-Y
0592 923A ST R3,-Y
0593 924A ST R4,-Y
0594 925A ST R5,-Y
0595 B62F IN R2,0x3F
0596 922A ST R2,-Y
(0023) }
(0024)
(0025) #pragma interrupt_handler adc_isr:22
(0026) void adc_isr(void)
(0027) {
(0028) //conversion complete, read value (int) using...
(0029) v=ADCL; //Read 8 low bits first (important)
0597 B024 IN R2,0x04
0598 2433 CLR R3
0599 92300101 STS v+1,R3
059B 92200100 STS v,R2
(0030) v|=(int)ADCH << 8; //read 2 high bits and shift into top byte
059D B025 IN R2,0x05
059E 2433 CLR R3
059F 2C32 MOV R3,R2
05A0 2422 CLR R2
05A1 90400100 LDS R4,v
05A3 90500101 LDS R5,v+1
05A5 2842 OR R4,R2
05A6 2853 OR R5,R3
05A7 92500101 STS v+1,R5
05A9 92400100 STS v,R4
05AB 9029 LD R2,Y+
05AC BE2F OUT 0x3F,R2
05AD 9059 LD R5,Y+
05AE 9049 LD R4,Y+
05AF 9039 LD R3,Y+
05B0 9029 LD R2,Y+
05B1 9518 RETI
(0031)
(0032)
(0033) }
(0034)
(0035) //call this routine to initialize all peripherals
(0036) void init_devices(void)
(0037) {
(0038) //stop errant interrupts until set up
(0039) CLI(); //disable all interrupts
_init_devices:
05B2 94F8 BCLR 7
(0040) XDIV = 0x00; //xtal divider
05B3 2422 CLR R2
05B4 BE2C OUT 0x3C,R2
(0041) XMCRA = 0x00; //external memory
05B5 9220006D STS 0x6D,R2
(0042) port_init();
05B7 DFD0 RCALL _port_init
(0043) adc_init();
05B8 DFD0 RCALL _adc_init
(0044) timer0_init();
05B9 D00E RCALL _timer0_init
(0045)
(0046) MCUCR = 0x00;
05BA 2422 CLR R2
05BB BE25 OUT 0x35,R2
(0047) EICRA = 0x0A; //extended ext ints
05BC E08A LDI R24,0xA
05BD 9380006A STS 0x6A,R24
(0048) EICRB = 0x00; //extended ext ints
05BF BE2A OUT 0x3A,R2
(0049) EIMSK = 0x03;
05C0 E083 LDI R24,3
05C1 BF89 OUT 0x39,R24
(0050) TIMSK = 0x01; //timer interrupt sources
05C2 E081 LDI R24,1
05C3 BF87 OUT 0x37,R24
(0051) ETIMSK = 0x00; //extended timer interrupt sources
05C4 9220007D STS 0x7D,R2
(0052) SEI(); //re-enable interrupts
05C6 9478 BSET 7
05C7 9508 RET
(0053) //all peripherals are now initialized
(0054) }
(0055)
(0056)
(0057)
(0058) //TIMER0 initialize - prescale:64
(0059) // WGM: Normal
(0060) // desired value: 1mSec
(0061) // actual value: 1.000mSec (0.0%)
(0062) void timer0_init(void)
(0063) {
(0064) TCCR0 = 0x00; //stop
_timer0_init:
05C8 2422 CLR R2
05C9 BE23 OUT 0x33,R2
(0065) ASSR = 0x00; //set async mode
05CA BE20 OUT 0x30,R2
(0066) TCNT0 = 0x83; //set count
05CB E883 LDI R24,0x83
05CC BF82 OUT 0x32,R24
(0067) OCR0 = 0x7D;
05CD E78D LDI R24,0x7D
05CE BF81 OUT 0x31,R24
(0068) TCCR0 = 0x04; //start timer
05CF E084 LDI R24,4
05D0 BF83 OUT 0x33,R24
05D1 9508 RET
_timer0_ovf_isr:
05D2 938A ST R24,-Y
05D3 939A ST R25,-Y
05D4 B78F IN R24,0x3F
05D5 938A ST R24,-Y
(0069) }
(0070)
(0071) #pragma interrupt_handler timer0_ovf_isr:17
(0072) void timer0_ovf_isr(void)
(0073) {
(0074) TCNT0 = 0x83; //reload counter value
05D6 E883 LDI R24,0x83
05D7 BF82 OUT 0x32,R24
(0075) time++;
05D8 91800102 LDS R24,time
05DA 91900103 LDS R25,time+1
05DC 9601 ADIW R24,1
05DD 93900103 STS time+1,R25
05DF 93800102 STS time,R24
05E1 9189 LD R24,Y+
05E2 BF8F OUT 0x3F,R24
05E3 9199 LD R25,Y+
05E4 9189 LD R24,Y+
05E5 9518 RETI
_int0_isr:
05E6 922A ST R2,-Y
05E7 938A ST R24,-Y
05E8 B62F IN R2,0x3F
05E9 922A ST R2,-Y
(0076) }
(0077) #pragma interrupt_handler int0_isr:2
(0078) void int0_isr(void)
(0079) {
(0080) //external interupt on INT0
(0081) EIMSK = 0x00;
05EA 2422 CLR R2
05EB BE29 OUT 0x39,R2
(0082) PORTB=0xfe;
05EC EF8E LDI R24,0xFE
05ED BB88 OUT 0x18,R24
05EE 9029 LD R2,Y+
05EF BE2F OUT 0x3F,R2
05F0 9189 LD R24,Y+
05F1 9029 LD R2,Y+
05F2 9518 RETI
_int1_isr:
05F3 922A ST R2,-Y
05F4 938A ST R24,-Y
05F5 B62F IN R2,0x3F
05F6 922A ST R2,-Y
(0083) }
(0084)
(0085) #pragma interrupt_handler int1_isr:3
(0086) void int1_isr(void)
(0087) {
(0088) //external interupt on INT1
(0089) EIMSK = 0x00;
05F7 2422 CLR R2
05F8 BE29 OUT 0x39,R2
(0090) PORTB=0xfd;
05F9 EF8D LDI R24,0xFD
05FA BB88 OUT 0x18,R24
05FB 9029 LD R2,Y+
05FC BE2F OUT 0x3F,R2
05FD 9189 LD R24,Y+
05FE 9029 LD R2,Y+
05FF 9518 RETI
_asc_tran1:
asc_p --> Y+4
y --> R20
x --> R22
0600 940E0739 CALL push_gset2
0602 2F42 MOV R20,R18
0603 2F60 MOV R22,R16
(0091) }
(0092)
(0093)
(0094) /* 传送ASCII字母到LCD */
(0095) /* x:0x00~0x0f y:0~64 */
(0096) void asc_tran1(unsigned char x,unsigned char y,unsigned char *asc_p)
(0097) {
(0098) x+=4;
0604 5F6C SUBI R22,0xFC
(0099) //while((*asc_p)!=0)
(0100) {
(0101) ocmj_write(0xf1);
0605 EF01 LDI R16,0xF1
0606 E010 LDI R17,0
0607 940E03BB CALL _ocmj_write
(0102) ocmj_write(x);
0609 2F06 MOV R16,R22
060A 2711 CLR R17
060B 940E03BB CALL _ocmj_write
(0103) ocmj_write(y);
060D 2F04 MOV R16,R20
060E 2711 CLR R17
060F 940E03BB CALL _ocmj_write
(0104) ocmj_write(*asc_p);
0611 81EC LDD R30,Y+4
0612 81FD LDD R31,Y+5
0613 8100 LDD R16,Z+0
0614 2711 CLR R17
0615 940E03BB CALL _ocmj_write
(0105) asc_p++;
0617 818C LDD R24,Y+4
0618 819D LDD R25,Y+5
0619 9601 ADIW R24,1
061A 839D STD Y+5,R25
061B 838C STD Y+4,R24
(0106) if (x<0x13)
061C 3163 CPI R22,0x13
061D F410 BCC 0x0620
(0107) x++;
061E 9563 INC R22
061F C002 RJMP 0x0622
(0108) else
(0109) {
(0110) x=0x04;
0620 E064 LDI R22,4
(0111) y+=8;
0621 5F48 SUBI R20,0xF8
(0112) }
(0113) }
0622 940E072A CALL pop_gset2
0624 9508 RET
_main:
j --> R20
code --> Y+2
a --> R22
i --> R10
x --> R12
0625 972E SBIW R28,0xE
(0114) }
(0115)
(0116)
(0117)
(0118) main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -