?? pp.lst
字號:
__start:
__text_start:
0065 E5CF LDI R28,0x5F
0066 E0D4 LDI R29,4
0067 BFCD OUT 0x3D,R28
0068 BFDE OUT 0x3E,R29
0069 51C0 SUBI R28,0x10
006A 40D0 SBCI R29,0
006B EA0A LDI R16,0xAA
006C 8308 STD Y+0,R16
006D 2400 CLR R0
006E E6E0 LDI R30,0x60
006F E0F0 LDI R31,0
0070 E011 LDI R17,1
0071 38EE CPI R30,0x8E
0072 07F1 CPC R31,R17
0073 F011 BEQ 0x0076
0074 9201 ST R0,Z+
0075 CFFB RJMP 0x0071
0076 8300 STD Z+0,R16
0077 ECEA LDI R30,0xCA
0078 E0F0 LDI R31,0
0079 E6A0 LDI R26,0x60
007A E0B0 LDI R27,0
007B E010 LDI R17,0
007C 3CEA CPI R30,0xCA
007D 07F1 CPC R31,R17
007E F021 BEQ 0x0083
007F 95C8 LPM
0080 9631 ADIW R30,1
0081 920D ST R0,X+
0082 CFF9 RJMP 0x007C
0083 D4AB RCALL _main
_exit:
0084 CFFF RJMP _exit
_WriteDataLCM:
WDLCM --> R20
0085 D4D6 RCALL push_gset1
0086 2F40 MOV R20,R16
FILE: I:\刷卡器\pp.c
(0001) /*****************0XDFE4*****************************庫定義*/
(0002) #include <iom8v.h>
(0003) #include <macros.h>
(0004) #include "define.h"
(0005) //*******************************************************************寫數(shù)據(jù)11//
(0006) void WriteDataLCM(unsigned char WDLCM)
(0007) {
(0008) ReadStatusLCM(); //檢測忙
0087 D022 RCALL _ReadStatusLCM
(0009) PORTB = WDLCM;
0088 BB48 OUT 0x18,R20
(0010) SET_LCD_RS;CLR_LCD_RW;SET_LCD_RS;CLR_LCD_RW;
0089 9A95 SBI 0x12,5
008A 9896 CBI 0x12,6
008B 9A95 SBI 0x12,5
008C 9896 CBI 0x12,6
(0011) CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;
008D 9897 CBI 0x12,7
008E 9897 CBI 0x12,7
008F 9897 CBI 0x12,7
0090 9897 CBI 0x12,7
0091 9897 CBI 0x12,7
0092 9897 CBI 0x12,7
(0012) SET_LCD_E;SET_LCD_E;
0093 9A97 SBI 0x12,7
0094 9A97 SBI 0x12,7
0095 D4C9 RCALL pop_gset1
0096 9508 RET
_WriteCommandLCM:
BuysC --> R22
WCLCM --> R20
0097 D4C2 RCALL push_gset2
0098 2F62 MOV R22,R18
0099 2F40 MOV R20,R16
(0013) }
(0014) //********************************************************************寫指令12//
(0015) void WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC) //BuysC為0時(shí)忽略忙檢測
(0016) {
(0017) if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測忙
009A 2366 TST R22
009B F009 BEQ 0x009D
009C D00D RCALL _ReadStatusLCM
(0018) PORTB = WCLCM;
009D BB48 OUT 0x18,R20
(0019) CLR_LCD_RS;CLR_LCD_RW;
009E 9895 CBI 0x12,5
009F 9896 CBI 0x12,6
(0020) CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;
00A0 9897 CBI 0x12,7
00A1 9897 CBI 0x12,7
00A2 9897 CBI 0x12,7
00A3 9897 CBI 0x12,7
00A4 9897 CBI 0x12,7
00A5 9897 CBI 0x12,7
(0021) SET_LCD_E;SET_LCD_E;
00A6 9A97 SBI 0x12,7
00A7 9A97 SBI 0x12,7
00A8 D4A7 RCALL pop_gset2
00A9 9508 RET
(0022) }
(0023) //*******************************************************************讀狀態(tài)13//
(0024) unsigned char ReadStatusLCM(void)
(0025) {
(0026) DDRB=0x00; //輸入
_ReadStatusLCM:
00AA 2422 CLR R2
00AB BA27 OUT 0x17,R2
(0027) CLR_LCD_RS;SET_LCD_RW;
00AC 9895 CBI 0x12,5
00AD 9A96 SBI 0x12,6
(0028) CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;
00AE 9897 CBI 0x12,7
00AF 9897 CBI 0x12,7
00B0 9897 CBI 0x12,7
00B1 9897 CBI 0x12,7
00B2 9897 CBI 0x12,7
00B3 9897 CBI 0x12,7
(0029) SET_LCD_E;SET_LCD_E;
00B4 9A97 SBI 0x12,7
00B5 9A97 SBI 0x12,7
(0030) while (PINB&0x80); //檢測忙信號
00B6 99B7 SBIC 0x16,7
00B7 CFFE RJMP 0x00B6
(0031) DDRB=0xff;//變回輸出
00B8 EF8F LDI R24,0xFF
00B9 BB87 OUT 0x17,R24
(0032) return(PINB);
00BA B306 IN R16,0x16
00BB 9508 RET
_DisplayOneChar:
DData --> Y+4
Y --> R22
X --> R20
00BC D49D RCALL push_gset2
00BD 2F62 MOV R22,R18
00BE 2F40 MOV R20,R16
(0033) }
(0034) //*************************************************************顯示一個(gè)字符14//
(0035) void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
(0036) {
(0037) Y &= 0x1; X &= 0xF;
00BF 7061 ANDI R22,1
00C0 704F ANDI R20,0xF
(0038) if (Y) X |= 0x40;
00C1 2366 TST R22
00C2 F009 BEQ 0x00C4
00C3 6440 ORI R20,0x40
(0039) X |= 0x80;
00C4 6840 ORI R20,0x80
(0040) WriteCommandLCM(X, 1);
00C5 E021 LDI R18,1
00C6 2F04 MOV R16,R20
00C7 DFCF RCALL _WriteCommandLCM
(0041) WriteDataLCM(DData);
00C8 810C LDD R16,Y+4
00C9 DFBB RCALL _WriteDataLCM
(0042) WriteCommandLCM(X, 1);
00CA E021 LDI R18,1
00CB 2F04 MOV R16,R20
00CC DFCA RCALL _WriteCommandLCM
00CD D482 RCALL pop_gset2
00CE 9508 RET
_DisplayListChar:
j --> R20
Leng --> R22
DData --> R10
Y --> R12
X --> R14
00CF D484 RCALL push_gset5
00D0 2EC2 MOV R12,R18
00D1 2EE0 MOV R14,R16
00D2 9721 SBIW R28,1
00D3 84AB LDD R10,Y+11
00D4 84BC LDD R11,Y+12
00D5 856D LDD R22,Y+13
(0043) }
(0044) //************************************************************顯示ROM字符串15//
(0045) void DisplayListChar(unsigned char X, unsigned char Y, const unsigned char *DData,unsigned char Leng)
(0046) {
(0047) unsigned char j;
(0048) Y &= 0x01;X &= 0x0F;
00D6 2D8C MOV R24,R12
00D7 7081 ANDI R24,1
00D8 2EC8 MOV R12,R24
00D9 2D8E MOV R24,R14
00DA 708F ANDI R24,0xF
00DB 2EE8 MOV R14,R24
(0049) for(j=0;j<Leng;X++,j++)
00DC 2744 CLR R20
00DD C00E RJMP 0x00EC
(0050) {
(0051) if(X<=0xf)DisplayOneChar(X,Y,DData[j]);
00DE E08F LDI R24,0xF
00DF 158E CP R24,R14
00E0 F048 BCS 0x00EA
00E1 2FE4 MOV R30,R20
00E2 27FF CLR R31
00E3 0DEA ADD R30,R10
00E4 1DFB ADC R31,R11
00E5 91E4 LPM R30,0(Z)
00E6 83E8 STD Y+0,R30
00E7 2D2C MOV R18,R12
00E8 2D0E MOV R16,R14
00E9 DFD2 RCALL _DisplayOneChar
00EA 94E3 INC R14
00EB 9543 INC R20
00EC 1746 CP R20,R22
00ED F380 BCS 0x00DE
00EE 9621 ADIW R28,1
00EF D462 RCALL pop_gset5
00F0 9508 RET
_DisplayListChar1:
j --> R20
Leng --> R22
DData --> R10
Y --> R12
X --> R14
00F1 D462 RCALL push_gset5
00F2 2EC2 MOV R12,R18
00F3 2EE0 MOV R14,R16
00F4 9721 SBIW R28,1
00F5 84AB LDD R10,Y+11
00F6 84BC LDD R11,Y+12
00F7 856D LDD R22,Y+13
(0052) }
(0053) }
(0054) //************************************************************顯示RAM字符串16//
(0055) void DisplayListChar1(unsigned char X, unsigned char Y, unsigned char *DData,unsigned char Leng)
(0056) {
(0057) unsigned char j;
(0058) Y &= 0x01;X &= 0x0F;
00F8 2D8C MOV R24,R12
00F9 7081 ANDI R24,1
00FA 2EC8 MOV R12,R24
00FB 2D8E MOV R24,R14
00FC 708F ANDI R24,0xF
00FD 2EE8 MOV R14,R24
(0059) for(j=0;j<Leng;X++,j++)
00FE 2744 CLR R20
00FF C00E RJMP 0x010E
(0060) {
(0061) if(X<=0xf)DisplayOneChar(X,Y,DData[j]);
0100 E08F LDI R24,0xF
0101 158E CP R24,R14
0102 F048 BCS 0x010C
0103 2FE4 MOV R30,R20
0104 27FF CLR R31
0105 0DEA ADD R30,R10
0106 1DFB ADC R31,R11
0107 8020 LDD R2,Z+0
0108 8228 STD Y+0,R2
0109 2D2C MOV R18,R12
010A 2D0E MOV R16,R14
010B DFB0 RCALL _DisplayOneChar
010C 94E3 INC R14
010D 9543 INC R20
010E 1746 CP R20,R22
010F F380 BCS 0x0100
0110 9621 ADIW R28,1
0111 D440 RCALL pop_gset5
0112 9508 RET
(0062) }
(0063) }
(0064) //****************************************************************LCM初始化17//
(0065) void LCMInit(void)
(0066) {
(0067) PORTB = 0;
_LCMInit:
0113 2422 CLR R2
0114 BA28 OUT 0x18,R2
(0068) WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測忙信號
0115 2722 CLR R18
0116 E308 LDI R16,0x38
0117 DF7F RCALL _WriteCommandLCM
(0069) delay_ms(5);
0118 E005 LDI R16,5
0119 E010 LDI R17,0
011A D1C6 RCALL _delay_ms
(0070) WriteCommandLCM(0x38,0);
011B 2722 CLR R18
011C E308 LDI R16,0x38
011D DF79 RCALL _WriteCommandLCM
(0071) delay_ms(5);
011E E005 LDI R16,5
011F E010 LDI R17,0
0120 D1C0 RCALL _delay_ms
(0072) WriteCommandLCM(0x38,0);
0121 2722 CLR R18
0122 E308 LDI R16,0x38
0123 DF73 RCALL _WriteCommandLCM
(0073) delay_ms(5);
0124 E005 LDI R16,5
0125 E010 LDI R17,0
0126 D1BA RCALL _delay_ms
(0074) WriteCommandLCM(0x38,1); //顯示模式設(shè)置,開始要求每次檢測忙信號
0127 E021 LDI R18,1
0128 E308 LDI R16,0x38
0129 DF6D RCALL _WriteCommandLCM
(0075) WriteCommandLCM(0x08,1); //關(guān)閉顯示
012A E021 LDI R18,1
012B E008 LDI R16,0x8
012C DF6A RCALL _WriteCommandLCM
(0076) WriteCommandLCM(0x01,1); //顯示清屏
012D E021 LDI R18,1
012E E001 LDI R16,1
012F DF67 RCALL _WriteCommandLCM
(0077) WriteCommandLCM(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
0130 E021 LDI R18,1
0131 E006 LDI R16,6
0132 DF64 RCALL _WriteCommandLCM
(0078) WriteCommandLCM(0x0C,1); // 顯示開及光標(biāo)設(shè)置
0133 E021 LDI R18,1
0134 E00C LDI R16,0xC
0135 DF61 RCALL _WriteCommandLCM
0136 9508 RET
(0079) }
(0080)
(0081) //***************************************************中斷任務(wù)//
(0082) //*************************************************************接收串口數(shù)據(jù)21//
(0083) void RxUart(void)
(0084) {
(0085) switch(RxUartAddr)
_RxUart:
0137 91000072 LDS R16,RxUartAddr
0139 2711 CLR R17
013A 3000 CPI R16,0
013B 0701 CPC R16,R17
013C F049 BEQ 0x0146
013D 3001 CPI R16,1
013E E0E0 LDI R30,0
013F 071E CPC R17,R30
0140 F061 BEQ 0x014D
0141 3002 CPI R16,2
0142 E0E0 LDI R30,0
0143 071E CPC R17,R30
0144 F0C1 BEQ 0x015D
0145 C06F RJMP 0x01B5
(0086) {
(0087) case(0)://接收關(guān)閉
(0088) {
(0089) RxUartTemp=UDR;RxUartAddr=0;return;
0146 B02C IN R2,0x0C
0147 92200071 STS RxUartTemp,R2
0149 2422 CLR R2
014A 92200072 STS RxUartAddr,R2
014C C068 RJMP 0x01B5
(0090) }
(0091) case(1)://接收初始
(0092) {
(0093) RxUartLeng=0;RxUartDely=200;RxUartAddr=2;return;
014D 2422 CLR R2
014E 2433 CLR R3
014F 92300070 STS RxUartLeng+1,R3
0151 9220006F STS RxUartLeng,R2
0153 EC88 LDI R24,0xC8
0154 E090 LDI R25,0
0155 9390006C STS RxUartDely+1,R25
0157 9380006B STS RxUartDely,R24
0159 E082 LDI R24,2
015A 93800072 STS RxUartAddr,R24
015C C058 RJMP 0x01B5
(0094) }
(0095) case(2)://接收處理
(0096) {
(0097) if((UCSRA)&(1<<RXC))
015D 9B5F SBIS 0x0B,7
015E C02A RJMP 0x0189
(0098) {
(0099) RxUartTemp=UDR;RxUartWait=2;RxUartDely=100;
015F B02C IN R2,0x0C
0160 92200071 STS RxUartTemp,R2
0162 E082 LDI R24,2
0163 E090 LDI R25,0
0164 9390006E STS RxUartWait+1,R25
0166 9380006D STS RxUartWait,R24
0168 E684 LDI R24,0x64
0169 9390006C STS RxUartDely+1,R25
016B 9380006B STS RxUartDely,R24
(0100) if(RxUartLeng>=250) return;
016D 9180006F LDS R24,RxUartLeng
016F 91900070 LDS R25,RxUartLeng+1
0171 3F8A CPI R24,0xFA
0172 E0E0 LDI R30,0
0173 079E CPC R25,R30
0174 F008 BCS 0x0176
0175 C03F RJMP 0x01B5
(0101) RxUartDbuf[RxUartLeng++]=RxUartTemp;
0176 9020006F LDS R2,RxUartLeng
0178 90300070 LDS R3,RxUartLeng+1
017A 01C1 MOVW R24,R2
017B 9601 ADIW R24,1
017C 93900070 STS RxUartLeng+1,R25
017E 9380006F STS RxUartLeng,R24
0180 E783 LDI R24,0x73
0181 E090 LDI R25,0
0182 01F1 MOVW R30,R2
0183 0FE8 ADD R30,R24
0184 1FF9 ADC R31,R25
0185 90200071 LDS R2,RxUartTemp
0187 8220 STD Z+0,R2
(0102) return;
0188 C02C RJMP 0x01B5
(0103) }
(0104) else
(0105) {
(0106) if(!RxUartWait) return;
0189 9020006D LDS R2,RxUartWait
018B 9030006E LDS R3,RxUartWait+1
018D 2022 TST R2
018E F419 BNE 0x0192
018F 2033 TST R3
0190 F409 BNE 0x0192
0191 C023 RJMP 0x01B5
(0107) if(--RxUartDely) return;
0192 9180006B LDS R24,RxUartDely
0194 9190006C LDS R25,RxUartDely+1
0196 9701 SBIW R24,1
0197 9390006C STS RxUartDely+1,R25
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -