📄 dac.lst
字号:
__start:
__text_start:
0000 CFFF RJMP __start
0001 E0D2 LDI R29,2
0002 BFCD OUT P3D,R28
0003 BFDE OUT P3E,R29
0004 51C0 SUBI R28,0x10
0005 40D0 SBCI R29,0
0006 EA0A LDI R16,0xAA
0007 8308 STD R16,0+Y
0008 2400 CLR R0
0009 E6E0 LDI R30,0x60
000A E0F0 LDI R31,0
000B E010 LDI R17,0
000C 36E0 CPI R30,0x60
000D 07F1 CPC R31,R17
000E F011 BEQ 0x0011
000F 9201 ST R0,Z+
0010 CFFB RJMP 0x000C
0011 8300 STD R16,0+Z
0012 E0E0 LDI R30,0
0013 E0F0 LDI R31,0
0014 E6A0 LDI R26,0x60
0015 E0B0 LDI R27,0
0016 E010 LDI R17,0
0017 30E0 CPI R30,0
0018 07F1 CPC R31,R17
0019 F021 BEQ 0x001E
001A 95C8 LPM
001B 9631 ADIW R30,1
001C 920D ST R0,X+
001D CFF9 RJMP 0x0017
001E D084 RCALL _main
_exit:
001F CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
0020 D0C4 RCALL push_gset2
FILE: C:\icc\examples.avr\mypractice\DAC_prj\DAC.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) //#include "Skey.c"
(0006)
(0007) void delay(uint ms)
(0008) {
(0009) uint i,j;
(0010) for(i=0;i<ms;i++)
0021 2744 CLR R20
0022 2755 CLR R21
0023 C00B RJMP 0x002F
(0011) {
(0012) for(j=0;j<1141;j++);
0024 2766 CLR R22
0025 2777 CLR R23
0026 C002 RJMP 0x0029
0027 5F6F SUBI R22,0xFF
0028 4F7F SBCI R23,0xFF
0029 3765 CPI R22,0x75
002A E0E4 LDI R30,4
002B 077E CPC R23,R30
002C F3D0 BCS 0x0027
002D 5F4F SUBI R20,0xFF
002E 4F5F SBCI R21,0xFF
002F 1740 CP R20,R16
0030 0751 CPC R21,R17
0031 F390 BCS 0x0024
(0013) }
(0014) }
0032 D0B8 RCALL pop_gset2
0033 9508 RET
(0015)
(0016) uchar key_press()
(0017) {
(0018) uchar j;
(0019) DDRD|=0X0F;
_key_press:
j --> R16
0034 B381 IN R24,P11
0035 608F ORI R24,0xF
0036 BB81 OUT P11,R24
(0020) PORTD|=0X0F;
0037 B382 IN R24,P12
0038 608F ORI R24,0xF
0039 BB82 OUT P12,R24
(0021)
(0022) DDRD&=0XF0;
003A B381 IN R24,P11
003B 7F80 ANDI R24,0xF0
003C BB81 OUT P11,R24
(0023)
(0024) j=PIND;
003D B300 IN R16,P10
(0025) j=j&0X0F;//00001111
003E 700F ANDI R16,0xF
(0026) if(j==0X0F)
003F 300F CPI R16,0xF
0040 F411 BNE 0x0043
(0027) {
(0028) return 0;
0041 2700 CLR R16
0042 C001 RJMP 0x0044
(0029) }
(0030) else
(0031) {
(0032) return 1;
0043 E001 LDI R16,1
0044 9508 RET
_key_scan:
key --> R20
0045 D09F RCALL push_gset2
(0033) }
(0034)
(0035) }
(0036)
(0037) uchar key_scan()
(0038) {
(0039) uchar key;
(0040) delay(10);
0046 E00A LDI R16,0xA
0047 E010 LDI R17,0
0048 DFD7 RCALL _delay
(0041) if(key_press())
0049 DFEA RCALL _key_press
004A 2300 TST R16
004B F111 BEQ 0x006E
(0042) {
(0043) key=PIND;
004C B340 IN R20,P10
(0044) key&=0X0F;
004D 704F ANDI R20,0xF
(0045) switch(key)
004E 2F64 MOV R22,R20
004F 2777 CLR R23
0050 3067 CPI R22,7
0051 E0E0 LDI R30,0
0052 077E CPC R23,R30
0053 F099 BEQ 0x0067
0054 306B CPI R22,0xB
0055 E0E0 LDI R30,0
0056 077E CPC R23,R30
0057 F069 BEQ 0x0065
0058 306D CPI R22,0xD
0059 E0E0 LDI R30,0
005A 077E CPC R23,R30
005B F039 BEQ 0x0063
005C 306E CPI R22,0xE
005D E0E0 LDI R30,0
005E 077E CPC R23,R30
005F F009 BEQ 0x0061
0060 C008 RJMP 0x0069
(0046) {
(0047) case 0X0E:
(0048) key=0;
0061 2744 CLR R20
(0049) break;
0062 C007 RJMP 0x006A
(0050) case 0X0D:
(0051) key=1;
0063 E041 LDI R20,1
(0052) break;
0064 C005 RJMP 0x006A
(0053) case 0X0B:
(0054) key=2;
0065 E042 LDI R20,2
(0055) break;
0066 C003 RJMP 0x006A
(0056) case 0X07:
(0057) key=3;
0067 E043 LDI R20,3
(0058) break;
0068 C001 RJMP 0x006A
(0059) default:
(0060) key=0;
0069 2744 CLR R20
(0061) }
(0062) while(key_press());
006A DFC9 RCALL _key_press
006B 2300 TST R16
006C F7E9 BNE 0x006A
(0063) }
006D C001 RJMP 0x006F
(0064) else
(0065) {
(0066) key=0;
006E 2744 CLR R20
(0067) }
(0068) return key;
006F 2F04 MOV R16,R20
0070 D07A RCALL pop_gset2
0071 9508 RET
(0069) }
(0070)
(0071) void spi_init()
(0072) {
(0073) DDRB|=0XA0;
_spi_init:
0072 B387 IN R24,P17
0073 6A80 ORI R24,0xA0
0074 BB87 OUT P17,R24
(0074) DDRA|=BIT(PA1);
0075 9AD1 SBI P1A,1
(0075) SPCR=0X57;
0076 E587 LDI R24,0x57
0077 B98D OUT P0D,R24
(0076) }
0078 9508 RET
_ad5300:
temp2 --> R22
temp1 --> R20
status --> R22
daword --> R10
0079 D06E RCALL push_gset3
007A 2EA0 MOV R10,R16
(0077) void ad5300(uchar daword)
(0078) {
(0079) uchar temp1=0,temp2=0,status;
007B 2744 CLR R20
007C 2766 CLR R22
(0080) temp1|=daword<<4;//1101 1001
007D 2D8A MOV R24,R10
007E 708F ANDI R24,0xF
007F 9582 SWAP R24
0080 2B48 OR R20,R24
(0081) temp2|=daword>>4;
0081 2D8A MOV R24,R10
0082 9582 SWAP R24
0083 708F ANDI R24,0xF
0084 2B68 OR R22,R24
(0082)
(0083) PORTA&=~BIT(PA1);
0085 98D9 CBI P1B,1
(0084) SPSR=0;
0086 2422 CLR R2
0087 B82E OUT P0E,R2
(0085) SPDR=temp2;
0088 B96F OUT P0F,R22
(0086) do
(0087) {
(0088) status=SPSR;
0089 B16E IN R22,P0E
(0089) }while(!(status&=0X80));
008A 2F86 MOV R24,R22
008B 7880 ANDI R24,0x80
008C 2F68 MOV R22,R24
008D 2388 TST R24
008E F3D1 BEQ 0x0089
(0090)
(0091) delay(10);
008F E00A LDI R16,0xA
0090 E010 LDI R17,0
0091 DF8E RCALL _delay
(0092) SPSR=0;
0092 2422 CLR R2
0093 B82E OUT P0E,R2
(0093) SPDR=temp1;
0094 B94F OUT P0F,R20
(0094) do
(0095) {
(0096) status=SPSR;
0095 B16E IN R22,P0E
(0097) }while(!(status&=0X80));
0096 2F86 MOV R24,R22
0097 7880 ANDI R24,0x80
0098 2F68 MOV R22,R24
0099 2388 TST R24
009A F3D1 BEQ 0x0095
(0098) SPSR=0;
009B 2422 CLR R2
009C B82E OUT P0E,R2
(0099) delay(10);
009D E00A LDI R16,0xA
009E E010 LDI R17,0
009F DF80 RCALL _delay
(0100) PORTA|=BIT(PA1);
00A0 9AD9 SBI P1B,1
(0101) }
00A1 D04B RCALL pop_gset3
00A2 9508 RET
(0102) void main()
(0103) {
(0104) uchar i,data=128;
_main:
data --> R20
i --> R10
00A3 E840 LDI R20,0x80
(0105) DDRB=0XFF;
00A4 EF8F LDI R24,0xFF
00A5 BB87 OUT P17,R24
(0106) spi_init();
00A6 DFCB RCALL _spi_init
(0107) ad5300(0);
00A7 2700 CLR R16
00A8 DFD0 RCALL _ad5300
(0108) ad5300(data);
00A9 2F04 MOV R16,R20
00AA DFCE RCALL _ad5300
00AB C020 RJMP 0x00CC
(0109)
(0110) while(1)
(0111) {
(0112) if(key_press())
00AC DF87 RCALL _key_press
00AD 2300 TST R16
00AE F0E9 BEQ 0x00CC
(0113) {
(0114) i=key_scan();
00AF DF95 RCALL _key_scan
00B0 2EA0 MOV R10,R16
(0115) switch(i)
00B1 2D6A MOV R22,R10
00B2 2777 CLR R23
00B3 3060 CPI R22,0
00B4 0767 CPC R22,R23
00B5 F069 BEQ 0x00C3
00B6 3061 CPI R22,1
00B7 E0E0 LDI R30,0
00B8 077E CPC R23,R30
00B9 F059 BEQ 0x00C5
00BA 3062 CPI R22,2
00BB E0E0 LDI R30,0
00BC 077E CPC R23,R30
00BD F049 BEQ 0x00C7
00BE 3063 CPI R22,3
00BF E0E0 LDI R30,0
00C0 077E CPC R23,R30
00C1 F039 BEQ 0x00C9
00C2 C007 RJMP 0x00CA
(0116) {
(0117) case 0:
(0118) data=data+16;
00C3 5F40 SUBI R20,0xF0
(0119) break;
00C4 C005 RJMP 0x00CA
(0120) case 1:
(0121) data=data-16;
00C5 5140 SUBI R20,0x10
(0122) break;
00C6 C003 RJMP 0x00CA
(0123) case 2:
(0124) data=0;
00C7 2744 CLR R20
(0125) break;
00C8 C001 RJMP 0x00CA
(0126) case 3:
(0127) data=255;
00C9 EF4F LDI R20,0xFF
(0128) break;
(0129) }
(0130) ad5300(data);
00CA 2F04 MOV R16,R20
00CB DFAD RCALL _ad5300
00CC CFDF RJMP 0x00AC
(0131) }
(0132) }
(0133) }FILE: <library>
00CD 9508 RET
push_gset1:
00CE 935A ST R21,-Y
00CF 934A ST R20,-Y
00D0 9508 RET
pop_gset1:
00D1 E0E1 LDI R30,1
pop:
00D2 9149 LD R20,Y+
00D3 9159 LD R21,Y+
00D4 FDE0 SBRC R30,0
00D5 9508 RET
00D6 9169 LD R22,Y+
00D7 9179 LD R23,Y+
00D8 FDE1 SBRC R30,1
00D9 9508 RET
00DA 90A9 LD R10,Y+
00DB 90B9 LD R11,Y+
00DC FDE2 SBRC R30,2
00DD 9508 RET
00DE 90C9 LD R12,Y+
00DF 90D9 LD R13,Y+
00E0 FDE3 SBRC R30,3
00E1 9508 RET
00E2 90E9 LD R14,Y+
00E3 90F9 LD R15,Y+
00E4 9508 RET
push_gset2:
00E5 937A ST R23,-Y
00E6 936A ST R22,-Y
00E7 CFE6 RJMP push_gset1
push_gset3:
00E8 92BA ST R11,-Y
00E9 92AA ST R10,-Y
00EA CFFA RJMP push_gset2
pop_gset2:
00EB E0E2 LDI R30,2
00EC CFE5 RJMP pop
pop_gset3:
00ED E0E4 LDI R30,4
00EE CFE3 RJMP pop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -