📄 bjdj_4.lst
字号:
KeyValue --> Y+2
FnKeyValue --> Y+1
RepeatCnt --> Y+0
0306 9723 SBIW R28,3
(0246)
(0247) /*
(0248) 函数:Test_Key()
(0249) 功能:测试按键功能
(0250) */
(0251) void Test_Key()
(0252) {
(0253) uchar KeyValue;
(0254) uchar RepeatCnt;
(0255) uchar FnKeyValue;
(0256) ClearAll();
0307 DECA RCALL _ClearAll
(0257) for (;;)
(0258) {
(0259) if ( FlagINT ) //如果有键按下
0308 90200110 LDS R2,0x110
030A 90300111 LDS R3,0x111
030C 2022 TST R2
030D F411 BNE 0x0310
030E 2033 TST R3
030F F3C1 BEQ 0x0308
(0260) {
(0261) //清除中断标志
(0262) FlagINT = 0;
0310 2422 CLR R2
0311 2433 CLR R3
0312 92300111 STS R3,0x111
0314 92200110 STS R2,0x110
(0263) //读取键值、连击计数器值、功能键值
(0264) ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
0316 019E MOVW R18,R28
0317 5F2E SUBI R18,0xFE
0318 4F3F SBCI R19,0xFF
0319 E001 LDI R16,1
031A DE40 RCALL _ZLG7290_ReadReg
(0265) ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
031B 019E MOVW R18,R28
031C E002 LDI R16,2
031D DE3D RCALL _ZLG7290_ReadReg
(0266) ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
031E 019E MOVW R18,R28
031F 5F2F SUBI R18,0xFF
0320 4F3F SBCI R19,0xFF
0321 E003 LDI R16,3
0322 DE38 RCALL _ZLG7290_ReadReg
(0267) //显示键值、连击计数器值、功能键值
(0268) //DispValue(0,KeyValue);
(0269) DispHexValue(3,RepeatCnt);
0323 8128 LDD R18,0+Y
0324 E003 LDI R16,3
0325 DFC1 RCALL _DispHexValue
(0270) DispHexValue(6,FnKeyValue);
0326 8129 LDD R18,1+Y
0327 E006 LDI R16,6
0328 DFBE RCALL _DispHexValue
0329 CFDE RJMP 0x0308
032A 9623 ADIW R28,3
032B 9508 RET
_delayus:
i --> R20
us --> R22
032C 940E03F6 CALL push_gset2
032E 01B8 MOVW R22,R16
FILE: E:\重新整理的文件\控制类\步进电机\程序\avr\bjdj_4.c
(0001) //电机转一圈走27MM
(0002) #include <iom128v.h>
(0003) #include <iom128.h>
(0004) #include <macros.h>
(0005) #include "BIT.h"
(0006) #include "zlg7290_avr.c"
(0007)
(0008) #define uint unsigned int
(0009) #define uchar unsigned char
(0010) /*********电机1控制端口************/
(0011) #define cw1 _PA1
(0012) #define hf1 _PA3
(0013) #define en1 _PA5
(0014) #define rst1 _PA7
(0015) #define clk1 _PC6
(0016)
(0017) /*********电机2控制端口************/
(0018) #define cw2 _PA0
(0019) #define hf2 _PA2
(0020) #define en2 _PA4
(0021) #define rst2 _PA6
(0022) #define clk2 _PG2
(0023)
(0024) //uint bjl,rev,key,set=0;
(0025) /*******************************************
(0026) 函数名称: delayus
(0027) 功 能: 延时指定微秒(16M晶振)
(0028) 参 数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
(0029) 返回值 : 无
(0030) /********************************************/
(0031) void delayus(uint us)
(0032) {
(0033) uint i;
(0034) us=us*5/2; //9/8是在16MHz晶振下,通过反复实验得到的数值
032F E005 LDI R16,5
0330 E010 LDI R17,0
0331 019B MOVW R18,R22
0332 940E03CF CALL empy16s
0334 01B8 MOVW R22,R16
0335 9576 LSR R23
0336 9567 ROR R22
(0035) for( i=0;i<us;i++);
0337 2744 CLR R20
0338 2755 CLR R21
0339 C002 RJMP 0x033C
033A 5F4F SUBI R20,0xFF
033B 4F5F SBCI R21,0xFF
033C 1746 CP R20,R22
033D 0757 CPC R21,R23
033E F3D8 BCS 0x033A
(0036) }
033F 940E0406 CALL pop_gset2
0341 9508 RET
_delayms:
x --> R20
y --> R22
z --> R16
0342 940E03F6 CALL push_gset2
(0037)
(0038) /*******************************************
(0039) 函数名称: delayms()
(0040) 功 能: 16MHz晶振下延时 z ms
(0041) 参 数: z
(0042) 返回值 : 无
(0043) /********************************************/
(0044) void delayms(uint z)
(0045) {
(0046) uint x,y;
(0047) for(x=z;x>0;x--)
0344 01A8 MOVW R20,R16
0345 C00A RJMP 0x0350
(0048) for(y=2660;y>0;y--);
0346 E664 LDI R22,0x64
0347 E07A LDI R23,0xA
0348 C002 RJMP 0x034B
0349 5061 SUBI R22,1
034A 4070 SBCI R23,0
034B 3060 CPI R22,0
034C 0767 CPC R22,R23
034D F7D9 BNE 0x0349
034E 5041 SUBI R20,1
034F 4050 SBCI R21,0
0350 3040 CPI R20,0
0351 0745 CPC R20,R21
0352 F799 BNE 0x0346
(0049) }
0353 940E0406 CALL pop_gset2
0355 9508 RET
(0050)
(0051) void bjdj_init1()
(0052) {
(0053) DDRA|=BIT(1)|BIT(3)|BIT(5)|BIT(7);
_bjdj_init1:
0356 B38A IN R24,P1A
0357 6A8A ORI R24,0xAA
0358 BB8A OUT P1A,R24
(0054) DDRC|=BIT(6);
0359 9AA6 SBI P14,6
(0055) cw1=1; // 0:正传 1:反转
035A B38B IN R24,P1B
035B 6082 ORI R24,2
035C BB8B OUT P1B,R24
(0056) en1=0; //
035D B38B IN R24,P1B
035E 7D8F ANDI R24,0xDF
035F BB8B OUT P1B,R24
(0057) rst1=0;//
0360 B38B IN R24,P1B
0361 778F ANDI R24,0x7F
0362 BB8B OUT P1B,R24
(0058) hf1=0;// 0:半步 1:整步
0363 B38B IN R24,P1B
0364 7F87 ANDI R24,0xF7
0365 BB8B OUT P1B,R24
(0059) }
0366 9508 RET
(0060)
(0061) void bjdj_init2()
(0062) {
(0063) DDRA|=BIT(0)|BIT(2)|BIT(4)|BIT(6);
_bjdj_init2:
0367 B38A IN R24,P1A
0368 6585 ORI R24,0x55
0369 BB8A OUT P1A,R24
(0064) DDRG|=BIT(2);
036A 91800064 LDS R24,0x64
036C 6084 ORI R24,4
036D 93800064 STS R24,0x64
(0065) cw2=1;//0:正传 1:反转
036F B38B IN R24,P1B
0370 6081 ORI R24,1
0371 BB8B OUT P1B,R24
(0066) en2=0;//
0372 B38B IN R24,P1B
0373 7E8F ANDI R24,0xEF
0374 BB8B OUT P1B,R24
(0067) rst2=0;//
0375 B38B IN R24,P1B
0376 7B8F ANDI R24,0xBF
0377 BB8B OUT P1B,R24
(0068) hf2=0;//0:半步 1:整步
0378 B38B IN R24,P1B
0379 7F8B ANDI R24,0xFB
037A BB8B OUT P1B,R24
(0069) }
037B 9508 RET
(0070)
(0071)
(0072) void main()
(0073) {
(0074) uint i,dat;
(0075) bjdj_init1();
_main:
dat --> Y+1
i --> Y+1
037C DFD9 RCALL _bjdj_init1
(0076) bjdj_init2();
037D DFE9 RCALL _bjdj_init2
(0077) clk1=1;
037E B385 IN R24,P15
037F 6480 ORI R24,0x40
0380 BB85 OUT P15,R24
(0078) clk2=1;
0381 91800065 LDS R24,0x65
0383 6084 ORI R24,4
0384 93800065 STS R24,0x65
0386 C016 RJMP 0x039D
(0079) while(1)
(0080) {
(0081)
(0082) clk1=1;
0387 B385 IN R24,P15
0388 6480 ORI R24,0x40
0389 BB85 OUT P15,R24
(0083) clk2=1;
038A 91800065 LDS R24,0x65
038C 6084 ORI R24,4
038D 93800065 STS R24,0x65
(0084) delayms(2);
038F E002 LDI R16,2
0390 E010 LDI R17,0
0391 DFB0 RCALL _delayms
(0085) clk1=0;
0392 B385 IN R24,P15
0393 7B8F ANDI R24,0xBF
0394 BB85 OUT P15,R24
(0086) clk2=0;
0395 91800065 LDS R24,0x65
0397 7F8B ANDI R24,0xFB
0398 93800065 STS R24,0x65
(0087) delayms(2);
039A E002 LDI R16,2
039B E010 LDI R17,0
039C DFA5 RCALL _delayms
039D CFE9 RJMP 0x0387
(0088) }
(0089) }FILE: <library>
039E 9508 RET
mod8u:
039F 9468 BSET 6
03A0 C001 RJMP xdiv8u
div8u:
03A1 94E8 BCLR 6
xdiv8u:
03A2 932A ST R18,-Y
03A3 92FA ST R15,-Y
03A4 24FF CLR R15
03A5 E028 LDI R18,0x8
03A6 0F00 LSL R16
03A7 1CFF ROL R15
03A8 16F1 CP R15,R17
03A9 F010 BCS 0x03AC
03AA 1AF1 SUB R15,R17
03AB 9503 INC R16
03AC 952A DEC R18
03AD F7C1 BNE 0x03A6
03AE F40E BRTC 0x03B0
03AF 2D0F MOV R16,R15
03B0 90F9 LD R15,Y+
03B1 9129 LD R18,Y+
03B2 9508 RET
mod16u:
03B3 9468 BSET 6
03B4 C001 RJMP xdiv16u
div16u:
03B5 94E8 BCLR 6
xdiv16u:
03B6 92EA ST R14,-Y
03B7 92FA ST R15,-Y
03B8 938A ST R24,-Y
03B9 24EE CLR R14
03BA 24FF CLR R15
03BB E180 LDI R24,0x10
03BC 0F00 LSL R16
03BD 1F11 ROL R17
03BE 1CEE ROL R14
03BF 1CFF ROL R15
03C0 16E2 CP R14,R18
03C1 06F3 CPC R15,R19
03C2 F018 BCS 0x03C6
03C3 1AE2 SUB R14,R18
03C4 0AF3 SBC R15,R19
03C5 9503 INC R16
03C6 958A DEC R24
03C7 F7A1 BNE 0x03BC
03C8 F416 BRTC 0x03CB
03C9 2D0E MOV R16,R14
03CA 2D1F MOV R17,R15
03CB 9189 LD R24,Y+
03CC 90F9 LD R15,Y+
03CD 90E9 LD R14,Y+
03CE 9508 RET
empy16s:
03CF 920A ST R0,-Y
03D0 921A ST R1,-Y
03D1 938A ST R24,-Y
03D2 939A ST R25,-Y
03D3 9F02 MUL R16,R18
03D4 01C0 MOVW R24,R0
03D5 9F12 MUL R17,R18
03D6 0D90 ADD R25,R0
03D7 9F03 MUL R16,R19
03D8 0D90 ADD R25,R0
03D9 018C MOVW R16,R24
03DA 9199 LD R25,Y+
03DB 9189 LD R24,Y+
03DC 9019 LD R1,Y+
03DD 9009 LD R0,Y+
03DE 9508 RET
push_gset1:
03DF 935A ST R21,-Y
03E0 934A ST R20,-Y
03E1 9508 RET
pop_gset1:
03E2 E0E1 LDI R30,1
pop:
03E3 9149 LD R20,Y+
03E4 9159 LD R21,Y+
03E5 FDE0 SBRC R30,0
03E6 9508 RET
03E7 9169 LD R22,Y+
03E8 9179 LD R23,Y+
03E9 FDE1 SBRC R30,1
03EA 9508 RET
03EB 90A9 LD R10,Y+
03EC 90B9 LD R11,Y+
03ED FDE2 SBRC R30,2
03EE 9508 RET
03EF 90C9 LD R12,Y+
03F0 90D9 LD R13,Y+
03F1 FDE3 SBRC R30,3
03F2 9508 RET
03F3 90E9 LD R14,Y+
03F4 90F9 LD R15,Y+
03F5 9508 RET
push_gset2:
03F6 937A ST R23,-Y
03F7 936A ST R22,-Y
03F8 940C03DF JMP push_gset1
push_gset3:
03FA 92BA ST R11,-Y
03FB 92AA ST R10,-Y
03FC 940C03F6 JMP push_gset2
push_gset4:
03FE 92DA ST R13,-Y
03FF 92CA ST R12,-Y
0400 940C03FA JMP push_gset3
push_gset5:
0402 92FA ST R15,-Y
0403 92EA ST R14,-Y
0404 940C03FE JMP push_gset4
pop_gset2:
0406 E0E2 LDI R30,2
0407 940C03E3 JMP pop
pop_gset3:
0409 E0E4 LDI R30,4
040A 940C03E3 JMP pop
pop_gset4:
040C E0E8 LDI R30,0x8
040D 940C03E3 JMP pop
pop_gset5:
040F 27EE CLR R30
0410 940C03E3 JMP pop
asgncblk:
0412 93AA ST R26,-Y
0413 93BA ST R27,-Y
0414 93EA ST R30,-Y
0415 93FA ST R31,-Y
0416 920A ST R0,-Y
0417 81AF LDD R26,7+Y
0418 85B8 LDD R27,8+Y
0419 81ED LDD R30,5+Y
041A 81FE LDD R31,6+Y
041B 3000 CPI R16,0
041C 0701 CPC R16,R17
041D F031 BEQ 0x0424
041E 95C8 LPM
041F 920D ST R0,X+
0420 9631 ADIW R30,1
0421 5001 SUBI R16,1
0422 4010 SBCI R17,0
0423 CFF7 RJMP 0x041B
0424 9009 LD R0,Y+
0425 91F9 LD R31,Y+
0426 91E9 LD R30,Y+
0427 91B9 LD R27,Y+
0428 91A9 LD R26,Y+
0429 9624 ADIW R28,4
042A 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -