📄 fsdfds.lst
字号:
01AA 939A ST R25,-Y
01AB B62F IN R2,0x3F
01AC 922A ST R2,-Y
(0016) //TCCR0=0x05;
(0017) // TCCR0.7=0: 不强制输出比较
(0018) // TCCR0.3.TCCR0.6(WGM01,WGM00)=00 : T/C0普通工作模式(定时和计数)
(0019) // TCCR0.5, TCCR0.4=00: 正常的端口操作,OC0未连接
(0020) // TCCR0.2~TCCR0.0=010: Ft0=Ftos/256
(0021) // 因为TCNT0=6->250,所以,计时中断250*256/Ftos
(0022)
(0023) }
(0024) //-------------------------50HzPWM波产生函数---------------------------------//
(0025) //mega16
(0026) #pragma interrupt_handler timer0_ovf_isr:10
(0027) //mega128
(0028) //#pragma interrupt_handler timer0_ovf_isr:17
(0029) void timer0_ovf_isr(void)
(0030) {
(0031) static unsigned char tt; //tt用来保存当前时间在一秒中的比例位置
(0032) TCNT0=57;
01AD E389 LDI R24,0x39
01AE BF82 OUT 0x32,R24
(0033) tt++;
01AF 91800078 LDS R24,tt
01B1 5F8F SUBI R24,0xFF
01B2 93800078 STS tt,R24
(0034) if(tt==99)
01B4 3683 CPI R24,0x63
01B5 F421 BNE 0x01BA
(0035) {
(0036) tt=0;
01B6 2422 CLR R2
01B7 92200078 STS tt,R2
(0037) PORTD|=BIT(6);
01B9 9A96 SBI 0x12,6
(0038) }
(0039) if(scale==tt) //按照当前占空比切换输出高电平
01BA 90200078 LDS R2,tt
01BC 9030007C LDS R3,scale
01BE 1432 CP R3,R2
01BF F409 BNE 0x01C1
(0040) {
(0041) PORTD&=~BIT(6);
01C0 9896 CBI 0x12,6
(0042) }
(0043) if(tt==50)
01C1 91800078 LDS R24,tt
01C3 3382 CPI R24,0x32
01C4 F409 BNE 0x01C6
(0044) {
(0045) PORTD|=BIT(7);
01C5 9A97 SBI 0x12,7
(0046) }
(0047) if(tt==50+scale)
01C6 9180007C LDS R24,scale
01C8 5C8E SUBI R24,0xCE
01C9 90200078 LDS R2,tt
01CB 1628 CP R2,R24
01CC F409 BNE 0x01CE
(0048) {
(0049) PORTD&=~BIT(7);
01CD 9897 CBI 0x12,7
(0050) }
01CE 9029 LD R2,Y+
01CF BE2F OUT 0x3F,R2
01D0 9199 LD R25,Y+
01D1 9189 LD R24,Y+
01D2 9039 LD R3,Y+
01D3 9029 LD R2,Y+
01D4 9518 RETI
FILE: D:\我的文档\桌面\harvest\time1.h
(0001) #ifndef __time1_h
(0002) #define __time1_h
(0003) #include <iom16v.h>
(0004) //#include <iom128v.h>
(0005) #include <macros.h>
(0006) //--------------------------27KHzPWM波传产生函数------------------------------//
(0007) void timer1_int(void)
(0008) {
(0009) DDRD |= 0x30; // PD5 PD4(OC0)输出 mega16
_timer1_int:
01D5 B381 IN R24,0x11
01D6 6380 ORI R24,0x30
01D7 BB81 OUT 0x11,R24
(0010) //DDRB |= 0x60; // PB5 PB6(OC0)输出 mega128
(0011) TCCR1B = 0x00; //stop
01D8 2422 CLR R2
01D9 BC2E OUT 0x2E,R2
(0012) OCR1A = 40;
01DA E288 LDI R24,0x28
01DB E090 LDI R25,0
01DC BD9B OUT 0x2B,R25
01DD BD8A OUT 0x2A,R24
(0013) OCR1B = 294-40;
01DE EF8E LDI R24,0xFE
01DF BD99 OUT 0x29,R25
01E0 BD88 OUT 0x28,R24
(0014) ICR1 = 294;
01E1 E286 LDI R24,0x26
01E2 E091 LDI R25,1
01E3 BD97 OUT 0x27,R25
01E4 BD86 OUT 0x26,R24
(0015) TCCR1A = 0xb2;
01E5 EB82 LDI R24,0xB2
01E6 BD8F OUT 0x2F,R24
(0016) // 7 6 5 4 3 2 1 0
(0017) // COM1A1 COM1A0 COM1B1 COM1B0 NC NC WGM11 WGM10 :TCCR1A
(0018) // 1 0 1 1 0 0 1 0
(0019) TCCR1B = 0x19; //start Timer
01E7 E189 LDI R24,0x19
01E8 BD8E OUT 0x2E,R24
01E9 9508 RET
(0020) // 7 6 5 4 3 2 1 0
(0021) // ICNC1 ICES1 NC WGM13 WGM12 CS12 CS11 CS10 :TCCR1B
(0022) // 0 0 0 1 1 0 0 1
(0023)
(0024) }
(0025) //----------------------------------------------------------------------------//
(0026) //mega16
(0027) #pragma interrupt_handler timer1_compa_isr:7
(0028) //mega128
(0029) //#pragma interrupt_handler timer1_compa_isr:13
(0030) void timer1_compa_isr(void) {}
_timer1_compa_isr:
01EA 9518 RETI
FILE: D:\我的文档\桌面\harvest\main.c
(0001) #include <iom16v.h>
(0002) //#include <iom128v.h>
(0003) #include <adc.h>
(0004) #include <lcd.h>
(0005) #include <time0.h>
(0006) #include <time1.h>
(0007) #include <delay.h>
(0008) #include <macros.h>
(0009) #include <parameter.h>
(0010) //--------------------------------主函数--------------------------------------//
(0011) void main(void)
(0012) {
(0013) timer0_int();
_main:
01EB DFB3 RCALL _timer0_int
(0014) timer1_int();
01EC DFE8 RCALL _timer1_int
(0015) ADC_int();
01ED DFAC RCALL _ADC_int
(0016) LCD_init();//液晶初始化
01EE DE92 RCALL _LCD_init
(0017) TIMSK = 0x11; // 定时器/计数器1比较匹配A中断
01EF E181 LDI R24,0x11
01F0 BF89 OUT 0x39,R24
(0018) SEI(); // 使能全局中断
01F1 9478 BSET 7
(0019) scale=30; //调节50Hz占空比
01F2 E18E LDI R24,0x1E
01F3 9380007C STS scale,R24
01F5 C037 RJMP 0x022D
(0020) while(1)
(0021) {
(0022) //27KHz占空比设置
(0023) OCR1A++;
01F6 B58A IN R24,0x2A
01F7 B59B IN R25,0x2B
01F8 9601 ADIW R24,1
01F9 BD9B OUT 0x2B,R25
01FA BD8A OUT 0x2A,R24
(0024) if(OCR1A!=147)OCR1A++;
01FB B58A IN R24,0x2A
01FC B59B IN R25,0x2B
01FD 3983 CPI R24,0x93
01FE E0E0 LDI R30,0
01FF 079E CPC R25,R30
0200 F031 BEQ 0x0207
0201 B58A IN R24,0x2A
0202 B59B IN R25,0x2B
0203 9601 ADIW R24,1
0204 BD9B OUT 0x2B,R25
0205 BD8A OUT 0x2A,R24
0206 C004 RJMP 0x020B
(0025) else OCR1A=10;
0207 E08A LDI R24,0xA
0208 E090 LDI R25,0
0209 BD9B OUT 0x2B,R25
020A BD8A OUT 0x2A,R24
(0026) OCR1B=294-OCR1A;
020B B42A IN R2,0x2A
020C B43B IN R3,0x2B
020D E286 LDI R24,0x26
020E E091 LDI R25,1
020F 1982 SUB R24,R2
0210 0993 SBC R25,R3
0211 BD99 OUT 0x29,R25
0212 BD88 OUT 0x28,R24
(0027) //50Hz占空比设置
(0028) if(scale!=50)scale++;
0213 9180007C LDS R24,scale
0215 3382 CPI R24,0x32
0216 F021 BEQ 0x021B
0217 5F8F SUBI R24,0xFF
0218 9380007C STS scale,R24
021A C003 RJMP 0x021E
(0029) else scale=1;
021B E081 LDI R24,1
021C 9380007C STS scale,R24
(0030) //channel通道选择
(0031) if(channel!=7)channel++;
021E 91800079 LDS R24,channel
0220 3087 CPI R24,7
0221 F021 BEQ 0x0226
0222 5F8F SUBI R24,0xFF
0223 93800079 STS channel,R24
0225 C003 RJMP 0x0229
(0032) else channel=0;
0226 2422 CLR R2
0227 92200079 STS channel,R2
(0033) adcdisplay();
0229 DF42 RCALL _adcdisplay
(0034) delay_nms(10);
FILE: <library>
022A E00A LDI R16,0xA
022B E010 LDI R17,0
022C DE45 RCALL _delay_nms
022D CFC8 RJMP 0x01F6
022E 9508 RET
mod16u:
022F 9468 BSET 6
0230 C001 RJMP xdiv16u
div16u:
0231 94E8 BCLR 6
xdiv16u:
0232 92EA ST R14,-Y
0233 92FA ST R15,-Y
0234 938A ST R24,-Y
0235 24EE CLR R14
0236 24FF CLR R15
0237 E180 LDI R24,0x10
0238 0F00 LSL R16
0239 1F11 ROL R17
023A 1CEE ROL R14
023B 1CFF ROL R15
023C 16E2 CP R14,R18
023D 06F3 CPC R15,R19
023E F018 BCS 0x0242
023F 1AE2 SUB R14,R18
0240 0AF3 SBC R15,R19
0241 9503 INC R16
0242 958A DEC R24
0243 F7A1 BNE 0x0238
0244 F416 BRTC 0x0247
0245 2D0E MOV R16,R14
0246 2D1F MOV R17,R15
0247 9189 LD R24,Y+
0248 90F9 LD R15,Y+
0249 90E9 LD R14,Y+
024A 9508 RET
empy16s:
024B 920A ST R0,-Y
024C 921A ST R1,-Y
024D 938A ST R24,-Y
024E 939A ST R25,-Y
024F 9F02 MUL R16,R18
0250 01C0 MOVW R24,R0
0251 9F12 MUL R17,R18
0252 0D90 ADD R25,R0
0253 9F03 MUL R16,R19
0254 0D90 ADD R25,R0
0255 018C MOVW R16,R24
0256 9199 LD R25,Y+
0257 9189 LD R24,Y+
0258 9019 LD R1,Y+
0259 9009 LD R0,Y+
025A 9508 RET
pop_gset2:
025B E0E2 LDI R30,2
025C 940C026D JMP pop
pop_gset3:
025E E0E4 LDI R30,4
025F 940C026D JMP pop
push_gset5:
0261 92FA ST R15,-Y
0262 92EA ST R14,-Y
push_gset4:
0263 92DA ST R13,-Y
0264 92CA ST R12,-Y
push_gset3:
0265 92BA ST R11,-Y
0266 92AA ST R10,-Y
push_gset2:
0267 937A ST R23,-Y
0268 936A ST R22,-Y
push_gset1:
0269 935A ST R21,-Y
026A 934A ST R20,-Y
026B 9508 RET
pop_gset1:
026C E0E1 LDI R30,1
pop:
026D 9149 LD R20,Y+
026E 9159 LD R21,Y+
026F FDE0 SBRC R30,0
0270 9508 RET
0271 9169 LD R22,Y+
0272 9179 LD R23,Y+
0273 FDE1 SBRC R30,1
0274 9508 RET
0275 90A9 LD R10,Y+
0276 90B9 LD R11,Y+
0277 FDE2 SBRC R30,2
0278 9508 RET
0279 90C9 LD R12,Y+
027A 90D9 LD R13,Y+
027B FDE3 SBRC R30,3
027C 9508 RET
027D 90E9 LD R14,Y+
027E 90F9 LD R15,Y+
027F 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -