📄 handle.lst
字号:
Interrupt Vectors
00000 C022 RJMP __start|__text_start
00009 C09F RJMP _timer0_ovf_isr
Program Code (text area)
__start|__text_start:
00023 E5CF LDI R28,0x5F
00024 E0D4 LDI R29,4
00025 BFCD OUT 0x3D,R28
00026 BFDE OUT 0x3E,R29
00027 51CE SUBI R28,0x1E
00028 40D0 SBCI R29,0
00029 EA0A LDI R16,0xAA
0002A 8308 ST Y,R16
0002B 2400 CLR R0
0002C E7E8 LDI R30,0x78
0002D E0F0 LDI R31,0
0002E E010 LDI R17,0
0002F 39E4 CPI R30,0x94
00030 07F1 CPC R31,R17
00031 F011 BEQ 0x0034
00032 9201 ST Z+,R0
00033 CFFB RJMP 0x002F
00034 8300 ST Z,R16
00035 E2EE LDI R30,0x2E
00036 E0F0 LDI R31,0
00037 E6A0 LDI R26,0x60
00038 E0B0 LDI R27,0
00039 E010 LDI R17,0
0003A E000 LDI R16,0
0003B BF0B OUT 0x3B,R16
0003C 34E6 CPI R30,0x46
0003D 07F1 CPC R31,R17
0003E F021 BEQ 0x0043
0003F 95C8 LPM
00040 9631 ADIW R30,1
00041 920D ST X+,R0
00042 CFF9 RJMP 0x003C
00043 D87C RCALL _main
_exit:
00044 CFFF RJMP _exit
_SPI_RW:
Vol --> R10
Value --> R16
00045 92AA ST -Y,R10
FILE: E:\工作项目\手操器\Cs5460A.c
(0001) //-------------------------------------------------------------
(0002) #include"cs5460a.h"
(0003) //-----------------------------------------------------------------------------
(0004)
(0005) unsigned char SPI_RW(unsigned char Value)
(0006) {
(0007)
(0008) unsigned char Vol=0;
00046 24AA CLR R10
(0009) /* unsigned char i;
(0010) for(i=0;i<8;i++)
(0011) {
(0012) Clr_CLK();
(0013) if(Value&0x80)
(0014) Set_MOSI();
(0015) else
(0016) Clr_MOSI();
(0017) Value<<=1;
(0018) Set_CLK();
(0019) Vol<<=1;
(0020) if(MOSI)
(0021) Vol|=1;
(0022) }
(0023) Clr_CLK();
(0024) return(Vol);*/
(0025) SPDR = Value; /* 启动数据传输 */
00047 B90F OUT 0x0F,R16
(0026) while(!(SPSR & BIT(SPIF))); /* 等待传输结束 */
00048 9B77 SBIS 0x0E,7
00049 CFFE RJMP 0x0048
(0027) Vol=SPDR; /* 清除中断标志 */
0004A B0AF IN R10,0x0F
(0028) return SPDR;
0004B B10F IN R16,0x0F
0004C 90A9 LD R10,Y+
0004D 9508 RET
_CS5460a_Write_Byte:
command --> R10
0004E 92AA ST -Y,R10
0004F 2EA0 MOV R10,R16
(0029) }
(0030)
(0031) //-------------------------------------------------------------
(0032) void CS5460a_Write_Byte(unsigned char command)
(0033) {
(0034) Clr_CS();
00050 B382 IN R24,0x12
00051 7F8B ANDI R24,0xFB
00052 BB82 OUT 0x12,R24
(0035) SPI_RW(command);
00053 2D0A MOV R16,R10
00054 DFF0 RCALL _SPI_RW
(0036) Set_CS();
00055 9A92 SBI 0x12,2
(0037) return;
00056 90A9 LD R10,Y+
00057 9508 RET
_CS5460a_Write:
l_byte --> R10
m_byte --> R12
h_byte --> R14
command --> R20
00058 D998 RCALL push_xgset30FC
00059 2EE2 MOV R14,R18
0005A 2F40 MOV R20,R16
0005B 84C8 LDD R12,Y+8
0005C 84AA LDD R10,Y+10
(0038) }
(0039) //-------------------------------------------------------------
(0040) void CS5460a_Write(unsigned char command,
(0041) unsigned char h_byte,
(0042) unsigned char m_byte,
(0043) unsigned char l_byte)
(0044) {
(0045) SPI_RW(command);
0005D 2F04 MOV R16,R20
0005E DFE6 RCALL _SPI_RW
(0046) SPI_RW(h_byte);
0005F 2D0E MOV R16,R14
00060 DFE4 RCALL _SPI_RW
(0047) SPI_RW(m_byte);
00061 2D0C MOV R16,R12
00062 DFE2 RCALL _SPI_RW
(0048) SPI_RW(l_byte);
00063 2D0A MOV R16,R10
00064 DFE0 RCALL _SPI_RW
(0049) return;
00065 C980 RJMP pop_xgset30FC
_CS5460A_REG_WR:
l_byte --> R14
m_byte --> R12
h_byte --> R10
command --> R20
00066 D98A RCALL push_xgset30FC
00067 2EA2 MOV R10,R18
00068 2F40 MOV R20,R16
00069 9723 SBIW R28,3
0006A 84CB LDD R12,Y+11
0006B 84ED LDD R14,Y+13
(0050) }
(0051) //-------------------------------------------------------------
(0052) void CS5460A_REG_WR(unsigned char command,
(0053) unsigned char h_byte,
(0054) unsigned char m_byte,
(0055) unsigned char l_byte)
(0056) {
(0057) Clr_CS();
0006C B382 IN R24,0x12
0006D 7F8B ANDI R24,0xFB
0006E BB82 OUT 0x12,R24
(0058) command<<=1;
0006F 0F44 LSL R20
(0059) command|=0x40;
00070 6440 ORI R20,0x40
(0060) CS5460a_Write(command,h_byte,m_byte,l_byte);
00071 82EA STD Y+2,R14
00072 82C8 ST Y,R12
00073 2D2A MOV R18,R10
00074 2F04 MOV R16,R20
00075 DFE2 RCALL _CS5460a_Write
(0061) Set_CS();
00076 9A92 SBI 0x12,2
(0062) return;
00077 9623 ADIW R28,3
00078 C96D RJMP pop_xgset30FC
_CS5460a_Read:
Vol --> Y,+0
Reg --> R10
00079 92AA ST -Y,R10
0007A 2EA0 MOV R10,R16
0007B 9724 SBIW R28,4
(0063) }
(0064) //-----------------------------------------------------------------------------
(0065) long CS5460a_Read(unsigned char Reg)
(0066) {
(0067) union WORD_BYTE Vol;
(0068) Clr_CS();
0007C B382 IN R24,0x12
0007D 7F8B ANDI R24,0xFB
0007E BB82 OUT 0x12,R24
(0069) Reg<<=1;
0007F 0CAA LSL R10
(0070) Vol.Byte.command=SPI_RW(Reg);
00080 2D0A MOV R16,R10
00081 DFC3 RCALL _SPI_RW
00082 830B STD Y+3,R16
(0071) Vol.Byte.h_byte =SPI_RW(0xfe);
00083 EF0E LDI R16,0xFE
00084 DFC0 RCALL _SPI_RW
00085 830A STD Y+2,R16
(0072) Vol.Byte.m_byte =SPI_RW(0xfe);
00086 EF0E LDI R16,0xFE
00087 DFBD RCALL _SPI_RW
00088 2EA0 MOV R10,R16
00089 82A9 STD Y+1,R10
(0073) Vol.Byte.l_byte =SPI_RW(0xfe);
0008A EF0E LDI R16,0xFE
0008B DFB9 RCALL _SPI_RW
0008C 2EA0 MOV R10,R16
0008D 82A8 ST Y,R10
(0074) Set_CS();
0008E 9A92 SBI 0x12,2
(0075)
(0076) return(Vol.Word);
0008F 8108 LD R16,Y
00090 8119 LDD R17,Y+1
00091 812A LDD R18,Y+2
00092 813B LDD R19,Y+3
00093 9624 ADIW R28,4
00094 90A9 LD R10,Y+
00095 9508 RET
FILE: E:\工作项目\手操器\mian.c
(0001) //ICC-AVR application builder : 2011-12-16 21:55:54
(0002) // Target : M8
(0003) // Crystal: 1.0000Mhz
(0004) //ICC-AVR application builder : 2011-12-18 18:42:31
(0005) // Target : M8
(0006) // Crystal: 4.0000Mhz
(0007)
(0008) #include <iom8v.h>
(0009) #include <macros.h>
(0010) #include "mian.h"
(0011) u8 keypress;
(0012) void port_init(void)
(0013) {
(0014) PORTB = 0x3F;
_port_init:
00096 E38F LDI R24,0x3F
00097 BB88 OUT 0x18,R24
(0015) DDRB = 0x2E;
00098 E28E LDI R24,0x2E
00099 BB87 OUT 0x17,R24
(0016) PORTC = 0x3F; //m103 output only
0009A E38F LDI R24,0x3F
0009B BB85 OUT 0x15,R24
(0017) DDRC = 0x3F;
0009C BB84 OUT 0x14,R24
(0018) PORTD = 0xFF;
0009D EF8F LDI R24,0xFF
0009E BB82 OUT 0x12,R24
(0019) DDRD = 0xFC;
0009F EF8C LDI R24,0xFC
000A0 BB81 OUT 0x11,R24
000A1 9508 RET
(0020) }
(0021)
(0022) //-------------------------------------------------------------
(0023)
(0024) //TIMER0 initialize - prescale:256
(0025) // desired value: 2mSec
(0026) // actual value: 1.984mSec (0.8%)
(0027) void timer0_init(void)
(0028) {
(0029) TCCR0 = 0x00; //stop
_timer0_init:
000A2 2422 CLR R2
000A3 BE23 OUT 0x33,R2
(0030) TCNT0 = 0xE1; //set count
000A4 EE81 LDI R24,0xE1
000A5 BF82 OUT 0x32,R24
(0031) TCCR0 = 0x04; //start timer
000A6 E084 LDI R24,4
000A7 BF83 OUT 0x33,R24
000A8 9508 RET
_timer0_ovf_isr:
i --> R16
000A9 922A ST -Y,R2
000AA 930A ST -Y,R16
000AB 938A ST -Y,R24
000AC 939A ST -Y,R25
000AD 93EA ST -Y,R30
000AE 93FA ST -Y,R31
000AF B62F IN R2,0x3F
000B0 922A ST -Y,R2
(0032) }
(0033) //-------------------------------------------------------------
(0034)
(0035) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0036) void timer0_ovf_isr(void)
(0037) {
(0038) u8 i=0;
000B1 2700 CLR R16
(0039)
(0040) TCNT0 = 0xE1; //reload counter value
000B2 EE81 LDI R24,0xE1
000B3 BF82 OUT 0x32,R24
(0041) discount++;
000B4 9180 0089 LDS R24,discount
000B6 5F8F SUBI R24,0xFF
000B7 9380 0089 STS discount,R24
(0042) if(discount>=8)
000B9 3088 CPI R24,0x8
000BA F018 BCS 0x00BE
(0043) discount=0;
000BB 2422 CLR R2
000BC 9220 0089 STS discount,R2
(0044)
(0045) PORTD |= 0xf0;
000BE B382 IN R24,0x12
000BF 6F80 ORI R24,0xF0
000C0 BB82 OUT 0x12,R24
(0046) PORTC |= 0x0f;
000C1 B385 IN R24,0x15
000C2 608F ORI R24,0xF
000C3 BB85 OUT 0x15,R24
(0047)
(0048) for(i=0;i<8;i++)
000C4 2700 CLR R16
000C5 C00E RJMP 0x00D4
(0049) {
(0050) if(i==discount)
000C6 9020 0089 LDS R2,discount
000C8 1502 CP R16,R2
000C9 F411 BNE 0x00CC
(0051) set_IO();
000CA 9AAD SBI 0x15,5
000CB C003 RJMP 0x00CF
(0052) else
(0053) clr_IO();
000CC B385 IN R24,0x15
000CD 7D8F ANDI R24,0xDF
000CE BB85 OUT 0x15,R24
(0054) clr_sck();
000CF B385 IN R24,0x15
000D0 7E8F ANDI R24,0xEF
000D1 BB85 OUT 0x15,R24
(0055) set_sck();
000D2 9AAC SBI 0x15,4
000D3 9503 INC R16
000D4 3008 CPI R16,0x8
000D5 F380 BCS 0x00C6
(0056) }
(0057)
(0058) PORTD &= disbuff[discount]|0x0f ;
000D6 E88A LDI R24,0x8A
000D7 E090 LDI R25,0
000D8 91E0 0089 LDS R30,discount
000DA 27FF CLR R31
000DB 0FE8 ADD R30,R24
000DC 1FF9 ADC R31,R25
000DD 8180 LD R24,Z
000DE 608F ORI R24,0xF
000DF B222 IN R2,0x12
000E0 2228 AND R2,R24
000E1 BA22 OUT 0x12,R2
(0059) PORTC &= disbuff[discount]|0xf0;
000E2 E88A LDI R24,0x8A
000E3 E090 LDI R25,0
000E4 91E0 0089 LDS R30,discount
000E6 27FF CLR R31
000E7 0FE8 ADD R30,R24
000E8 1FF9 ADC R31,R25
000E9 8180 LD R24,Z
000EA 6F80 ORI R24,0xF0
000EB B225 IN R2,0x15
000EC 2228 AND R2,R24
000ED BA25 OUT 0x15,R2
000EE 9029 LD R2,Y+
000EF BE2F OUT 0x3F,R2
000F0 91F9 LD R31,Y+
000F1 91E9 LD R30,Y+
000F2 9199 LD R25,Y+
000F3 9189 LD R24,Y+
000F4 9109 LD R16,Y+
000F5 9029 LD R2,Y+
000F6 9518 RETI
(0060)
(0061) }
(0062) //-------------------------------------------------------------
(0063)
(0064) //TIMER1 initialize - prescale:1
(0065) // WGM: 14) PWM fast, TOP=ICRn
(0066) // desired value: 1mSec
(0067) // actual value: 1.000mSec (0.0%)
(0068) void timer1_init(void)
(0069) {
(0070) TCCR1B = 0x00; //stop
_timer1_init:
000F7 2422 CLR R2
000F8 BC2E OUT 0x2E,R2
(0071) TCNT1 = 0xE0C1; //setup
000F9 EC81 LDI R24,0xC1
000FA EE90 LDI R25,0xE0
000FB BD9D OUT 0x2D,R25
000FC BD8C OUT 0x2C,R24
(0072) OCR1A = 0x3E7F;
000FD E78F LDI R24,0x7F
000FE E39E LDI R25,0x3E
000FF BD9B OUT 0x2B,R25
00100 BD8A OUT 0x2A,R24
(0073) OCR1B = 0x1F3F;
00101 E38F LDI R24,0x3F
00102 E19F LDI R25,0x1F
00103 BD99 OUT 0x29,R25
00104 BD88 OUT 0x28,R24
(0074) ICR1 = 0x3E7F;
00105 E78F LDI R24,0x7F
00106 E39E LDI R25,0x3E
00107 BD97 OUT 0x27,R25
00108 BD86 OUT 0x26,R24
(0075) TCCR1A = 0x32;
00109 E382 LDI R24,0x32
0010A BD8F OUT 0x2F,R24
(0076) TCCR1B = 0x19; //start Timer
0010B E189 LDI R24,0x19
0010C BD8E OUT 0x2E,R24
0010D 9508 RET
(0077) }
(0078)
(0079) //-------------------------------------------------------------
(0080) //SPI initialize
(0081) // clock rate: 2000000hz
(0082) void spi_init(void)
(0083) {
(0084) SPCR = 0x50; //setup SPI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -