⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handle.lst

📁 手操器
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -