📄 8.lst
字号:
0510 C008 RJMP 0x0519
(0222) {case 'g':PORTD|=0x40;PORTD|=0x80;break;
0511 9A96 SBI 0x12,6
0512 9A97 SBI 0x12,7
0513 C005 RJMP 0x0519
(0223) case 'b':PORTD&=~0x40;PORTD|=0x80;break;
0514 9896 CBI 0x12,6
0515 9A97 SBI 0x12,7
0516 C002 RJMP 0x0519
(0224) case 's': PORTD&=~0x40;PORTD&=~0x80;break;
0517 9896 CBI 0x12,6
0518 9897 CBI 0x12,7
(0225) default:break;
(0226) }
(0227) }
0519 D236 RCALL pop_gset1
051A 9508 RET
_pushmotor1:
m --> R16
051B D231 RCALL push_gset1
(0228)
(0229)
(0230) void pushmotor1(unsigned char m)
(0231) {
(0232) switch(m)
051C 2F40 MOV R20,R16
051D 2755 CLR R21
051E 3647 CPI R20,0x67
051F E0E0 LDI R30,0
0520 075E CPC R21,R30
0521 F049 BEQ 0x052B
0522 3647 CPI R20,0x67
0523 E0E0 LDI R30,0
0524 075E CPC R21,R30
0525 F044 BLT 0x052E
0526 3743 CPI R20,0x73
0527 E0E0 LDI R30,0
0528 075E CPC R21,R30
0529 F019 BEQ 0x052D
052A C003 RJMP 0x052E
(0233) {case 'g':PORTC|=0x20;break;
052B 9AAD SBI 0x15,5
052C C001 RJMP 0x052E
(0234) case 's': PORTC&=~0x20;break;
052D 98AD CBI 0x15,5
(0235) default:break;
(0236) }
(0237) }
052E D221 RCALL pop_gset1
052F 9508 RET
FILE: E:\李斐机器人\xunxianjiadongzuo\8\TIMEDELAY8.C
(0001) /************************************************************************
(0002) TIMEDELAY.C实现了六个级别的软件延时,分别为:
(0003) void delay_us(); 微秒级延时程序
(0004) void delay_10us(unsigned int M); 10微秒级延时程序
(0005) void delay_100us(unsigned int M); 100微秒级延时程序
(0006) void delay_ms(unsigned int M); 毫秒级延时程序
(0007) void delay_10ms(unsigned int M); 10毫秒级延时程序
(0008) void delay_100ms(unsigned char M); 100毫秒级延时程序
(0009) void delay_s(unsigned char M); 秒级延时程序
(0010)
(0011) TIMEDELAY.C中使用AVRStudio仿真,void delay_us()函数中定时为1us;
(0012) 后续微秒级延时函数调用此函数实现定时。函数形参M用法如下:
(0013) 如延时50us,调用delay_10us(5).注释部分为误差分析,M取值100,1000,5000时,
(0014) AVRStudio仿真中实际运行时间为TIME,ERROR为计算所得误差。
(0015) ************************************************************************/
(0016)
(0017) #include <iom8v.h>
(0018) #include <macros.h>
(0019)
(0020)
(0021) /*********************************delay_us()************************************
(0022) ERROR=0
(0023) ********************************************************************************/
(0024) void delay_us()
(0025)
(0026) {
(0027) NOP();
_delay_us:
0530 0000 NOP
(0028) }
0531 9508 RET
_delay_10us:
i --> R22
i --> Y+1
M --> R20
0532 D231 RCALL push_gset2
0533 01A8 MOVW R20,R16
(0029)
(0030) /*********************************delay_10us(unsigned int M)******************
(0031) M=1,TIME=17.50,ERROR=75%; (注意!!!误差较大,请选用其他量级)
(0032) M=10,TIME=107.50,ERROR=7.5%; (注意!!!误差较大,请选用其他量级)
(0033) M=100,TIME=1007.50,ERROR=0.75%;
(0034) M=1000,TIME=10008.25,ERROR=0.0825%;
(0035) M=5000,TIME=50012.25,ERROR=0.0245%;
(0036) ******************************************************************************/
(0037) void delay_10us(unsigned int M)
(0038) {
0534 C00F RJMP 0x0544
(0039) unsigned int i;
(0040) while(M--)
(0041) {
(0042) unsigned int i=4;
0535 E064 LDI R22,4
0536 E070 LDI R23,0
0537 C002 RJMP 0x053A
(0043) while(i--)
(0044) {
(0045) delay_us();
0538 DFF7 RCALL _delay_us
(0046) NOP();
0539 0000 NOP
053A 011B MOVW R2,R22
053B 5061 SUBI R22,1
053C 4070 SBCI R23,0
053D 2022 TST R2
053E F7C9 BNE 0x0538
053F 2033 TST R3
0540 F7B9 BNE 0x0538
(0047) }
(0048) NOP();
0541 0000 NOP
(0049) NOP();
0542 0000 NOP
(0050) NOP();
0543 0000 NOP
0544 011A MOVW R2,R20
0545 5041 SUBI R20,1
0546 4050 SBCI R21,0
0547 2022 TST R2
0548 F761 BNE 0x0535
0549 2033 TST R3
054A F751 BNE 0x0535
(0051) }
(0052) }
054B D1FB RCALL pop_gset2
054C 9508 RET
_delay_100us:
i --> R22
i --> Y+1
M --> R20
054D D216 RCALL push_gset2
054E 01A8 MOVW R20,R16
(0053)
(0054) /*********************************delay_100us(unsigned int M)***********
(0055) M=1,TIME=107.50,ERROR=7.5%; (注意!!!误差较大,请选用其他量级)
(0056) M=10,TIME=1007.50,ERROR=0.75%;
(0057) M=100,TIME=10007.50,ERROR=0.075%;
(0058) M=1000,TIME=100008.25,ERROR=0.00825%;
(0059) M=5000,TIME=500012.25,ERROR=0.00245%;
(0060) ************************************************************************/
(0061)
(0062) void delay_100us(unsigned int M)
(0063) {
054F C00F RJMP 0x055F
(0064) unsigned int i;
(0065) while(M--)
(0066) {
(0067) unsigned int i=52;
0550 E364 LDI R22,0x34
0551 E070 LDI R23,0
0552 C002 RJMP 0x0555
(0068) while(i--)
(0069) {
(0070) delay_us();
0553 DFDC RCALL _delay_us
(0071) NOP();
0554 0000 NOP
0555 011B MOVW R2,R22
0556 5061 SUBI R22,1
0557 4070 SBCI R23,0
0558 2022 TST R2
0559 F7C9 BNE 0x0553
055A 2033 TST R3
055B F7B9 BNE 0x0553
(0072) }
(0073) NOP();
055C 0000 NOP
(0074) NOP();
055D 0000 NOP
(0075) NOP();
055E 0000 NOP
055F 011A MOVW R2,R20
0560 5041 SUBI R20,1
0561 4050 SBCI R21,0
0562 2022 TST R2
0563 F761 BNE 0x0550
0564 2033 TST R3
0565 F751 BNE 0x0550
(0076) }
(0077) }
0566 D1E0 RCALL pop_gset2
0567 9508 RET
_delay_ms:
i --> R22
i --> Y+1
M --> R20
0568 D1FB RCALL push_gset2
0569 01A8 MOVW R20,R16
(0078)
(0079) /*********************************delay_ms(unsigned int M)***************************
(0080) M=1,TIME=1007.50,ERROR=0.75%;
(0081) M=10,TIME=10007.50,ERROR=0.075%;
(0082) M=100,TIME=100007.50,ERROR=0.0075%;
(0083) M=1000,TIME=1000008.25,ERROR=0.000825%;
(0084) M=5000,TIME=5000012.25,ERROR=0.000245%;
(0085) ***********************************************************************/
(0086) void delay_ms(unsigned int M)
(0087) { unsigned int i;
056A C01A RJMP 0x0585
(0088) while(M--)
(0089) { unsigned int i=531;
056B E163 LDI R22,0x13
056C E072 LDI R23,2
056D C002 RJMP 0x0570
(0090) while(i--)
(0091) {
(0092) delay_us();
056E DFC1 RCALL _delay_us
(0093) NOP();
056F 0000 NOP
0570 011B MOVW R2,R22
0571 5061 SUBI R22,1
0572 4070 SBCI R23,0
0573 2022 TST R2
0574 F7C9 BNE 0x056E
0575 2033 TST R3
0576 F7B9 BNE 0x056E
(0094) }
(0095) NOP();
0577 0000 NOP
(0096) NOP();
0578 0000 NOP
(0097) NOP();
0579 0000 NOP
(0098) NOP();
057A 0000 NOP
(0099) NOP();
057B 0000 NOP
(0100) NOP();
057C 0000 NOP
(0101) NOP();
057D 0000 NOP
(0102) NOP();
057E 0000 NOP
(0103) NOP();
057F 0000 NOP
(0104) NOP();
0580 0000 NOP
(0105) NOP();
0581 0000 NOP
(0106) NOP();
0582 0000 NOP
(0107) NOP();
0583 0000 NOP
(0108) NOP();
0584 0000 NOP
0585 011A MOVW R2,R20
0586 5041 SUBI R20,1
0587 4050 SBCI R21,0
0588 2022 TST R2
0589 F709 BNE 0x056B
058A 2033 TST R3
058B F6F9 BNE 0x056B
(0109)
(0110) }
(0111) }
058C D1BA RCALL pop_gset2
058D 9508 RET
_delay_10ms:
M --> R20
058E D1BE RCALL push_gset1
058F 01A8 MOVW R20,R16
(0112)
(0113)
(0114)
(0115) /*********************************delay_10ms(unsigned int M)***************************/
(0116) void delay_10ms(unsigned int M)
(0117) {
0590 C005 RJMP 0x0596
(0118) while(M)
(0119) {
(0120) delay_ms(10);
0591 E00A LDI R16,0xA
0592 E010 LDI R17,0
0593 DFD4 RCALL _delay_ms
(0121) M--;
0594 5041 SUBI R20,1
0595 4050 SBCI R21,0
0596 3040 CPI R20,0
0597 0745 CPC R20,R21
0598 F7C1 BNE 0x0591
(0122) }
(0123) }
0599 D1B6 RCALL pop_gset1
059A 9508 RET
_delay_100ms:
M --> R20
059B D1B1 RCALL push_gset1
059C 01A8 MOVW R20,R16
(0124)
(0125)
(0126)
(0127) /*********************************delay_100ms(unsigned int M)***************************/
(0128) void delay_100ms(unsigned int M)
(0129) {
059D C005 RJMP 0x05A3
(0130) while(M)
(0131) {
(0132) delay_ms(100);
059E E604 LDI R16,0x64
059F E010 LDI R17,0
05A0 DFC7 RCALL _delay_ms
(0133) M--;
05A1 5041 SUBI R20,1
05A2 4050 SBCI R21,0
05A3 3040 CPI R20,0
05A4 0745 CPC R20,R21
05A5 F7C1 BNE 0x059E
(0134) }
(0135) }
05A6 D1A9 RCALL pop_gset1
05A7 9508 RET
_delay_s:
M --> R20
05A8 D1A4 RCALL push_gset1
05A9 01A8 MOVW R20,R16
(0136)
(0137)
(0138)
(0139) /*********************************delay_s(unsigned int M)***************************/
(0140) void delay_s(unsigned int M)
(0141) {
05AA C005 RJMP 0x05B0
(0142) while(M)
(0143) {
(0144) delay_ms(1000);
05AB EE08 LDI R16,0xE8
05AC E013 LDI R17,3
05AD DFBA RCALL _delay_ms
(0145) M--;
05AE 5041 SUBI R20,1
05AF 4050 SBCI R21,0
05B0 3040 CPI R20,0
05B1 0745 CPC R20,R21
05B2 F7C1 BNE 0x05AB
(0146) }
(0147) }
05B3 D19C RCALL pop_gset1
05B4 9508 RET
FILE: E:\李斐机器人\xunxianjiadongzuo\8\xunxiandongzuo8.c
(0001) //ICC-AVR application builder : 2005-12-22 22:30:20
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) #include <iom8v.h>
(0005) #include <macros.h>
(0006)
(0007) #include "Main8.h"
(0008)
(0009)
(0010) #include "L_PID.c"
(0011) #include "Slave_SPI.c"
(0012) #include "TIMEDELAY8.C"
(0013)
(0014)
(0015) void port_init(void)
(0016) {
(0017) PORTB = 0x00;
_port_init:
05B5 2422 CLR R2
05B6 BA28 OUT 0x18,R2
(0018) DDRB = 0x00;
05B7 BA27 OUT 0x17,R2
(0019) PORTC = 0x00; //m103 output only
05B8 BA25 OUT 0x15,R2
(0020) DDRC = 0x00;
05B9 BA24 OUT 0x14,R2
(0021) PORTD = 0x00;
05BA BA22 OUT 0x12,R2
(0022) DDRD = 0x00;
05BB BA21 OUT 0x11,R2
(0023)
(0024) PORTB |= 0x02; //OC1A output ,high level
05BC 9AC1 SBI 0x18,1
(0025) DDRB |= 0x02;
05BD 9AB9 SBI 0x17,1
(0026)
(0027) PORTC &= ~0x02;
05BE 98A9 CBI 0x15,1
(0028) DDRC |= 0x02;
05BF 9AA1 SBI 0x14,1
(0029)
(0030) PORTC |= 0x08; //PC3 输出,控制电机方向,1->正转,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -