?? mega128.lst
字號:
__start:
__text_start:
0047 EFCF LDI R28,0xFF
0048 E1D0 LDI R29,0x10
0049 BFCD OUT 0x3D,R28
004A BFDE OUT 0x3E,R29
004B 51C0 SUBI R28,0x10
004C 40D0 SBCI R29,0
004D EA0A LDI R16,0xAA
004E 8308 STD Y+0,R16
004F 2400 CLR R0
0050 E0E1 LDI R30,1
0051 E0F1 LDI R31,1
0052 E011 LDI R17,1
0053 31E5 CPI R30,0x15
0054 07F1 CPC R31,R17
0055 F011 BEQ 0x0058
0056 9201 ST R0,Z+
0057 CFFB RJMP 0x0053
0058 8300 STD Z+0,R16
0059 E8EC LDI R30,0x8C
005A E0F0 LDI R31,0
005B E0A0 LDI R26,0
005C E0B1 LDI R27,1
005D E010 LDI R17,0
005E 38ED CPI R30,0x8D
005F 07F1 CPC R31,R17
0060 F021 BEQ 0x0065
0061 95C8 LPM
0062 9631 ADIW R30,1
0063 920D ST R0,X+
0064 CFF9 RJMP 0x005E
0065 940E00D6 CALL _main
_exit:
0067 CFFF RJMP _exit
_Delay:
n --> R20
m --> R22
time --> R16
0068 940E010E CALL push_gset2
FILE: E:\project\大壩\code\AVR\main.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) #define fosc 8000000 //晶振8MHZ
(0004) #define baud 9600 //與指紋頭通訊的波特率
(0005) #define FrameCount 10
(0006) #define uint unsigned int
(0007) #define uchar unsigned char
(0008)
(0009) #define Set485Rec PORTG |= (1<<2)
(0010) #define Set485Send PORTG &= ~(1<<2)
(0011)
(0012) uchar RecComm[10];
(0013) uchar SendComm[10];
(0014) uchar RecCount=0;
(0015)
(0016) void Delay(uint time)
(0017) {
(0018) uint m,n;
(0019) for(n=0;n<time;n++)
006A 2744 CLR R20
006B 2755 CLR R21
006C C00B RJMP 0x0078
(0020) {
(0021) for(m=0;m<256;m++);
006D 2766 CLR R22
006E 2777 CLR R23
006F C002 RJMP 0x0072
0070 5F6F SUBI R22,0xFF
0071 4F7F SBCI R23,0xFF
0072 3060 CPI R22,0
0073 E0E1 LDI R30,1
0074 077E CPC R23,R30
0075 F3D0 BCS 0x0070
0076 5F4F SUBI R20,0xFF
0077 4F5F SBCI R21,0xFF
0078 1740 CP R20,R16
0079 0751 CPC R21,R17
007A F390 BCS 0x006D
(0022) }
(0023) }
007B 940E00F1 CALL pop_gset2
007D 9508 RET
(0024)
(0025) void Com0Init(void) //串口通訊初始化程序
(0026) {
(0027) UCSR0B = 0x00; //設置波特率時關閉發送和接收
_Com0Init:
007E 2422 CLR R2
007F B82A OUT 0x0A,R2
(0028) UCSR0A = 0x00;
0080 B82B OUT 0x0B,R2
(0029) UBRR0L=(fosc/16/(baud+1))%256;
0081 E384 LDI R24,0x34
0082 B989 OUT 0x09,R24
(0030) UBRR0H=(fosc/16/(baud+1))/256;
0083 92200090 STS __idata_end+3,R2
(0031) UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); //8位數據+1位STOP位
0085 E086 LDI R24,6
0086 93800095 STS 0x95,R24
(0032) UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); //允許發送和接收
0088 E988 LDI R24,0x98
0089 B98A OUT 0x0A,R24
(0033) //UCSR0B=(1<<RXEN0)|(1<<TXEN0);
(0034) }
008A 9508 RET
_uart0_rx_isr:
008B 922A ST R2,-Y
008C 938A ST R24,-Y
008D 939A ST R25,-Y
008E 93EA ST R30,-Y
008F 93FA ST R31,-Y
0090 B62F IN R2,0x3F
0091 922A ST R2,-Y
(0035)
(0036) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
(0037) void uart0_rx_isr()
(0038) {
(0039) while(!(UCSR0A & (1<<RXC0)));
0092 9B5F SBIS 0x0B,7
0093 CFFE RJMP 0x0092
(0040) asm("WDR");
0094 95A8 WDR
(0041) RecComm[RecCount] = UDR0;
0095 E08B LDI R24,0xB
0096 E091 LDI R25,1
0097 91E00100 LDS R30,0x100
0099 27FF CLR R31
009A 0FE8 ADD R30,R24
009B 1FF9 ADC R31,R25
009C B02C IN R2,0x0C
009D 8220 STD Z+0,R2
(0042) RecCount++;
009E 91800100 LDS R24,0x100
00A0 5F8F SUBI R24,0xFF
00A1 93800100 STS 0x100,R24
(0043) if(RecCount >= FrameCount) RecCount = 0;
00A3 308A CPI R24,0xA
00A4 F018 BCS 0x00A8
00A5 2422 CLR R2
00A6 92200100 STS 0x100,R2
(0044) }
00A8 9029 LD R2,Y+
00A9 BE2F OUT 0x3F,R2
00AA 91F9 LD R31,Y+
00AB 91E9 LD R30,Y+
00AC 9199 LD R25,Y+
00AD 9189 LD R24,Y+
00AE 9029 LD R2,Y+
00AF 9518 RETI
_SendFrame0:
m --> R20
pTem --> R22
CountFrame --> R10
Frame --> R20
00B0 940E0112 CALL push_gset3
00B2 2EA2 MOV R10,R18
00B3 01A8 MOVW R20,R16
(0045)
(0046) void SendFrame0(uchar *Frame,uchar CountFrame)
(0047) {
(0048) uchar *pTem,m;
(0049) pTem = Frame;
00B4 01BA MOVW R22,R20
(0050) Set485Send;
00B5 91800065 LDS R24,0x65
00B7 7F8B ANDI R24,0xFB
00B8 93800065 STS 0x65,R24
(0051) Delay(100);
00BA E604 LDI R16,0x64
00BB E010 LDI R17,0
00BC DFAB RCALL _Delay
(0052) for(m=0;m<CountFrame;m++)
00BD 2744 CLR R20
00BE C00A RJMP 0x00C9
(0053) {
(0054) asm("WDR");
00BF 95A8 WDR
(0055) while (!(UCSR0A & (1<<UDRE0)));
00C0 9B5D SBIS 0x0B,5
00C1 CFFE RJMP 0x00C0
(0056) asm("WDR");
00C2 95A8 WDR
(0057) UDR0 = *pTem;
00C3 01FB MOVW R30,R22
00C4 8020 LDD R2,Z+0
00C5 B82C OUT 0x0C,R2
(0058) pTem++;
00C6 5F6F SUBI R22,0xFF
00C7 4F7F SBCI R23,0xFF
00C8 9543 INC R20
00C9 154A CP R20,R10
00CA F3A0 BCS 0x00BF
(0059) }
(0060) Set485Rec;
00CB 91800065 LDS R24,0x65
00CD 6084 ORI R24,4
00CE 93800065 STS 0x65,R24
(0061) Delay(100);
00D0 E604 LDI R16,0x64
00D1 E010 LDI R17,0
00D2 DF95 RCALL _Delay
(0062) }
00D3 940E00F4 CALL pop_gset3
00D5 9508 RET
(0063)
(0064) void main(void)
(0065) {
(0066) uchar m;
(0067) for(m=0;m<10;m++)
_main:
m --> R20
00D6 2744 CLR R20
00D7 C00A RJMP 0x00E2
(0068) {
(0069) SendComm[m]=0x30+m;
00D8 E081 LDI R24,1
00D9 E091 LDI R25,1
00DA 2FE4 MOV R30,R20
00DB 27FF CLR R31
00DC 0FE8 ADD R30,R24
00DD 1FF9 ADC R31,R25
00DE 2F84 MOV R24,R20
00DF 5D80 SUBI R24,0xD0
00E0 8380 STD Z+0,R24
00E1 9543 INC R20
00E2 304A CPI R20,0xA
00E3 F3A0 BCS 0x00D8
(0070) }
(0071) DDRG |= (1<<2);
00E4 91800064 LDS R24,0x64
00E6 6084 ORI R24,4
00E7 93800064 STS 0x64,R24
(0072) SEI();
00E9 9478 BSET 7
(0073) Com0Init();
00EA DF93 RCALL _Com0Init
(0074) SendFrame0(SendComm,10);
00EB E02A LDI R18,0xA
00EC E001 LDI R16,1
00ED E011 LDI R17,1
00EE DFC1 RCALL _SendFrame0
(0075) for(;;)
FILE: <library>
00EF CFFF RJMP 0x00EF
00F0 9508 RET
pop_gset2:
00F1 E0E2 LDI R30,2
00F2 940C00FB JMP pop
pop_gset3:
00F4 E0E4 LDI R30,4
00F5 940C00FB JMP pop
push_gset1:
00F7 935A ST R21,-Y
00F8 934A ST R20,-Y
00F9 9508 RET
pop_gset1:
00FA E0E1 LDI R30,1
pop:
00FB 9149 LD R20,Y+
00FC 9159 LD R21,Y+
00FD FDE0 SBRC R30,0
00FE 9508 RET
00FF 9169 LD R22,Y+
0100 9179 LD R23,Y+
0101 FDE1 SBRC R30,1
0102 9508 RET
0103 90A9 LD R10,Y+
0104 90B9 LD R11,Y+
0105 FDE2 SBRC R30,2
0106 9508 RET
0107 90C9 LD R12,Y+
0108 90D9 LD R13,Y+
0109 FDE3 SBRC R30,3
010A 9508 RET
010B 90E9 LD R14,Y+
010C 90F9 LD R15,Y+
010D 9508 RET
push_gset2:
010E 937A ST R23,-Y
010F 936A ST R22,-Y
0110 940C00F7 JMP push_gset1
push_gset3:
0112 92BA ST R11,-Y
0113 92AA ST R10,-Y
0114 940C010E JMP push_gset2
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -