?? mega8bj.lst
字號:
__text_start:
__start:
001B E5CF LDI R28,0x5F
001C E0D4 LDI R29,4
001D BFCD OUT 0x3D,R28
001E BFDE OUT 0x3E,R29
001F 51C0 SUBI R28,0x10
0020 40D0 SBCI R29,0
0021 EA0A LDI R16,0xAA
0022 8308 STD Y+0,R16
0023 2400 CLR R0
0024 E7E0 LDI R30,0x70
0025 E0F0 LDI R31,0
0026 E010 LDI R17,0
0027 37EF CPI R30,0x7F
0028 07F1 CPC R31,R17
0029 F011 BEQ 0x002C
002A 9201 ST R0,Z+
002B CFFB RJMP 0x0027
002C 8300 STD Z+0,R16
002D E2E6 LDI R30,0x26
002E E0F0 LDI R31,0
002F E6A0 LDI R26,0x60
0030 E0B0 LDI R27,0
0031 E010 LDI R17,0
0032 33E6 CPI R30,0x36
0033 07F1 CPC R31,R17
0034 F021 BEQ 0x0039
0035 95C8 LPM
0036 9631 ADIW R30,1
0037 920D ST R0,X+
0038 CFF9 RJMP 0x0032
0039 D079 RCALL _main
_exit:
003A CFFF RJMP _exit
FILE: D:\教學\2008bishe\avrprog\mainok.c
(0001) /***************************************/
(0002) /* 使用內部震蕩,設置4mhz */
(0003) /****************************************/
(0004) //2007.12---xieming
(0005) // 1、使用ICCAVR的終端調試窗口(Terminal),進行通信調試。
(0006) // 2、對ICCAVR的終端調試窗口進行設置,設置串口為com1或com2,
(0007) // 通信波特率為19200(Tools->Environment Options...)。
(0008) // 3、將PC屏幕光標定位于調試窗口中
(0009) #include "iom8v.h"
(0010) #include "macros.h"
(0011) #define osccal 0x7d
(0012) //內部RC校正常數
(0013) #define Vref 500//參考電壓值
(0014)
(0015) unsigned int adc_rel;//AD轉換結果
(0016) unsigned char adc_mux;//AD通道
(0017)
(0018) #define set_bit(x,y) (x|=(1<<y))
(0019) #define clr_bit(x,y) (x&=~(1<<y))
(0020)
(0021) //PORT B
(0022) #define OUT1 5
(0023) #define OUT2 4
(0024)
(0025) unsigned int disnm,smode;
(0026) unsigned char dis[4];
(0027) unsigned char num[12]={
(0028) 0x3f,//------------------0
(0029) 0x06,//------------------1
(0030) 0x5b,//------------------2
(0031) 0x4f,//------------------3
(0032) 0x66,//------------------4
(0033) 0x6d,//------------------5
(0034) 0x7d,//------------------6
(0035) 0x27,//------------------7
(0036) 0x7f,//------------------8
(0037) 0x6f,//------------------9
(0038) 0xff,//------------------8.
(0039) 0x00//-------------------none
(0040) };
(0041)
(0042)
(0043) unsigned char temp[4]={30,35,40,45};
(0044)
(0045) unsigned char sd,su,se,sm;
(0046)
(0047)
(0048)
(0049) void delay(int dt) //delay=(0.95dt+1.76)us
(0050) {while(dt)
_delay:
dt --> R16
003B C005 RJMP 0x0041
(0051) {dt--;
003C 5001 SUBI R16,1
003D 4010 SBCI R17,0
(0052) asm("nop");
003E 0000 NOP
(0053) asm("nop");
003F 0000 NOP
(0054) asm("nop");
0040 0000 NOP
0041 3000 CPI R16,0
0042 0701 CPC R16,R17
0043 F7C1 BNE 0x003C
0044 9508 RET
_display:
i --> R20
0045 D1A6 RCALL push_gset1
(0055) }
(0056) }
(0057) void display(void)
(0058) {unsigned char i;
(0059)
(0060) for(i=0;i<4;i++)
0046 2744 CLR R20
0047 C020 RJMP 0x0068
(0061) { clr_bit(PORTD,i);
0048 E001 LDI R16,1
0049 2F14 MOV R17,R20
004A D1B8 RCALL lsl8
004B 2E20 MOV R2,R16
004C 9420 COM R2
004D B232 IN R3,0x12
004E 2032 AND R3,R2
004F BA32 OUT 0x12,R3
(0062) PORTB=num[dis[i]];
0050 E784 LDI R24,0x74
0051 E090 LDI R25,0
0052 2FE4 MOV R30,R20
0053 27FF CLR R31
0054 0FE8 ADD R30,R24
0055 1FF9 ADC R31,R25
0056 81E0 LDD R30,Z+0
0057 27FF CLR R31
0058 E680 LDI R24,0x60
0059 E090 LDI R25,0
005A 0FE8 ADD R30,R24
005B 1FF9 ADC R31,R25
005C 8020 LDD R2,Z+0
005D BA28 OUT 0x18,R2
(0063) delay(10);
005E E00A LDI R16,0xA
005F E010 LDI R17,0
0060 DFDA RCALL _delay
(0064) set_bit(PORTD,i);
0061 E001 LDI R16,1
0062 2F14 MOV R17,R20
0063 D19F RCALL lsl8
0064 B222 IN R2,0x12
0065 2A20 OR R2,R16
0066 BA22 OUT 0x12,R2
0067 9543 INC R20
0068 3044 CPI R20,4
0069 F2F0 BCS 0x0048
006A D184 RCALL pop_gset1
006B 9508 RET
_keyscan:
tp --> R22
keyst --> R20
006C D17D RCALL push_gset2
(0065) }
(0066)
(0067) }
(0068)
(0069) unsigned char keyscan(void)
(0070) { unsigned char keyst,tp;
(0071) keyst=PINC;
006D B343 IN R20,0x13
(0072) delay(10);
006E E00A LDI R16,0xA
006F E010 LDI R17,0
0070 DFCA RCALL _delay
(0073) tp=PINC;
0071 B363 IN R22,0x13
(0074) if(tp!=keyst) return 0;
0072 1764 CP R22,R20
0073 F011 BEQ 0x0076
0074 2700 CLR R16
0075 C03B RJMP 0x00B1
(0075) keyst=keyst&0x0f;
0076 704F ANDI R20,0xF
(0076) if(keyst==0x0f)
0077 304F CPI R20,0xF
0078 F459 BNE 0x0084
(0077) {sd=0;su=0;se=0;sm=0;
0079 2422 CLR R2
007A 92200073 STS sd,R2
007C 92200072 STS su,R2
007E 92200071 STS se,R2
0080 92200070 STS sm,R2
(0078) return 0;//no button
0082 2700 CLR R16
0083 C02D RJMP 0x00B1
(0079) }
(0080) else
(0081) {if(sd||se||su||sm) return 0;
0084 90200073 LDS R2,sd
0086 2022 TST R2
0087 F461 BNE 0x0094
0088 90200071 LDS R2,se
008A 2022 TST R2
008B F441 BNE 0x0094
008C 90200072 LDS R2,su
008E 2022 TST R2
008F F421 BNE 0x0094
0090 90200070 LDS R2,sm
0092 2022 TST R2
0093 F011 BEQ 0x0096
0094 2700 CLR R16
0095 C01B RJMP 0x00B1
(0082) if((keyst&1)==0) {sd=1;return 1;} //down
0096 FD40 SBRC R20,0
0097 C005 RJMP 0x009D
0098 E081 LDI R24,1
0099 93800073 STS sd,R24
009B E001 LDI R16,1
009C C014 RJMP 0x00B1
(0083) else if((keyst&2)==0) {su=1;return 2;}//up
009D FD41 SBRC R20,1
009E C005 RJMP 0x00A4
009F E081 LDI R24,1
00A0 93800072 STS su,R24
00A2 E002 LDI R16,2
00A3 C00D RJMP 0x00B1
(0084) else if((keyst&4)==0) {se=1;return 3;}//enter
00A4 FD42 SBRC R20,2
00A5 C005 RJMP 0x00AB
00A6 E081 LDI R24,1
00A7 93800071 STS se,R24
00A9 E003 LDI R16,3
00AA C006 RJMP 0x00B1
(0085) else if((keyst&8)==0) {sm=1;return 4;}//mode
00AB FD43 SBRC R20,3
00AC C004 RJMP 0x00B1
00AD E081 LDI R24,1
00AE 93800070 STS sm,R24
00B0 E004 LDI R16,4
(0086) }
00B1 D130 RCALL pop_gset2
00B2 9508 RET
(0087) }
(0088)
(0089) void main(void)
(0090) {
(0091) unsigned int j,keynm,i=0;
_main:
j --> Y+1
i --> R20
keynm --> R22
00B3 2744 CLR R20
00B4 2755 CLR R21
(0092)
(0093)
(0094) DDRB=0xff;/*PORTb is outPUT PORT*/
00B5 EF8F LDI R24,0xFF
00B6 BB87 OUT 0x17,R24
(0095) PORTB=0xfF;//
00B7 BB88 OUT 0x18,R24
(0096) DDRD=0xff; //
00B8 BB81 OUT 0x11,R24
(0097) PORTD=0x3f; //
00B9 E38F LDI R24,0x3F
00BA BB82 OUT 0x12,R24
(0098)
(0099) DDRC=0x00;/* input */
00BB 2422 CLR R2
00BC BA24 OUT 0x14,R2
(0100) PORTC=0x0f;/* pullup enable */
00BD E08F LDI R24,0xF
00BE BB85 OUT 0x15,R24
00BF C0EC RJMP 0x01AC
(0101)
(0102)
(0103) while(1)
(0104) {
(0105)
(0106)
(0107) //dis[0]=11;dis[1]=11;dis[2]=11;dis[3]=11;
(0108)
(0109)
(0110)
(0111) keynm=keyscan();
00C0 DFAB RCALL _keyscan
00C1 2F60 MOV R22,R16
00C2 2777 CLR R23
(0112) if(keynm==4)//set mode
00C3 3064 CPI R22,4
00C4 E0E0 LDI R30,0
00C5 077E CPC R23,R30
00C6 F4C1 BNE 0x00DF
(0113) {smode=smode+1;
00C7 91800078 LDS R24,smode
00C9 91900079 LDS R25,smode+1
00CB 9601 ADIW R24,1
00CC 93900079 STS smode+1,R25
00CE 93800078 STS smode,R24
(0114) if(smode==5) smode=1;
00D0 3085 CPI R24,5
00D1 E0E0 LDI R30,0
00D2 079E CPC R25,R30
00D3 F431 BNE 0x00DA
00D4 E081 LDI R24,1
00D5 E090 LDI R25,0
00D6 93900079 STS smode+1,R25
00D8 93800078 STS smode,R24
(0115) dis[3]=4;
00DA E084 LDI R24,4
00DB 93800077 STS dis+3,R24
(0116) display();
00DD DF67 RCALL _display
(0117) }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -