📄 fjv14.lst
字号:
0206 075E CPC R21,R30
0207 F161 BEQ 0x0234
0208 3045 CPI R20,5
0209 E0E0 LDI R30,0
020A 075E CPC R21,R30
020B F409 BNE 0x020D
020C C035 RJMP 0x0242
020D 3046 CPI R20,6
020E E0E0 LDI R30,0
020F 075E CPC R21,R30
0210 F409 BNE 0x0212
0211 C03E RJMP 0x0250
0212 3047 CPI R20,7
0213 E0E0 LDI R30,0
0214 075E CPC R21,R30
0215 F409 BNE 0x0217
0216 C047 RJMP 0x025E
0217 C053 RJMP 0x026B
(0371) {
(0372) case IO_PB0: //启动PB0通道
(0373) if (IO_data==0x00)
0218 2300 TST R16
0219 F429 BNE 0x021F
(0374) {
(0375) DDRB |= (1<<DDB0);
021A 9AB8 SBI 0x17,0
(0376) PORTB &= 0b11111110;//PB0置0,其他位不变
021B B388 IN R24,0x18
021C 7F8E ANDI R24,0xFE
021D BB88 OUT 0x18,R24
(0377) }
021E C04C RJMP 0x026B
(0378) else if (IO_data==0x01)
021F 3001 CPI R16,1
0220 F419 BNE 0x0224
(0379) {
(0380) DDRB |= (1<<DDB0);
0221 9AB8 SBI 0x17,0
(0381) PORTB |= (1<<PB0);//PB0置1,其他位不变
0222 9AC0 SBI 0x18,0
(0382) }
0223 C047 RJMP 0x026B
(0383) else
(0384) {
(0385) asm("NOP");
0224 0000 NOP
(0386) }
(0387) break;
0225 C045 RJMP 0x026B
(0388) case IO_PB1:
(0389) if (IO_data==0x00)
0226 2300 TST R16
0227 F429 BNE 0x022D
(0390) {
(0391) DDRB |= (1<<DDB1);
0228 9AB9 SBI 0x17,1
(0392) PORTB &= 0b11111101;//输出0
0229 B388 IN R24,0x18
022A 7F8D ANDI R24,0xFD
022B BB88 OUT 0x18,R24
(0393) }
022C C03E RJMP 0x026B
(0394) else if (IO_data==0x01)
022D 3001 CPI R16,1
022E F419 BNE 0x0232
(0395) {
(0396) DDRB |= (1<<DDB1);
022F 9AB9 SBI 0x17,1
(0397) PORTB |= (1<<PB1);//输出1
0230 9AC1 SBI 0x18,1
(0398) }
0231 C039 RJMP 0x026B
(0399) else
(0400) {
(0401) asm("NOP");
0232 0000 NOP
(0402) }
(0403) break;
0233 C037 RJMP 0x026B
(0404) case IO_PB4:
(0405) if (IO_data==0x00)
0234 2300 TST R16
0235 F429 BNE 0x023B
(0406) {
(0407) DDRB |= (1<<DDB4);
0236 9ABC SBI 0x17,4
(0408) PORTB &= 0b11101111;;//输出0
0237 B388 IN R24,0x18
0238 7E8F ANDI R24,0xEF
0239 BB88 OUT 0x18,R24
(0409) }
023A C030 RJMP 0x026B
(0410) else if (IO_data==0x01)
023B 3001 CPI R16,1
023C F419 BNE 0x0240
(0411) {
(0412) DDRB |= (1<<DDB4);
023D 9ABC SBI 0x17,4
(0413) PORTB |= (1<<PB4);//输出1
023E 9AC4 SBI 0x18,4
(0414) }
023F C02B RJMP 0x026B
(0415) else
(0416) {
(0417) asm("NOP");
0240 0000 NOP
(0418) }
(0419) break;
0241 C029 RJMP 0x026B
(0420) case IO_PD5:
(0421) if (IO_data==0x00)
0242 2300 TST R16
0243 F429 BNE 0x0249
(0422) {
(0423) DDRD |= (1<<DDD5);
0244 9A8D SBI 0x11,5
(0424) PORTD &= 0b11011111;//输出0
0245 B382 IN R24,0x12
0246 7D8F ANDI R24,0xDF
0247 BB82 OUT 0x12,R24
(0425) }
0248 C022 RJMP 0x026B
(0426) else if (IO_data==0x01)
0249 3001 CPI R16,1
024A F419 BNE 0x024E
(0427) {
(0428) DDRD |= (1<<DDD5);
024B 9A8D SBI 0x11,5
(0429) PORTD |= (1<<PD5);//输出1
024C 9A95 SBI 0x12,5
(0430) }
024D C01D RJMP 0x026B
(0431) else
(0432) {
(0433) asm("NOP");
024E 0000 NOP
(0434) }
(0435) break;
024F C01B RJMP 0x026B
(0436) case IO_PD6:
(0437) if (IO_data==0x00)
0250 2300 TST R16
0251 F429 BNE 0x0257
(0438) {
(0439) DDRD |= (1<<DDD6);
0252 9A8E SBI 0x11,6
(0440) PORTD &= 0b10111111;//输出0
0253 B382 IN R24,0x12
0254 7B8F ANDI R24,0xBF
0255 BB82 OUT 0x12,R24
(0441) }
0256 C014 RJMP 0x026B
(0442) else if (IO_data==0x01)
0257 3001 CPI R16,1
0258 F419 BNE 0x025C
(0443) {
(0444) DDRD |= (1<<DDD6);
0259 9A8E SBI 0x11,6
(0445) PORTD |= (1<<PD6);//输出1
025A 9A96 SBI 0x12,6
(0446) }
025B C00F RJMP 0x026B
(0447) else
(0448) {
(0449) asm("NOP");
025C 0000 NOP
(0450) }
(0451) break;
025D C00D RJMP 0x026B
(0452)
(0453) case IO_PD7: //如果为00则启动CH1通道
(0454) if (IO_data==0x00)
025E 2300 TST R16
025F F429 BNE 0x0265
(0455) {
(0456) DDRD |= (1<<DDD7);
0260 9A8F SBI 0x11,7
(0457) PORTD &= 0b01111111;//输出0
0261 B382 IN R24,0x12
0262 778F ANDI R24,0x7F
0263 BB82 OUT 0x12,R24
(0458) }
0264 C006 RJMP 0x026B
(0459) else if (IO_data==0x01)
0265 3001 CPI R16,1
0266 F419 BNE 0x026A
(0460) {
(0461) DDRD |= (1<<DDD7);
0267 9A8F SBI 0x11,7
(0462) PORTD |= (1<<PD7);//输出1
0268 9A97 SBI 0x12,7
(0463) }
0269 C001 RJMP 0x026B
(0464) else
(0465) {
(0466) asm("NOP");
026A 0000 NOP
(0467) }
(0468) break;
(0469)
(0470) default:break;
026B D080 RCALL pop_gset1
026C 9508 RET
_IO_in:
temp --> R20
IO_channel --> R16
026D D079 RCALL push_gset2
(0471) }
(0472)
(0473)
(0474) }
(0475) /*****************************************************************/
(0476) unsigned char IO_in(unsigned char IO_channel)
(0477) {
(0478) unsigned char temp;
(0479) temp=0;
026E 2744 CLR R20
(0480) switch (IO_channel)
026F 2F60 MOV R22,R16
0270 2777 CLR R23
0271 3060 CPI R22,0
0272 0767 CPC R22,R23
0273 F0B1 BEQ 0x028A
0274 3061 CPI R22,1
0275 E0E0 LDI R30,0
0276 077E CPC R23,R30
0277 F0D1 BEQ 0x0292
0278 3064 CPI R22,4
0279 E0E0 LDI R30,0
027A 077E CPC R23,R30
027B F0F9 BEQ 0x029B
027C 3065 CPI R22,5
027D E0E0 LDI R30,0
027E 077E CPC R23,R30
027F F139 BEQ 0x02A7
0280 3066 CPI R22,6
0281 E0E0 LDI R30,0
0282 077E CPC R23,R30
0283 F181 BEQ 0x02B4
0284 3067 CPI R22,7
0285 E0E0 LDI R30,0
0286 077E CPC R23,R30
0287 F409 BNE 0x0289
0288 C039 RJMP 0x02C2
0289 C046 RJMP 0x02D0
(0481) {
(0482) case IO_PB0: //启动PB0通道
(0483) {
(0484) DDRB &= 0b11111110;
028A B387 IN R24,0x17
028B 7F8E ANDI R24,0xFE
028C BB87 OUT 0x17,R24
(0485) PORTB |= (1<<PB0);//输入、带上拉
028D 9AC0 SBI 0x18,0
(0486) asm("NOP");//留出读写转换的时间。
028E 0000 NOP
(0487) temp = PINB;//读取PB0通道的值。
028F B346 IN R20,0x16
(0488) temp = temp & 0x01;
0290 7041 ANDI R20,1
(0489) }
(0490) break;
0291 C03E RJMP 0x02D0
(0491) case IO_PB1:
(0492) {
(0493) DDRB &= 0b11111101;
0292 B387 IN R24,0x17
0293 7F8D ANDI R24,0xFD
0294 BB87 OUT 0x17,R24
(0494) PORTB |= (1<<PB1);//输入、带上拉
0295 9AC1 SBI 0x18,1
(0495) asm("NOP");
0296 0000 NOP
(0496) temp = PINB;
0297 B346 IN R20,0x16
(0497) temp=(temp>>1)& 0x01;//提取位值。
0298 9546 LSR R20
0299 7041 ANDI R20,1
(0498)
(0499) }
(0500) break;
029A C035 RJMP 0x02D0
(0501) case IO_PB4:
(0502) {
(0503) DDRB &= 0b11101111;
029B B387 IN R24,0x17
029C 7E8F ANDI R24,0xEF
029D BB87 OUT 0x17,R24
(0504) PORTB |= (1<<PB4);//输入、带上拉
029E 9AC4 SBI 0x18,4
(0505) asm("NOP");
029F 0000 NOP
(0506) temp = PINB;
02A0 B346 IN R20,0x16
(0507) temp=(temp>>4)& 0x01;
02A1 2F84 MOV R24,R20
02A2 9582 SWAP R24
02A3 708F ANDI R24,0xF
02A4 7081 ANDI R24,1
02A5 2F48 MOV R20,R24
(0508) }
(0509) break;
02A6 C029 RJMP 0x02D0
(0510) case IO_PD5:
(0511) {
(0512) DDRD &= 0b11011111;
02A7 B381 IN R24,0x11
02A8 7D8F ANDI R24,0xDF
02A9 BB81 OUT 0x11,R24
(0513) PORTD |= (1<<PD5);//输入、带上拉
02AA 9A95 SBI 0x12,5
(0514) asm("NOP");
02AB 0000 NOP
(0515) temp = PIND;
02AC B340 IN R20,0x10
(0516) temp=(temp>>5)& 0x01;
02AD 9546 LSR R20
02AE 9546 LSR R20
02AF 9546 LSR R20
02B0 9546 LSR R20
02B1 9546 LSR R20
02B2 7041 ANDI R20,1
(0517) }
(0518) break;
02B3 C01C RJMP 0x02D0
(0519) case IO_PD6:
(0520) {
(0521) DDRD &= 0b10111111;
02B4 B381 IN R24,0x11
02B5 7B8F ANDI R24,0xBF
02B6 BB81 OUT 0x11,R24
(0522) PORTD |= (1<<PD6);//输入、带上拉
02B7 9A96 SBI 0x12,6
(0523) asm("NOP");
02B8 0000 NOP
(0524) temp = PIND;
02B9 B340 IN R20,0x10
(0525) temp=(temp>>6)& 0x01;
02BA 9546 LSR R20
02BB 9546 LSR R20
02BC 9546 LSR R20
02BD 9546 LSR R20
02BE 9546 LSR R20
02BF 9546 LSR R20
02C0 7041 ANDI R20,1
(0526) }
(0527) break;
02C1 C00E RJMP 0x02D0
(0528) case IO_PD7:
(0529) {
(0530) DDRD &= 0b01111111;
02C2 B381 IN R24,0x11
02C3 778F ANDI R24,0x7F
02C4 BB81 OUT 0x11,R24
(0531) PORTD |= (1<<PD7);//输入、带上拉
02C5 9A97 SBI 0x12,7
(0532) asm("NOP");
02C6 0000 NOP
(0533) temp = PIND;
02C7 B340 IN R20,0x10
(0534) temp=(temp>>7)& 0x01;
02C8 9546 LSR R20
02C9 9546 LSR R20
02CA 9546 LSR R20
02CB 9546 LSR R20
02CC 9546 LSR R20
02CD 9546 LSR R20
02CE 9546 LSR R20
02CF 7041 ANDI R20,1
(0535) }
(0536) break;
(0537) default:break;
(0538) }
(0539) return temp;
02D0 2F04 MOV R16,R20
02D1 D00B RCALL pop_gset2
02D2 9508 RET
(0540) }
(0541) /*******************************************************************/
(0542) //1ms延时函数
(0543) void delay_1ms(void)
(0544) {
(0545) unsigned int i;
(0546) for (i=0;i<150;i++)
FILE: <library>
_delay_1ms:
i --> R16
02D3 2700 CLR R16
02D4 2711 CLR R17
02D5 C002 RJMP 0x02D8
02D6 5F0F SUBI R16,0xFF
02D7 4F1F SBCI R17,0xFF
02D8 3906 CPI R16,0x96
02D9 E0E0 LDI R30,0
02DA 071E CPC R17,R30
02DB F3D0 BCS 0x02D6
02DC 9508 RET
pop_gset2:
02DD E0E2 LDI R30,2
02DE C00E RJMP pop
pop_gset4:
02DF E0E8 LDI R30,0x8
02E0 C00C RJMP pop
push_gset5:
02E1 92FA ST R15,-Y
02E2 92EA ST R14,-Y
push_gset4:
02E3 92DA ST R13,-Y
02E4 92CA ST R12,-Y
push_gset3:
02E5 92BA ST R11,-Y
02E6 92AA ST R10,-Y
push_gset2:
02E7 937A ST R23,-Y
02E8 936A ST R22,-Y
push_gset1:
02E9 935A ST R21,-Y
02EA 934A ST R20,-Y
02EB 9508 RET
pop_gset1:
02EC E0E1 LDI R30,1
pop:
02ED 9149 LD R20,Y+
02EE 9159 LD R21,Y+
02EF FDE0 SBRC R30,0
02F0 9508 RET
02F1 9169 LD R22,Y+
02F2 9179 LD R23,Y+
02F3 FDE1 SBRC R30,1
02F4 9508 RET
02F5 90A9 LD R10,Y+
02F6 90B9 LD R11,Y+
02F7 FDE2 SBRC R30,2
02F8 9508 RET
02F9 90C9 LD R12,Y+
02FA 90D9 LD R13,Y+
02FB FDE3 SBRC R30,3
02FC 9508 RET
02FD 90E9 LD R14,Y+
02FE 90F9 LD R15,Y+
02FF 9508 RET
_getchar:
0300 9B5F SBIS 0x0B,7
0301 CFFE RJMP _getchar
0302 B10C IN R16,0x0C
0303 2711 CLR R17
0304 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -